본문 바로가기
A. Development/Free Topic

Ubuntu - Screen , zip, tar 사용법

by IMCOMKING 2014. 7. 7.
Screen vs tmux

새로 개발된 tmux가 좋을까? 오래 동안 사용된 screen이 좋을까?
처음엔 새로 나온 tmux가 무조건 더 좋을 거라고 생각했으나, 오히려 반대로 생각하는 사람들도 많이 있었다.
아주 오랜시간 서버 백엔드에서 검증되고 사용된 screen이 더 안정적이라는 것이다.
그래서 나도 tmux보단 원래부터 익숙하게 쓰던 screen을 계속 쓰고 있다.

 

 

Screen 세션에서 한글입출력이 필요한 경우

screen -SU: 반드시 세션을 생성할 때, -U 옵션을 주어야만 utf-8을 인식할 수 있다.

 

Screen 사용법

- screen: screen은 세션을 만드는 역할이고, session이란 기존의 bash에서 한 layer 더 깊게 들어가는 구조이다. 하나의 screen을 만들면 독립된 process로 돌아간다. 따라서 이를 이용해서 screen을 만들고 거기에 서버를 돌려놓고 다른 작업을 하는 것이 가능하다. 또한 screen은 깊은 구조라 하나의 screen내에서 여러개의 터미널을 띄워서 사용하는 것도 가능하다.

즉 screen은 여러개의 세션을 사용하는 것 ( 즉 푸티로 3개의 계정에 접속할 필요없이 하나의 접속안에서 여러가지 세션을 실행가능)

 

세션 사용법 : 명령어는 ctrl A + [] 의 형태로 조합해서 사용한다. 또한 tab으로 세션이름 자동완성 가능

screen -S session_name: session_name이라는 이름의 새로운 세션을 생성한다.

screen -S session_name bash : 현재의 bash shell 과 동일하게 동작하는 세션 생성

ctrl a + d : 세션에서 분리해서 떨어져 나온다. (detached. 세션은 그대로 하던일을 하고 있음)

screen -ls : 세션 리스트를 확인한다.

screen -r session_name : 분리했던 세션에 다시 연결한다.(그냥 항상 -rd로 하는게 편리해보임)

screen -rd session_name : 이미 다른 terminal에 의해 attached 되어있는 session을 detach 시키고, 여기서 다시 접속한다. 
https://unix.stackexchange.com/questions/240444/cant-resume-screen-says-i-am-already-attached

screen -S session_name -X quit : session_name을 강제종료한다. (session_name대신에 앞에 붙은 세션 번호도 가능함)

screen -S session_name -X screen : screen 안에 screen 만들기.(다른 명령어도 가능)

screen -d : detached된 상태로 세션을 실행한다

screen -dmS session_name : detached된 상태로 세션 실행하면서 백그라운드 데몬으로 계속해서 돌린다

 

- Screen에서의 고급 터미널 사용법: 명령어는 ctrl A + [] 의 형태로 조합해서 사용한다

ctrl a + ? : 터미널 관리 명령어들을 확인한다.

ctrl a + c : 세션안에서 새로운 window를 생성한다. (window는 세션 아래에 layer를 하나 더 추가하는 개념임)

ctrl a + n : 다음 window

ctrl a + backspace: 이전 window
ctrl a + A/space/backspace : 터미널을 전환한다.
ctrl a + 숫자 : 해당 숫자의 터미널로 전환한다

exit : 현재 터미널을 종료한다.
ctrl a + k : 현재 터미널을 강제 종료한다.

ctrl a + s : 화면을 2개로 분할한다.

ctrl a + x : 생성한 화면을 제거한다.

ctrl a + s : 키보드 lock을 건다. (잘못누르면 큰일 나는 상황에서 사용)

ctrl a + q : 키보드 unlock을 한다.

 

https://kldp.org/node/18744

 

- Screen을 이용한 백그라운드 프로세스 돌리기

screen -dm 할일
ex) screen -dm bash -c 'python /home/biadmin/dhkwak/deep-rl-tensorflow/main.py; sleep 10'
screen -dm bash -c "myscript.sh; sleep 10" # 여러개의 명령어를 실행할 수도 있고, sleep 을 이용해서 에러메시지를 확인할 수가 있다!!!
screen -S pingsession -d -m -L ping localhost

screen -dm bash -c 'export PATH=/usr/local/cuda/bin:$PATH; export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH; python main.py ;'

# 특히 위와 같은 방법으로 export를 해주어야할 때가 있음. 근데 이런 export를 편하게하기 위해서 .screenrc를 사용하면 된다고함.

 

http://www.dreamy.pe.kr/zbxe/CodeClip/164809
https://www.gnu.org/software/screen/manual/screen.html#Invoking-Screen

 

 

# bash -c 옵션 확인 방법
man bash

 

유용한 command

- 자동으로 Yes나 No라고 대답하는 bash command

yes | ./script
yes n | ./script

https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line

 

 

cd -      : 직전에 있었던 경로로 되돌아간다.

 

Ubuntu Process 컨트롤

- 프로세스 확인
top : 현재 돌고있는 프로세스 확인
ps -a : 프로세스 확인

 

- 트래픽 확인
iftop : 트래픽확인

 

- 프로세스 강제 종료
kill -9 프로세스이름 or PID
(프로세스이름이나 PID는 ps -a 등을 통해 확인)

 

- 어떤 작업을 background에서 실행시키기
커멘드 뒤에 & 을 붙인다.
ex) python main.py &

http://www.thegeekstuff.com/2010/05/unix-background-job
https://www.gnu.org/software/bash/manual/html_node/Job-Control-Builtins.html

 

- 현재 shell에서 돌아가고 있는 process를 일시중지하기

ctrl + z (ctrl + c 혹은 ctrl + d 는 process를 완전히 stop시키는 것임)
ex) 파이썬을 컨트롤 D로 종료안하고, 컨트롤 Z로 빠져나온 경우 파이썬은 bg에 남아있음.

 
- 백그라운드 작업 확인
jobs

- 일시 중지된 process를 foreground에서 다시 실행시키기
fg : 방금 정지한 process를 실행
fg %숫자 : jobs로 확인한 번호의 process를 실행

- 일시 중지된 process를 background에서 다시 실행시키기
bg : 방금 정지한 process를 실행
bg %숫자 : jobs로 확인한 번호의 process를 실행

- jobs에 있는 process 중지시키기
kill %숫자

- Background에서 작업중인 process 일시정지하기
jobs 명령어로 job숫자를 알아낸다음, fg %숫자 로 foreground로 가져온 다음, ctrl + z 를 눌러서 일시중지 시킨다.

http://pragp.tistory.com/entry/Linux%EB%A6%AC%EB%88%85%EC%8A%A4-fg-bg-kill-CtrlZ

 

 

Ubuntu 기초 명령어

- 현재 디렉토리에서 파일 이름으로 찾기

find . -name '*.html'

- 현재 디렉토리에서 해당 파일이나 폴더 삭제하기
find . -name ".ipy*" -delete

- 현재 디렉토리에서 해당 디렉토리만 삭제하기
find . -name ".ipy*" -type d -exec rm -r "{}" 

https://unix.stackexchange.com/questions/89925/how-to-delete-directories-based-on-find-output

 

- 명령어 실행 결과 페이지 스크롤해서 넘기기

ls | less 이렇게 하면 긴 화면이 한번에 안넘어가고 천천히 넘어감.

 

- copy

cp 원본 타겟 : 파일 복사

cp -r 원본 타겟 : 디렉토리 복사

 
 

- 서버간 파일복사(scp)
scp -rpC source경로 dest경로:
ex)  scp -rpC tensorflow-deepq biadmin@147.46.215.136:dhkwak

#주의사항. dest경로 마지막에 반드시 " : " 를 붙여줘야함. 여기가 home디렉토리임
또한 scp를 이용해서 자신의 파일을 외부로 서버로 보낼 수도 있고, 반대로 외부의 파일을 자신의 서버로 가져올수도 있다.

 

- scp에서 포트 지정하는 방법(도커 컨테이너 등으로 접속시)
scp -P 포트

 

- scp를 private key를 통해 실행하는 방법
scp -i ~/.ssh/private-key

 

- scp를 gateway를 거쳐서 수행하는 방법: ssh 터널링을 이용한다.
ssh -L <port>:remote_ip:22 gate_way_id@gate_way_ip
scp -P <port> remote_id@127.0.0.1:/path/to/file /local/path

https://www.urbaninsight.com/article/running-scp-through-ssh-tunnel
https://medium.com/@roshan.deniyage/scp-tunneling-through-a-gateway-c96c1ec55809

 

- 파일내에서 문자열 검색

grep -rn 검색키워드

 

-우분투 리눅스 계정 생성

adduser 아이디

http://mintnlatte.tistory.com/256

 

 

 

-bad interpreter: No such file or directory 문제

윈도우즈 에디터로 편집한 파일을 실행하는 경우 발생

http://tod2.tistory.com/28

--

sudo poweroff : 컴퓨터 종료

 

reboot : 리부팅
(shutdown이나 poweroff가 잘 작동안하는 경우가 있다고함.)

 

- 웹에서 다운 받기

wget url : 현재경로에 파일 다운로드 받기
wget url -O 파일명 : 지정한 파일명으로 다운로드 받기.

 

- sudoers에 권한 추가하기

http://blog.outsider.ne.kr/505


- 파일 실행법


(실행시 permission denied가 뜨면, 다음과 같이 실행권한을 추가해주어야한다.)
#>chmod a+x file.run
#>./file.run

 

 

export
-> 환경변수 리스트를 보여준다.

export 변수명=변수값
-> 해당 변수명에 변수값을 등록한다.

echo $변수명
-> 변수명에 해당하는 환경변수값을 보여준다.

export 변수명=$변수명:변수값
-> 변수명에 변수값을 추가한다

http://akaseon.tistory.com/50

- 리눅스 계정 생성(root계정이 아닌경우 sudo를 앞에 붙여야함)useradd -G 그룹명 -m 아이디 -d 홈경로지정 -s /bin/bash
(-m 홈디렉토리를 만듬, -s 기본 베쉬를 지정)
passwd 아이디
(치면 2번에걸처 비밀번호를 입력함)

- 파이썬 실행
그냥 python 치고 입력하면 바로 실행되네
python -c 하는건 그냥 커맨드라인에서 실행하는 것\

 

 

싹다지워버리기:

rm -rdf 지울폴더 #조심해서 사용할 것. os 다시설치하는 수가 있음



# Symbolic link를 만들어서 bin파일 위치를 등록하기
sudo ln -s 원래Bin파일위치 /usr/local/bin/심볼릭링크이름

- tar 파일

# 압축하기

tar -cvf [원하는이름.tar] 대상들(디렉토리도 됨)

ex) tar -cvf test.tar abc.c


tar -cvzf 를 쓰면 gz로 압축이 되고, z를 빼면 압축이안되고 묶기기만함

 

# 압축풀기

tar -xvf 파일명 를쓰면 압축풀린다.

마찬가지로 xvzf를 하면 tar.gz 를 풀 수 있음.

http://sarghis.com/blog/468/
- zip 하기

-r을 붙여야 하위 디렉토리도 전부 압축한다.

zip -r my_arch.zip my_folder 

- unzip 하기

unzip my_arch.zip

- gz 파일 : 1개의 파일을 압축하는 용도. 여러개의 파일은 tar 등을 사용# 압축하기gzip -d 파일명# 압축풀기gzip 파일명
- tgz 파일 : tar+gz 파일임# 압축 풀기tar xvzf 파일명# 압축 하기tar cvzf 원하는이름.tar.gz 폴더명
- 파일에서 특정한 문자열을 검색해서 바꾸기

sed -i 's/바꿀대상/바꿀내용/g' 파일명

ex) sed -i "s/kDefaultTotalBytesWarningThreshold/kDefaultTotalBytesWarningThreshold = 5121 \<\< 20\;\/\//g" google/protobuf/src/google/protobuf/io/coded_stream.hhttp://forum.falinux.com/zbxe/index.php?document_srl=535694&mid=lecture_tip
http://ngee.tistory.com/309

댓글