[리눅스] 자주 쓰는 쉘 명령어들
쉘(Shell)
명령어와 프로그램을 실행할 때 사용하는 인터페이스
리눅스의 핵심부인 리눅스 커널과 사용자간의 다리 역할을 하는 것으로, 사용자의 명령을 해석하고 실행하는 역할을 한다.
특징
- 자체적으로 프로그래밍 기능이 있어서 프로그램 작성 가능. 쉘로 만든 프로그램을 쉘 스크립트라고 한다.
- 사용자와 커널 사이에서 명령을 해석해 전달하는 명령어 해석기 기능이 있다.
리눅스의 명령어는 결국 쉘이 제공하는 명령어이다. 기본 쉘이 bash 이므로, bash 쉘 명령어를 배우면 다른 쉘 명령어도 쉽게 익힐 수 있다.
ps
프로세스의 상태를 확인하는 명령어
Process Status의 약어이다.
- 옵션
옵션 | 내용 |
-a | 시스템을 사용하는 모든 사용자의 프로세스 출력 |
a(BSD 계열) | 터미널과 연관된 프로세스를 출력 |
-u | 프로세스 소유자에 대한 상세정보 출력 |
-l | 프로세스 관련 상세 정보 출력 |
-x | 사용자 로그아웃 이후에도 실행중인 프로세스 출력 |
-e | 해당 프로세스와 관련된 환경 변수 정보도 같이 출력 |
-f | 프로세스 간 관계정보 출력 |
이 옵션들은 조합해서 사용할 수 있기에, ps -aux 명령어로 모든 사용자의 전체 프로세스에 대한 상세 정보를 한 눈에 볼 수 있다.
파이프라인
명령어 1의 결과를 명령어 2로 전달할 때 사용하는 명령어
A | B 꼴로 사용된다.
(A의 처리 결과를 B로 전달)
주로 입력으로 전달된 파일의 내용에서 특정 문자열을 찾을 때 사용하는 grep 명령어와 같이 사용한다.
대표 용례
ps -aux | grep XXX : 현재 실행되고 있는 프로세스 중에서 XXX라는 이름을 가진 프로세스를 찾음
kill
프로세스에 특정한 signal을 보내는 명령어
프로세스의 PID (Process ID)를 알아야 한다.
어떤 시그널을 보내는지에 따라, kill 명령어의 뜻이 달라진다.
-l 옵션으로 보낼 수 있는 시그널을 확인할 수 있다.
기본 옵션은 안전하게 종료하는 15번 시그널이지만,( 메모리상에 있는 데이터와 각종 설정/환경 파일을 저장 후 종료)
통상적으로 종료되지 않는 프로세스를 강제로 종료하려면 9번 시그널을 사용한다 (저장 없이 강제로 종료)
대표 용례
kill -9 [PID] : PID에 해당하는 프로세스를 강제로 종료한다.
rm
파일 및 폴더 삭제 (remove)
기본적으로 리눅스는 모든 것을 파일이나 폴더 처럼 다룬다.
옵션
옵션 | 내용 |
-f | 강제로 파일이나 디렉토리를 삭제 |
-r | 재귀적으로 (recursive)삭제. 하위 디렉토리를 포함하여 삭제한다 |
-i | 삭제할때마다 사용자에게 삭제 여부를 계속 붇는다 |
-v | 삭제하는 동안 삭제되는 내용을 보여준다 |
대표 용례
rm -rf * : 존재하는 모든 파일/폴더를 삭제한다.
cp
파일, 디렉토리를 복사(copy)하는 명령어
대표 용례
cp file1 file2 : file1을 file2의 이름으로 복사한다.
cp file1 dir1/ : file1을 dir1의 위치로 복사한다
cp file1 file2 dir1/ : file1과 file2를 dir1의 위치로 복사한다
cat
파일의 내용을 출력하는 명령어
대표 용례
cat text.txt : text.txt라는 파일의 내용을 화면에 출력한다.
ln
한 파일을 다른 파일 이름으로도 사용하고자할 때 사용하는 링크 (link) 명령어
하드링크와 심볼릭링크가 있다.
대표 용례
ln A B : A라는 파일을 B라는 이름으로 하드링크 한다.
ln -s A B: A라는 파일을 B라는 이름으로 심볼릭 링크한다
하드링크 vs 심볼릭 링크
하드링크 | 심볼릭 링크 |
링크된 두 파일은 물리적으로 다른 크기를 차지한다. | 링크된 두 파일은 물리적으로 같은 크기를 차지한다 |
생성된 파일은 실제적인 내용이 존재한다 | 생성된 파일은 실제 내용이 존재하는게 아니라 링크된 파일로 전송시켜주는 역할을 한다 |
원본 파일이 삭제되도 사용가능하다 | 원본 파일이 삭제되면 사용불가능하다 |
원본 파일이 수정되면 같이 수정이된다 |