자택경비대

Python2 pwntools SyntaxError: invalid syntax 해결방법.

Programming
...
pygments/formatters/html.py", line 554
    file=sys.stderr)
SyntaxError: invalid syntax

Pygments 패키지가 2.6 버전부터 python2 지원을 중단하면서 발생한 문제다.

아래와 같이 pwntools 제거 후 Pygments 다운그레이드를 진행하고 재설치 하면 된다.

sudo pip uninstall pwntools
sudo pip install 'pygments==2.5.1'
sudo pip install pwntools

Bash 매개변수 확장

Programming

${variable:-word}

$variable이 존재하지 않거나 null인 경우 word로 치환됩니다.

${variable:=word}

$variable이 존재하지 않거나 null일 경우 word값을 $variable에 대입하고 치환합니다.

${varaible:?word}

$variable이 존재하지 않거나 null일 경우 word 값을 stderr에 출력하고 종료합니다.

${variable:+word}

$variable이 존재하지 않거나 null일 경우 아무것도 하지 않습니다. 이외의 경우 word로 치환합니다


${variable:offset:length}

파이썬의 slice와 동일하게 동작합니다. 단, step이 존재하지 않습니다. 음수로 offset, length를 지정할 때에는 : 으로부터 공백을 추가 하는것을 권장합니다(:- 확장과 혼동할 수 있기 때문).

${!prefix*}
${!prefix@}

prefix로 시작하는 변수들을 IFS 변수로 구분하여 확장합니다.

${!variable[*]}
${!variable[@]}

$variable이 배열 변수일 경우 원소들을 IFS변수로 구분하여 확장합니다. 배열이 아니거나 null일 경우 0으로 확장합니다.

${variable#match}  # Shortest
${variable##match}  # Longtest

# e.g.)
FOO="foobarbaz"; echo ${FOO#*ba}
rbaz
FOO="foobarbaz"; echo ${FOO##*ba}
z

앞에서 부터 match와 동일한 부분을 삭제하여 확장합니다. #은 가장 짧은 경우, ##은 가장 긴 경우를 삭제합니다.

${variable%match}
${variable%%match}

# e.g.)
FOO="foobarbaz"; echo ${FOO%ba*}
foobar
FOO="foobarbaz"; echo ${FOO%%ba*}
foo

#와 같이 match되는 부분을 삭제하여 확장하지만, 뒤에서 부터 확인합니다.

${variable/pattern/word}

patternword로 치환하여 확장합니다. 만약 pattern/으로 시작할 경우 모든 패턴을 word로 치환합니다.

실행 vs 읽기 비트, 리눅스폴더에서는 어떻게 동작하나요?

stackoverflow

사용자가 폴더를 열기 위해서는 실행 비트(+x)가 설정되어 있어야 한다는 것을 깨달았습니다. 왜 실행 권한이 폴더를 읽는데 필요한건가요?


리눅스에서 폴더에 권한을 부여할 때에는, 일반 파일에 권한을 부여할 때와 차이점이 있습니다.

  • 읽기 비트(r)가 유저에게 폴더안의 파일목록을 볼 수 있도록 합니다.
  • 쓰기 비트(w)가 유저에게 파일의 생성, 이름 변경, 삭제, 그리고 폴더의 속성 변경을 가능하게 합니다.
  • 실행 비트(x)가 유저에게 폴더로 들어 올 수 있도록 하고, 내부 파일들에 접근 가능하도록 합니다.
  • Sticky 비트 (실행 비트가 설정되어 있는경우 T 혹은 t)가 폴더 내부의 파일 혹은 폴더의 삭제, 이름 변경이 소유자에 의해 가능하도록 설정합니다.