발생일: 2020.12.23 키워드: byte, binary, 바이너리, 바이트, hex, hexdump, xdd, od 문제: 머신러닝 예제를 돌려보고 있는데, 1바이트에 1개의 레이블이 있고 10개씩 묶으로 가져와 처리하는 예제였다. 파일을 특정 바이트 단위로 묶어서 바이너리 형태로 보고 싶은데 어떻게 하면 될까? 해결책: xxd 툴로 바이너리로 읽어볼 수 있다. 기억을 더듬느라 좀 헷갈렸는데, 1byte = 8bit = 0~255 까지 256을 표현 = 2진수(binary)로 8자리 (00000000 ~ 11111111) = 2진수는 4자리 씩 끊어 보여주면 16진수 (0000 0000 ~ 1111 1111) = 16진수(hexadecimal)로 2자리 (00 ~ ff) xxd 나 hexdump 명..
발생일: 2016.06.21 키워드: bash, shell, new line, 새 줄, 뉴 라인, unix, \n 문제: 쉘 스크립트에서 변수에 new line 캐릭터를 넣으려고 한다. 해결책: $'\n' 을 사용해서 뉴 라인 캐릭터를 넣을 수 있다. str="foo"$'\n'"bar"$'\n\n'"baz" echo $str > foo bar baz 논의: 아래처럼 변수에 할당해두고 사용하는 것도 좋겠다. nl=$'\n' echo "foo${nl}bar${nl}${nl}baz" 참고: http://stackoverflow.com/questions/9402961/adding-newline-characters-to-unix-shell-variables
발생일: 2016.01.05 키워드: nohup, &, 백그라운드, background 문제: ssh 로 서버에 접속해 백그라운드 작업을 실행하려고 한다. 아래와 같이 & 로 백그라운드로 실행하도록 했는데, 명령 종료 후 바로 태스크도 종료된다. $ ssh user@host "task_command &;" 어떻게 하면 될까? 해결책: & 는 현재 세션에서만 유효하기 때문이다. nohup 을 붙이면, 현재 세션이 끊어진 이후에도 백그라운드 작업을 수행할 수 있다. 아래처럼 호출하면 된다. $ ssh user@host "nohup task_command &;" 참고: http://askubuntu.com/questions/349262/run-a-nohup-command-over-ssh-then-disconn..
발생일: 2016.01.05 키워드: ssh, bash_profile 문제: ssh 로 명령을 호출할 때 쉘로 접속했을 때와 동일한 환경에서 실행되도록 하고 싶다. ssh 실행 시, .bash_profile 도 실행되게 하면 될 것 같다. 어떻게 하면 될까? 해결책: 간단하다. 아래처럼 .bash_profile 을 먼저 실행하고 작업을 수행하면 된다. $ ssh user@host "source ~/.bash_profile && cd $some_dir && ./run_command" 참고: http://unix.stackexchange.com/questions/148780/including-bash-profile-over-ssh
발생일: 2015.11.09 키워드: sed, 치환, 정규식 문제: 쉘 스크립트로 파일에서 특정 문자열을 찾아 치환하려고 한다. 요청하는 API 버전을 바꿀 목적이었고, 파일 내에서 `/api/10/` 과 같은 패턴을 찾아 `/api/{new_version}`으로 변경하려고 한다. 어떻게 하면 될까? 해결책: sed 명령으로 처리할 수 있다. 문제의 경우, 아래처럼 처리했다. new_version 은 새 버전이 담긴 변수이고, file 은 대상 파일이 담긴 변수, TEMP_FILE 은 결과를 임시 파일에 쓴 후 덮어쓰기 위한 용도로 정의한 변수이다. sed -e "s/\(\"\/api\/\)[0-9\[0-9]*\(\/\)/\1${new_version}\2/g" $file > $TEMP_FILE # sed..
발생일: 2015.07.08 키워드: chsh, 쉘, bash, zsh, oh-my-zsh 문제: 주변에서 zsh 이 좋다는 얘기를 듣고, 이런 저런 쉘을 설치해보고 있다. oh-my-zsh 을 설치한 후에, Prezto 가 더 좋은 것 같아 쉘을 변경하려고 oh-my-zsh 을 삭제했다. 헌데, 터미널을 열 때마다 여전히 zsh 이 열린다. 어떻게 다시 bash 로 되돌리지? 해결책: 기본 쉘을 변경하는 `chsh`라는 명령이 있다. $ chsh 명령을 실행하면 기본 파일이 열리는데, 기본 쉘 파일을 `bash`나 원하는 쉘로 변경하면 된다.
발생일: 2015.02.07 키워드: bash_profile, bash 문제: 서버의 .bash_profile 스크립트를 수정했다. 해당 스크립트에서 오류가 있었는지, 쉘로 접속하면 바로 터미널이 종료된다. 헐.... 어떻게 하지... 해결책: .bash_profile 을 사용하지 않는 다른 쉘로 접속하면 된다. $ ssh -t username@hostname /bin/sh 살았다.ㅎㅎ 참고: http://serverfault.com/questions/94503/login-without-running-bash-profile-or-bashrc
발생일: 2015.10.19 키워드: xargs, 파라미터, 중간 문제: 디렉토리에서 특정 확장자를 가진 파일을 찾아 특정 폴더로 복사하려고 한다. find 와 xargs 명령으로 간단히 처리할 수 있을 것 같은데, xargs 명령 중간에 넣어야 할 것 같다. 어떻게 하면 될까? 해결책: xargs 명령의 파라미터를 중간에 넣고 싶을 때엔, 아래처럼 구분문자열을 정의하고 커맨드 내에서 구분문자열을 사용하면 된다. xargs -I [구분문자열] 커맨드 예를 들어, 위의 문제에서 구분자를 '%'로 사용한다고 가정하면, 아래와 같이 처리할 수 있다. $ find . -name *.js | xargs -I % cp % ./dist 다른 구분자를 사용자를 사용하고 싶다면 -l 옵션에서 변경하면 된다. 예를 들어,..
발생일: 2015.05.08 키워드: scp, permission, owner, permissions and owner changed after scp 문제: 배포할 때 scp 로 대상 서버로 파일을 복사하는데, 복사 후에 대상 파일의 권한과 소유자가 변경된다. 해결책: scp 이후에 파일 권한과 소유자가 변경된다. `-p` 옵션을 쓰면 파일 권한을 유지할 수는 있지만, 파일의 소유자는 로그인하는 유저로 변경된다. 배포 후에 권한과 소유자를 변경하는 방법으로 해결했다. 참고: http://unix.stackexchange.com/questions/144596/scp-and-file-owner