리눅스 쉘(bash), 기본 명령어 이해 및 실습
이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, IT 컨텐츠를 공유하고자, 자체 온라인 강의 사이트와 유투브 채널을
오픈하였습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
● 잔재미코딩 유투브 오픈
[구독해보기]
2.2. 리눅스 기본 명령어 정리¶
- 리눅스 명령어는 결국 쉘이 제공하는 명령어임
- 리눅스 기본 쉘이 bash 이므로, bash에서 제공하는 기본 명령어를 배우는 것임
- whoami : 로그인한 사용자 ID를 알려줌
# whoami
root
- passwd : 로그인한 사용자 ID의 암호 변경
# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
- pwd : 현재 디렉토리 위치
# pwd
/
- cd : 디렉토리 이동
# pwd
/etc
# cd ~
# pwd
/root
# cd -
# pwd
/etc
- ls : 파일 목록 출력
# ls -al
total 32
drwxr-xr-x 4 root root 4096 Oct 3 09:51 .
drwxr-xr-x 1 root root 4096 Oct 4 03:52 ..
drwxr-xr-x 2 root root 4096 Oct 3 09:47 conf.d
-rwxr-xr-x 1 root root 120 Jul 19 19:28 debian-start
-rw------- 1 root root 317 Oct 3 09:47 debian.cnf
lrwxrwxrwx 1 root root 24 Oct 3 09:47 my.cnf -> /etc/alternatives/my.cnf
-rw-r--r-- 1 root root 839 Jan 21 2017 my.cnf.fallback
-rw-r--r-- 1 root root 682 Feb 3 2017 mysql.cnf
drwxr-xr-x 2 root root 4096 Oct 3 12:47 mysql.conf.d
- 와일드 카드
- * 는 임의 문자열
- ? 는 문자 하나
# ls debi* -al
-rwxr-xr-x 1 root root 120 Jul 19 19:28 debian-start
-rw------- 1 root root 317 Oct 3 09:47 debian.cnf
- cat : 파일 보기
# cat mysql.cnf
mysql.cnf 파일 내용이 출력됨
- head/tail : head 는 파일 시작부분, tail 은 끝 부분을 보여줌
# head mysql.cnf
mysql.cnf 파일 앞부분만 출력됨 (기본적으로 출력 라인 수가 10으로 정해져 있음)
# tail mysql.cnf
mysql.cnf 파일 뒷부분만 출력됨 (기본적으로 출력 라인 수가 10으로 정해져 있음)
- more : 파일 보기 (화면이 넘어갈 경우, 화면이 넘어가기 전까지 보여줌)
# more mysql.cnf
mysql.cnf 파일 내용이 출력됨
- rm : 파일 및 폴더 삭제
- 주로 사용하는 명령어 형태: rm -rf
- r 옵션: 하위 디렉토리를 포함한 모든 파일 삭제
- f 옵션: 강제로 파일이나 디렉토리 삭제
- man
- manual이라는 의미. man rm을 입력하면 메뉴얼이 나옴
2.3. 리눅스 리다이렉션(redirection) 과 파이프(pipe)¶
- standard stream
- command 로 실행되는 process 는 세 가지 스트림을 가지고 있음
- 표준 입력 스트림 (standard input stream)
- 표준 출력 스트림 (standard output stream)
- 오류 출력 스트림 (standard error stream)
- 모든 스트림은 일반적인 plain text로 console 에 출력하도록 되어 있음
- command 로 실행되는 process 는 세 가지 스트림을 가지고 있음
- 리다이렉션(redirection)
- 스트림 흐름을 바꿔주는 것으로 > 또는 < 을 사용함
- 예
- ls > files.txt
- ls 로 출력되는 표준 출력 스트림의 방향을 files.txt 로 바꿔줌 (files.txt 에 ls 로 출력되는 결과가 저장됨)
- head < files.txt
- files.txt 의 파일 내용이 head 라는 파일의 처음부터 10 라인까지 출력해주는 명령으로 넣어짐 (files.txt 의 앞 10 라인이 출력됨)
- head < files.txt > files2.txt
- files.txt 의 파일 내용이 head 로 들어가서, files.txt 의 앞 10 라인을 출력
- head 의 출력 스트림은 다시 files2.txt 로 들어감
- head 는 files.txt 내용을 출력하지 않고, 해당 출력 내용이 다시 files2.txt 에 저장됨(결과적으로 files.txt 의 앞 10 라인이 files2.txt에 저장됨)
- ls > files.txt
- 기존 파일에 추가는 >> 또는 << 사용
- ls >> files.txt
- 기존에 있는 files.txt 파일 끝에, ls 출력 결과를 추가해줌
* 파이프(pipe) * 두 프로세스 사이에서 한 프로세스의 출력 스트림이 또다른 프로세스의 입력 스트림으로 사용될 때 쓰임
ls | grep files.txt
- ls 명령을 통한 출력 내용이 grep 명령의 입력 스트림으로 들어감
- grep files.txt 는 grep 명령의 입력 스트림을 검색해서 files.txt 가 들어 있는 입력 내용만 출력해줌
- 따라서, ls 명령으로 해당 디렉토리/파일 중에 files.txt 파일이 있는지를 출력해줌
- grep : 검색 명령
- grep [-option] [pattern] [file or directory name]
<option>
-i : 영문의 대소문자를 구별하지 않는다.
-v : pattern을 포함하지 않는 라인을 출력한다.
-n : 검색 결과의 각 행의 선두에 행 번호를 넣는다(first line is 1).
-l : 파일명만 출력한다.
-c : 패턴과 일치하는 라인의 개수만 출력한다.
-r : 하위 디렉토리까지 검색한다.
- 사용 예
- grep python files.txt -> files.txt 라는 파일에서 python 라는 문구가 들어간 모든 행을 출력
- grep -n python files.txt -> files.txt 라는 파일에서 python 라는 문구가 들어간 모든 행을 라인까지 출력
- grep -r python foldername -> foldername 라는 폴더내의 모든 파일 중 python 라는 문구가 들어간 행을 출력
- grep -i python files.txt -> files.txt 라는 파일에서 python 라는 문구를 대,소문자 구분 없이 검색해서 출력
- grep -E "go|java|python" files.txt -> files.txt 라는 파일에서 go, java, 또는 python 이 있는 모든 행을 출력
2.4. 리눅스 프로세스¶
- 리눅스 프로세스
- 프로세스는 실행 중인 프로그램을 의미
- 좀더 깊게 이해한다면!
- 프로세스는 메모리에 적재된 코드(바이너리) 이미지와 가상화된 메모리(가상 메모리)의 인스턴스, 열린 파일 같은 커널 리소스, 관련된 사용자 정보와 같은 보안 정보, 하나 이상의 스레드를 포함
- 좀더 깊게 이해한다면!
- 리눅스는 프로세스가 프로그램 실행 단위 (스케쥴링 단위)
- 프로세스 ID(pid) 라는 unique한 ID를 부여받고, pid를 활용해서 프로세스를 제어
- 리눅스는 기본적으로 다양한 프로세스가 실행됨
- 유닉스 철학과 관련: 각 프로그램은 하나의 일을 잘 할 수 있게 만들 고, 새로운 기능이 필요하면, 기존 프로그램에 추가하지 말고, 새로운 프로그램을 만들 것.
- 여러 프로그램이 서로 유기적으로 각자의 일을 수행하면서 전체 시스템이 동작하도록 하는 모델
- 프로세스는 실행 중인 프로그램을 의미
- foreground process / background process
- foreground process: 쉘(shell)에서 해당 프로세스 실행을 명령한 후, 해당 프로세스 수행 종료까지 사용자가 다른 입력을 하지 못하는 프로세스
- background process: 사용자 입력과 상관없이 실행되는 프로세스
- 쉘(shell)에서 해당 프로세스 실행시, 맨 뒤에 & 를 붙여줌
- 사용 예
# find / -name '*.py' > list.txt & [1] 57
- [1] 은 작업 번호 (job number), 57 은 pid (process ID) 를 나타냄
foreground process 제어하기 - [CTRL] + z : foreground 프로세스를 실행 중지 상태(suspend 모드)로 변경 - 맨 마지막 [CTRL] + z 로 중지된 프로세스는 bg 명령으로 background 프로세스로 실행될 수 있음 - jobs 명령어 : 백그라운드로 진행 또는 중지된 상태로 있는 프로세스를 보여줌
# find / -name '*.txt' ^Z [1]- Stopped find / -name '*.txt' # find / -name '*.py' ^Z [2]- Stopped find / -name '*.py' # jobs [1]- Stopped find / -name '*.txt' [2]+ Stopped find / -name '*.py' # bg [2]+ find / -name '*.py' &
- [CTRL] + c : 프로세스 작업 취소 (해당 프로세스는 완전히 종료됩니다.)프로세스 중지시키기
- kill 명령어
- 사용법
- kill % 작업 번호(job number)
- kill 프로세스 ID(pid)
- 작업 강제 종료 옵션 -9
- 예
# find / -name '*.py' > list.txt & [1] 57 # kill -9 57
- 사용법
- kill 명령어
프로세스 상태 확인
- ps 명령어
- 사용법 : ps [option(s)]
- option(s)
-a : 시스템을 사용하는 모든 사용자의 프로세스 출력 (보통 aux 와 같이 u, x 옵션과 함께 사용) -u : 프로세스 소유자에 대한 상세 정보 출력 -l : 프로세스 관련 상세 정보 출력 -x : 터미널에 로그인한 후 실행한 프로세스가 아닌 프로세스들도 출력함. 주로 데몬 프로세스(daemon process)까지도 확인하기 위해 사용함. 본래 ps 명령은 현재 쉘(shell)에서 실행한 프로세스들만 보여주기 때문에 이 옵션을 사용하는 경우가 많음 -e : 해당 프로세스와 관련된 환경 변수 정보도 함께 출력 -f : 프로세스 간 관계 정보도 출력
- 데몬 프로세스(daemon process): daemon은 악마를 의미함. 사용자 모르게 시스템 관리를 위해 실행되는 프로세스로 보통 시스템이 부팅될 때 자동 실행 (예: ftpd, inetd 등)
- ps 출력 정보 항목
USER : 프로세스를 실행시킨 사용자 ID PID : 프로세스 ID %CPU : 마지막 1분 동안 프로세스가 사용한 CPU시간의 백분율 %MEM : 마지막 1분 동안 프로세스가 사용한 메모리 백분율 VSZ : 프로세스가 사용하는 가상 메모리 크기 RSS : 프로세스에서 사용하는 실제 메모리 크기 TTY : 프로세스와 연결된 터미널 포트 STAT : 프로세스 상태 START : 프로세스가 시작된 시간 TIME : 현재까지 사용된 CPU 시간(분:초) COMMAND : 명령어
프로세스 실행 권한
- sudo 명령어 : root 계정으로 로그인 하지 않은 상태에서 root 권한이 필요한 명령을 실행할 수 있도록 하는 프로그램
- 기본 사용법
- sudo 명령어
- 사용 예
- sudo apt-get update
- /etc/sudoers 설정 파일에서 다음과 같이 설정을 변경할 수 있음
(visudo 를 쉘에서 명령하면, 해당 설정 파일이 오픈되어 수정 가능함, 물론 통상 root 권한으로 수정) 1. 특정 사용자가 sudo를 사용할 수 있도록 설정 userid ALL=(ALL) ALL 2. 특정 그룹에 포함된 모든 사용자가 sudo를 사용할 수 있도록 설정 %group ALL=(ALL) ALL 3. 패스워드 생략 설정 %group ALL=(ALL) NOPASSWD: ALL userid ALL=(ALL) NOPASSWD: ALL
- 기본 사용법
- sudo 명령어 : root 계정으로 로그인 하지 않은 상태에서 root 권한이 필요한 명령을 실행할 수 있도록 하는 프로그램
주로 사용하는 프로세스 명령 (적어도 이 명령은 편하게 사용해야 함)
- ps aux | grep 프로세스명 : 프로세스가 실행 중인지를 확인하고, 관련 프로세스에 대한 정보 출력
- kill -9 프로세스 ID(pid) : 해당 프로세스를 강제로 죽임
- 명령 & : 터미널에서 다른 작업을 해야하거나, 프로세스 실행에 오랜 시간이 걸릴 경우 background 로 실행
- [CTRL] + z : 프로세스 중지
- [CTRL] + c : 프로세스 종료(실행 취소)
2.5. 리눅스와 권한¶
- 운영체제는 사용자/리소스 권한을 관리
- 리눅스는 사용자/그룹으로 권한을 관리
- root는 슈퍼관리자
- 파일마다 소유자, 소유자 그룹, 모든 사용자에 대해
- 읽고, 쓰고, 실행하는 권한을 관리
파일 권한¶
사용자
- 소유자: 소유자에 대한 권한
- 그룹: 소유자가 속해 있는 그룹에 대한 권한
- 공개: 모든 사용자들에 대한 권한
퍼미션 종류, (권한 기호)
- 읽기(r): 읽기 권한
- 쓰기(w): 쓰기 권한
- 실행(x): 실행 권한
chmod : 파일 권한 변경¶
- 숫자를 사용하는 방법
- 각 권한 계산값 예
rwxrwxrwx = 777
r-xr-xr-x = 555
r-------- = 400
rwx------ = 700
권한 변경 예: chmod 400 mysecurity.pem
- 주로 사용하는 옵션
- 해당 폴더의 파일과 하부폴더 모두 권한 바꾸기
- chmod -R 777 directory
In [ ]: