Bash는 빠르고 강력한 도구이지만, 처음 접하는 사람에게는 진입 장벽이 꽤 높은 편입니다. 리눅스에서 Bash나 터미널을 막 사용하기 시작했다면, 길을 잃거나 시스템을 망가뜨리는 실수를 피하기 위해 아래의 핵심 명령어들을 반드시 먼저 익혀두는 것이 좋습니다.
함께 읽으면 좋은 글
- 초보 사용자를 위한 가장 유용한 리눅스 명령어 6가지
- 터미널에서 실행해 볼 재미있는 리눅스 명령어 17가지
- 절대 실행해서는 안 되는 위험한 리눅스 명령어 5가지
- 명령줄에서 텍스트를 다루는 13가지 유용한 도구
Bash로 파일 시스템 탐색하기
cd – 디렉터리 이동
cd(change directory)는 명령어 뒤에 이동할 디렉터리 경로를 입력해 사용합니다. 경로(path)란 목적지 파일이나 폴더까지 거쳐야 하는 모든 폴더를 순서대로 나타낸 길을 의미하며, 각 폴더는 슬래시(/)로 구분됩니다. 경로에 공백이 포함되어 있다면 전체 경로를 따옴표로 감싸거나, 공백 앞에 역슬래시(\)를 붙여 처리할 수 있습니다.
cd path/to/follow
모든 경로는 현재 작업 디렉터리(present working directory)를 기준으로 해석됩니다. 현재 위치하지 않은 곳으로 이동하려면 해당 경로의 상위 폴더로 먼저 이동하거나, 절대 경로(fully qualified path)를 사용해야 합니다. 절대 경로란 루트 드라이브(/)에서 시작해 대상 디렉터리나 파일로 끝나는, 시스템상 파일의 '완전한 주소'를 말합니다.
cd는 빠른 탐색을 위한 다양한 단축 표기를 지원합니다. 슬래시 하나(/)는 부팅 드라이브를 의미하는 '루트' 디렉터리를 가리키고, 물결표(~)는 현재 사용자의 홈 디렉터리를 나타냅니다. 마침표 하나(.)는 현재 폴더, 마침표 두 개(..)는 현재 작업 디렉터리의 상위 폴더를 의미합니다.
역슬래시(\)는 특별한 문자로, '이스케이프 문자(escape character)'라고 불립니다. 뒤따르는 문자를 특별하게 처리하라는 신호인데, 여기서는 그 공백이 서로 다른 명령어나 인수 사이의 구분이 아니라 파일 경로의 일부임을 알려주는 역할을 합니다.
ls – 디렉터리 내용 확인
디렉터리의 내용을 보려면 'list'의 줄임말인 ls를 사용합니다. 이 명령은 현재 디렉터리의 모든 파일과 폴더를 나열해 줍니다. ls의 가장 유용한 기능들은 '플래그(flag)'를 통해 사용할 수 있는데, 플래그란 명령어의 옵션을 바꾸거나 기능을 확장하기 위해 덧붙이는 짧은 추가 명령으로, 대시(-) 한두 개 뒤에 주로 한 글자가 붙는 형태입니다.
ls
ls에는 그 외에도 유용한 플래그가 많습니다. 대표적인 것들은 다음과 같습니다.
-a: 숨김 파일과 닷파일(.으로 시작하는 파일)을 표시-h: 사람이 읽기 쉬운 단위로 파일 크기를 표시-S: 파일 크기순으로 정렬, 큰 것부터 (대문자 S에 주의)-t: 수정 시간순으로 정렬, 최신 것부터
여러 플래그를 함께 쓰려면 그냥 이어 붙이면 됩니다. 예를 들어 어떤 폴더의 숨김 파일을 자세한(long) 형식과 읽기 쉬운 파일 크기와 함께 보고 싶다면 ls -lah를 실행하면 됩니다.
pwd – 현재 위치 확인
이 명령은 별도 인수가 필요 없으므로 입력 후 바로 Enter를 누르면 됩니다. pwd는 현재 작업 디렉터리(present working directory)의 절대 경로를 보여주는 명령으로, 이름도 여기서 따온 것입니다.
pwd
실행하는 모든 명령은 자동으로 현재 작업 디렉터리 안에서 수행됩니다. 예를 들어 mkdir 명령은 현재 작업 디렉터리 안에 새 디렉터리를 만듭니다. 다른 위치에 만들고 싶다면 시스템 루트를 뜻하는 /로 시작하는 절대 경로를 지정해야 합니다.
man – 명령어 설명서 보기
man command
지정한 명령어의 매뉴얼 페이지(man page)를 엽니다. 예를 들어 man chmod를 입력하면 터미널 창 안에서 'chmod' 명령의 매뉴얼 페이지가 표시됩니다. 매뉴얼에는 사용법, 플래그, 예제가 담겨 있습니다. 어떤 명령의 동작 방식이나 사용 가능한 옵션이 궁금하다면 언제나 해당 명령의 man 페이지부터 읽어보는 것이 좋습니다.
cat – 파일 내용 출력
cat file
모든 파일 형식을 읽을 수 있는 범용 뷰어입니다. 텍스트 파일에 실행하면 파일 내용이 콘솔에 그대로 출력됩니다. cat은 거의 모든 파일의 내용을 표시할 수 있지만, 출력 결과가 항상 사람이 읽을 수 있거나 의미 있는 형태인 것은 아닙니다. 그래서 Unix 전문가들이 자주 쓰지는 않지만, 파일 시스템을 탐험하는 초보자에게는 유용한 도구입니다.
파일과 디렉터리 다루기
cp – 파일 복사
'filename.doc' 파일을 'path/to/directory/newfilename.doc' 위치로 복사합니다. 복사 후 붙여넣기 동작이라고 생각하면 됩니다. 같은 이름의 파일이 이미 존재한다면 복사 작업은 완료되지 않습니다.
cp filename.doc path/to/directory/newfilename.doc
mv – 파일 이동 및 이름 변경
'foo.txt'를 '/path/to/bar.txt'로 이동합니다. 잘라내기 후 붙여넣기 동작에 해당합니다. 파일을 사실상 '새 이름으로 이동'하는 것이므로, mv는 파일 이름 변경에도 사용됩니다. 참고로 mv는 쓰기 작업이 완료된 후 원본 파일을 삭제한다는 점을 기억하세요.
mv foo.txt /path/to/bar.txt
rm – 파일 삭제
디렉터리 내용과 그 안의 모든 파일을 삭제합니다. -r 플래그는 remove 명령인 rm이 재귀적으로 동작하게 하고, -f 플래그는 모든 확인 대화상자를 비활성화합니다. 더 강력한 버전인 sudo rm -rf는 극도로 조심해서 사용해야 합니다. 이 명령은 경고나 확인 없이 부팅 드라이브까지 통째로 지워버릴 수 있으니 반드시 신중하게 다뤄야 합니다.
rm -rf contents/
touch – 빈 파일 생성
지정한 이름의 파일이 이미 존재하면 수정 시간만 현재 시각으로 변경되고, 파일이 없다면 즉시 같은 이름의 빈 파일이 생성됩니다.
touch file
mkdir – 디렉터리 생성
작업 디렉터리 안에 지정한 이름의 디렉터리를 만듭니다. 필요한 상위 디렉터리까지 한 번에 만들려면 -p 플래그를 사용하세요. 이 플래그는 다른 오류가 없는 한 명령을 완수하는 데 필요한 모든 상위 디렉터리를 생성해 주므로, 한 줄로 다단계 디렉터리 구조를 만들 수 있습니다.
mkdir directory
rmdir – 디렉터리 삭제
지정한 경로의 디렉터리를 삭제합니다.
rmdir directory
명령어 변경자(Modifier)
변경자는 기존 명령어가 더 많은 일을 하거나 평소와 다른 방식으로 동작하도록 조정해 주는 요소입니다.
sudo – 관리자 권한으로 실행
sudo command
sudo는 'super user do'의 줄임말로, 그 자체로는 아무것도 하지 않습니다. 대신 바로 뒤에 오는 명령에 superpower를 부여합니다. 명령 앞에 sudo를 붙이면 일시적으로 root 사용자의 권한으로 승격되어, 평소에는 할 수 없는 작업을 수행할 수 있게 됩니다.
하지만 슈퍼유저 권한에는 슈퍼유저의 책임이 따릅니다. 시스템을 심각하게 망가뜨릴 수 있는 힘이기도 하므로, 배우는 단계에서는 항상 주의해야 합니다. 특히 인터넷에서 찾은 명령이라면 실행 전에 명령의 모든 구성 요소를 완전히 이해했는지 반드시 확인하세요.
sudo를 사용하면 관리자 비밀번호를 입력해야 합니다. 입력할 때 커서는 움직이지 않지만 키 입력은 정상적으로 기록되고 있으니, 입력을 마친 후 Enter를 누르면 명령이 실행됩니다.
sudo !! – 직전 명령 다시 실행
sudo !!
마지막으로 실행한 명령을 이번에는 관리자 권한으로 다시 실행합니다. 이른바 'bang bang' 명령(!!)은 직전 명령을 반복하는 단축키입니다.
> – 출력 리디렉션
>
'리디렉션(redirect)'이라 불리는 이 기호는 명령의 텍스트 출력을 파일로 보냅니다. 예를 들어 ls > filelist.txt는 ls의 출력 결과를 'filelist.txt' 파일로 저장합니다. 대상 파일이 존재하지 않으면 새로 생성됩니다.
| – 파이프
|
'파이프(pipe)'라 불리는 이 기호는 리디렉션과 비슷하지만 명령어끼리 연결할 때 사용합니다. 한 명령의 출력을 다른 명령의 입력으로 전달합니다.
권한 수정하기
권한(permission)은 어떤 사용자가 특정 파일을 열람, 편집, 실행할 수 있는지를 결정합니다. 파일과 폴더에는 소유자(owner)가 있는데, 보통 파일을 만든 사용자가 소유자이며, 모드(mode)는 파일에 접근할 수 있는 사용자와 그들이 할 수 있는 작업의 범위를 제어합니다.
이번 섹션의 명령들이 처음으로 sudo와 함께 사용되는 명령들입니다. sudo는 우리를 슈퍼유저로 승격시켜 임시 관리자 권한을 부여하는데, 모든 파일이 현재 사용자의 소유는 아니기 때문에 파일 권한을 다룰 때는 거의 항상 이 권한이 필요합니다.
chmod – 권한 변경
chmod는 'change mode'의 줄임말로, 파일과 폴더의 권한을 조정합니다. chown처럼 단일 파일에 적용할 수도 있고, -R 플래그를 사용해 디렉터리 내용 전체에 재귀적으로 적용할 수도 있습니다.
sudo chmod 775 file
파일 권한은 몇 가지 방식으로 표현할 수 있지만, 위 예시에서 사용된 '숫자 모드(numeric mode)'인 775가 가장 널리 쓰이는 표기법입니다.
chown – 소유자 변경
sudo chown -R sarah foo/bar
지정한 디렉터리 안의 모든 파일 소유자를 'sarah' 사용자로 변경합니다. -R 플래그는 명령을 재귀적으로 실행하게 하지만, 플래그 없이 단일 파일에도 사용할 수 있습니다. foo/bar 대신 마침표(.)를 넣으면 현재 작업 디렉터리에서 실행됩니다.
마치며
이 명령어들을 빠르게 익히려면 굳이 필요하지 않은 상황에서도 Bash와 터미널을積극적으로 사용해 보세요. 디렉터리를 옮길 때 드래그 앤 드롭 대신 mv 명령을 써보는 식입니다. 실제로 명령어를 많이 사용할수록 실력은 그만큼 빠르게 향상됩니다.