Linux 명령어는 절대로 외우는 것이 아니다.
Linux 명령어 개수만 아무리 적게 잡아도 몇백 개 될 것이고 여기에 Option까지 포함시키면 사실상 무한하다고도 볼 수 있다. 이 모든 걸 다 외운다는 건 말이 안 되는 것이다.
단지 Linux 명령어로 뭘 할 수 있는지는 알아야 명령어를 검색해 사용할 수 있기에 명령어가 어떤 기능을 하는지 정도는 알아두고 나중에 필요할 때마다 찾아서 활용하도록 하자.(그리고 자주 활용하는 것은 자연스럽게 외워질 것이다.)
Linux는 명령 중단을 위해선 Ctrl + c
, 명령 종료를 위해선 Ctrl + d
를 사용한다.
명령 중단인 Ctrl + c
는 Process 자체를 종료시키는 키이다. 커널에 사용자 입력으로 인터럽트를 주어 프로세스를 종료시킨다.
명령 종료인 Ctrl + d
인 Standard Input의 종료를 알리는 것이다.
쉽게 말하자면 Ctrl + c
는 Process가 어떤 상태인지는 관심 없고 강제 종료시키는 것이며 Ctrl + d
는 Process가 지금 처리하고 있는 일까지는 모두 수행한 뒤 종료시키라는 의미를 가진다.
예시를 들어보자.
어떤 실행 파일은 사용자에게 숫자를 입력 받고 입력받은 수인 N초 후 다음 입력을 받는다. 예를 들어 2를 입력했을 경우 2초가 지난 뒤 다음 숫자 입력값을 받는 것이다.
만약 초기에 1000을 주입했다고 가정하자. 그리고 2초 후 이 Process를 종료시킬 것이다.
Ctrl + c
는 Process를 죽이는 것이기 때문에 998초를 기다리는 과정이 남았음에도 불구하고 해당 Process를 바로 종료시킨다.
하지만 Ctrl + d
는 입력값을 더 이상 받지 않을 뿐 현재 Process가 처리하고 있는 일은 수행시켜야 한다.
따라서 998초 후 이 Process는 정상적으로 종료될 것이다.
Linux에서도 정규 표현식을 통해 여러 개의 파일을 동시에 선택할 수 있다.
Linux 정규 표현식에는 기본 정규 표현식(Basic Regular Expression), 간격 정규 표현식(Interval Regular Expressions), 확장 정규 표현식(Extended Regular Expression)이 존재한다.
하지만 (필자가 느끼기엔) 거의 기본 정규 표현식, 그것도 .과 *만 사용하는 것 같아서 기본 정규표현식만 어느 정도 알아두고 나머지는 이런게 있다 정도로만 알고 넘어가자.
Manual의 약자로써 명령어에 대한 사용 방법 및 정보를 알고 싶을 때 활용하는 명령어이다.
man 명령어를 공부하기 전 man 명령어에 대한 사전 지식을 알고 있어야 한다.
man 명령어는 9개의 Section으로 구성되어 있다.
예를 들어 passwd 같은 경우 명령어 passwd일 수도 있고 Password를 저장하고 있는 파일을 의미할 수도 있다.
1 : 명령어, 5 : Password File
이런 경우에는 Section을 입력하지 않으면 가장 낮은 번호의 Section 명령어로 간주하여 Manual을 출력해 준다.
man 명령어가 제공하는 9개의 Section은 아래와 같다.
man1 ~ man9는 '/usr/share/man'에 Directory 형태로 존재하며 디렉터리 안에는 각 Section에 해당하는 명령어 및 설명들이 .gz 형태로 저장되어 있다.
man [Option] [알고싶은 Keyword]
# Option은 필수 값 X
참고로 위 사진을 보면 (8)처럼 숫자가 기입된 것을 볼 수 있는데 이 값이 Section을 의미한다.
-f : 키워드와 정말 일치하는 명령어들을 보여줌
-w, --path : man [Keyword] 입력 시 출력되는 Manual File 경로를 보여줌
"man passwd"를 입력하면 위에서 설명한 "가장 낮은 Section Manual을 보여준다"라는 조건에 의거 passwd (1)의 Manual을 보여줄 것이다. 따라서 Path를 보면 man1의 Passwd를 보여줌을 알 수 있다.
만약 passwd (5)를 보고 싶다면 "man -s 5 passwd"를 입력하면 된다.
/[키워드]
Manual 읽는 방법이나 단어 검색은 VI Editor 사용법과 동일하기 때문에 알아두면 좋다.
passwd [Option] [Username]
# Option, Username은 필수 값이 아님
계정의 Password를 변경하는 명령어이다.
일반적인 로그인과 마찬가지로 기존 비밀번호를 알고 있어야 비밀번호 변경이 가능하다.
Username을 입력하지 않을 경우 현재 로그인하고 있는 계정의 패스워드를 수정한다.
Username을 입력한다면 해당 Username을 가진 계정이 존재할 경우 해당 계정의 비밀번호를 수정하는 단계로 넘어간다.
현재 로그인한 사용자 Username을 출력하는 명령어이다.
현재 서버에 로그인한 모든 사용자들의 정보를 볼 수 있는 명령어들이다.
"users" 명령어는 서버에 접속한 유저들의 Username만 출력하며 "who" 명령어는 서버에 접속해 있는 유저들의 Username, Terminal, 접속 시간 및 접속 서버 정보 같은 세부 정보까지 확인할 수 있다.
List의 줄임말로써 현재 위치나 특정 경로에 있는 디렉터리들을 리스트 형식으로 출력하는 것이다.
매우 많이 활용하는 기본 명령어로써 다양한 옵션들을 통해 디렉터리 및 파일들에 대한 자세한 정보도 확인할 수 있다.
ls [Option] [Directory 경로]
# Option 및 Directory 경로는 필수 값 X
# Directory 경로 입력하지 않을 경우 현재 Directory 입력으로 간주함
ls의 옵션은 다수의 옵션을 1개로 합치며 많이 활용한다.
예를 들어 숨김 파일 및 디렉터리까지 모두 긴 목록 형식으로 출력하고 싶을 경우 "-a -l" 혹은 "-al"으로 Option을 줌으로써 1번 실행 과정에 2개의 Option을 줄 수 있다.
(참고로 -al 같이 1개의 -에 Option 여러 개를 붙일 경우 순서는 상관이 없다)
몇 가지 예시를 통해 Option 사용법을 익혀보자.
-al : 모든 파일 및 디렉터리를 긴 목록 형식으로 출력
-Srlh : 파일을 Size 기준 오름차순 정렬하여 긴 목록 형식으로 사람이 보기 편하게 출력
파일이나 디렉터리를 복사할 때 사용하는 명령어이다.
# 파일 1개를 복사할 경우
cp [Option] [복사할 원본 대상] [복사 될 디렉터리 경로 or 파일 이름]
# 파일 여러개를 복사할 경우
cp [Option] [복사할 원본 대상 1] [복사할 원본 대상 2] ... [복사할 원본 대상 n] [복사 될 디렉터리]
cp를 통해 파일 1개를 복사할 때는 파일이나 디렉터리의 이름까지 지정해 줄 수 있다.
하지만 파일 여러 개를 한 번에 복사시키기 위해선 파일이 복사될 디렉터리 위치만 명시해 줄 수 있고 복사된 파일의 이름은 기존 원본 파일 이름으로 고정된다.
예를 들어 A.txt를 dir/B.txt로 복사하고 싶을 경우 "cp A.txt dir/B.txt"를 통해 복사할 수 있다.
하지만 A.txt, A1.txt, A2.txt를 dir/B.txt, dir/B2.txt, dir/B3.txt로 한 번에 복사할 수는 없고 "cp A.txt A1.txt A2.txt dir/"을 입력하면 dir/A.txt, dir/A1.txt, dir/A3.txt로 복사되는 것이다.
-i : 복사될 파일이 이름이 이미 존재할 경우 사용자에게 덮어쓰기 여부를 물음
-b : 복사될 파일 이름이 이미
A.txt~라는 백업 파일이 dir 디렉터리에 생성되었음을 볼 수 있다.
Directory를 복사하는 과정을 출력했음
파일 및 디렉터리를 원하는 위치로 이동시킬 때 사용하는 명령어로 파일이나 디렉토리 이름을 변경시킬 때도 사용한다.
어떻게 이동 명령어가 이름 변경 작업을 수행할 수 있는지 의아할 수도 있을 것이다.
mv란 부모 디렉터리와 해당 디렉터리(혹은 파일)에 대한 링크를 끊고 이동시킬 공간의 부모 디렉터리에 링크를 새로 연결하는 개념이다.
즉, 이동 전과 이동 후의 부모 디렉터리가 동일하다면 그곳에 기존 디렉터리(파일)를 잠깐 없앴다 새로운 이름을 가진 똑같은 디렉터리를 다시 붙여 넣는 것으로 이름을 바꾸는 것과 동일한 효과가 나타나는 것이다.
# 파일 1개만 옮길 경우
mv [Option] [원본 파일] [이동 될 Directory or File Name]
# 만약 원본 파일이 존재하는 Directory와 이동 시킬 목적지의 Directory가 동일할 경우 이름 변경 메서드가 됨
# 파일 여러 개를 옮길 경우
mv [Option] [원본 파일 1 경로] [원본 파일 2 경로] ... [원본 파일 n 경로] [이동 될 위치]
디렉터리 및 파일을 삭제하는 명령어이다.
Linux의 경우 한 번 지우면 복구가 어렵기 때문에 꼭 사용에 주의하자.
rm [Option] [삭제할 디렉터리/파일 1] [삭제할 디렉터리/파일 2] ... [삭제할 디렉터리/파일 n]
비어 있지 않은 디렉터리는 -r 옵션 없이는 삭제할 수 없다.
rm 명령어의 경우 가장 많이 활용하는 옵션은 "-rf"로써 모든 파일 및 디렉터리를 묻지도 따지지도 않고 무조건 삭제시켜 버리는 것이다.
편하기는 하지만 위험성도 높기 때문에 주의해서 사용하자.
Directory를 새로 생성할 때 사용하는 명령어이다.
mkdir [Option] [생성할 디렉토리 이름]
test는 -m 없이 만들었으므로 권한이 775로 설정되었지만 test2는 -m 777에 의해 777로 설정되었음을 볼 수 있다.
현재 경로를 출력한다.
지정한 경로로 이동한다.
cd [이동할 디렉토리 경로]
기본적으로 알아야 하는 명령은 이와 같다.
다음 Section에는 큰 범주로 묶기는 어려우나 알아두면 좋은 명령어들을 알아보겠다.