
수많은 리눅스 커맨드들 중 파일 및 폴더의 조정과 관련한 커맨드들: ls, cd, pwd, mkdir, rm, cp, mv, touch, cat, grep 의 쓰임에 대해 간략하게 정리해 보았습니다.
이 포스트를 글을 통해 쓰임새가 대충 파악이 되었다면 구글링을 통해 더 자세하고 훌륭하며 수많은 기능들을 찾아보면 좋을 것 같습니다.
시작하기 전에, 커맨드의 형식은 명령어, 띄어쓰기, 대괄호로 구분됩니다.
예를 들어, command [option] 이라는 형식을 보면 command 부분은 필수적으로 입력되어야 하고, 대괄호 [ ] 로 둘러쌓인 부분은 선택적으로 입력한다는 사실을 알 수 있습니다.
또한 모든 커맨드는 대소문자를 구분합니다.
# 형식
ls [option] [file or directory]
ls 커맨드는 해당 디렉토리 내의 파일 및 폴더의 내용을 알파벳 순서대로 나열합니다. 기본적으로 현재 위치해 있는 디렉토리 기준입니다.
ls 만 입력할 경우 현재 위치한 디렉토리 내의 내용을, 파일 또는 폴더명을 함께 입력하면 그에 대한 내용을 나열합니다.
| 옵션 | 설명 |
|---|---|
| -l (소문자 L) | 파일 및 디렉토리에 관한 더 자세한 설명을 출력합니다. |
| -a | 숨겨진 파일 및 디렉토리를 포함해 모두 출력합니다. |
| -t | 파일 및 디렉토리를 변경된 시간순으로 정렬해 출력합니다. |
| -r | 파일 및 디렉토리를 현재 설정과 반대로 정렬하여 출력합니다. |
| -S | 파일 및 디렉토리를 크기가 큰 순서대로 정렬하여 출력합니다. |
| -R | 하위 디렉토리를 포함하여 재귀적으로 나열해 출력합니다. |
| -i | 각 파일 및 디렉토리의 인덱스 넘버(inode)를 포함하여 출력합니다. |
| -d | 파일을 제외하고 디렉토리만 출력합니다. |
# 형식
cd [directory]
cd 커맨드는 디렉토리를 이동할때 사용합니다. 디렉토리 경로를 입력하면 현재 디렉토리에서 해당 디렉토리로 이동합니다.
cd .. 처럼 점 두 개를 입력하면 상위(이전) 디렉토리로 이동합니다.
'/' 는 root 디렉토리, '~' 는 home 디렉토리를 의미합니다.
# 형식
pwd [option]
pwd 커맨드는 현재 위치한 디렉토리의 절대위치를 출력합니다.
절대위치를 보여준다는 말은 root 디렉토리(/)부터 현재 디렉토리까지의 경로를 보여준다는 의미입니다.
| 옵션 | 설명 |
|---|---|
| -L | 심볼릭 링크가 포함된 경로라도 환경변수 내의 경로를 출력합니다. |
| -P | 심볼릭 링크가 포함된 경로라면 실제 경로를 출력합니다. |
심볼릭 링크(symbolic link)란 다른 파일이나 폴더를 가리키는 파일을 의미하며, 이는 윈도우의 바로가기 파일과 유사합니다.
# 형식
mkdir [option] folder_name
mkdir 커맨드는 새 폴더를 생성합니다.
원하는 폴더명을 입력으로 받습니다.
| 옵션 | 설명 |
|---|---|
| -v | 폴더가 생성되었다는 문장을 함께 출력합니다. |
| -p | 상위 디렉토리도 함께 생성합니다. |
# 형식
rm [option] file..
rm 커맨드는 파일, 폴더, 심볼릭 링크를 삭제합니다.
기본적으로는 폴더를 삭제할 수 없고(-r 옵션을 쓰면 됩니다) 한 번 삭제하면 복원할 수 없기 때문에 신중하게 사용해야 합니다. 정말 삭제하시겠습니까? 그런 확인 없습니다.
| 옵션 | 설명 |
|---|---|
| -i | 각 파일을 삭제하기 전에 정말 삭제할지 여부를 물어봅니다. |
| -f | 보호된(write-protected) 파일을 삭제합니다. |
| -r | 폴더를 삭제합니다(해당 디렉토리 하위 파일 및 폴더들을 재귀적으로 삭제합니다). |
# 형식
cp [option] source_file.. destination_file..
cp 커맨드는 파일, 폴더를 복사해 붙여넣습니다.
복사를 원하는 파일명을 먼저 쓰고(source_file..)
새로운 파일명(destination_file..)을 입력하여 붙여넣습니다.
또한 디렉토리 경로를 입력하여 다른 곳으로 파일을 복사할 수 있습니다. destination_file.. 부분에 경로를 집어넣으면 됩니다.
cp -r /home/folderA /home/tmp/folderB
위와 같이 사용하여 디렉토리(folderA) 자체를 다른 디렉토리(folderB)에 복사해 붙여넣는 것도 가능합니다.
| 옵션 | 설명 |
|---|---|
| -r | 해당 폴더의 하위 디렉토리까지 재귀적으로 모두 복사합니다. |
| -v | 복사 진행 상태를 함께 출력합니다. |
| -p | 복사 대상의 소유자, 그룹, 권한 등의 정보까지 함께 복사합니다. |
| -i | 복사하는 파일 및 폴더가 해당 디렉토리 내에 있을 경우 덮어쓰기 여부를 물어봅니다. |
| -f | 복사하는 파일 및 폴더가 해당 디렉토리 내에 있을 경우 강제로 덮어씁니다. |
| -b | 복사하는 파일 및 폴더가 해당 디렉토리 내에 있을 경우 백업 파일을 생성합니다. |
# 형식
mv [option] source_file.. destination_file..
mv 커맨드는 파일, 폴더의 이름을 변경하거나 이동시킵니다.
파일 또는 폴더명을 먼저 쓰고(source_file..)
변경하려는 이름(destination_file..)을 쓰거나
이동시키려는 디렉토리 경로(destination_file..)를 씁니다.
디렉토리를 이동할 때 여러 파일, 폴더를 동시에 지정할 수도 있습니다.
| 옵션 | 설명 |
|---|---|
| -i | 이름을 변경하거나 이동시키려는 파일 및 폴더가 이미 존재할 경우 덮어쓰기 여부를 물어봅니다. |
| -f | 이름을 변경하거나 이동시키려는 파일 및 폴더가 이미 존재할 경우 강제로 덮어씁니다. |
| -n | 이름을 변경하거나 이동시키려는 파일 및 폴더가 이미 존재할 경우 덮어쓰기를 방지합니다. |
| -b | 이름을 변경하거나 이동시키려는 파일 및 폴더가 이미 존재할 경우 백업 파일을 생성합니다. |
touch [option] file_name
touch 커맨드는 파일을 생성하거나 이미 존재하는 파일의 타임 스탬프를 변경하는 커맨드입니다.
touch file1 file2 file3 와 같이 사용해 여러 파일들을 한 번에 생성할 수 있고, 이미 존재하는 파일명에 touch 커맨드를 사용하여 해당 파일의 타임스탬프를 변경합니다.
리눅스의 타임스탬프에는 atime, mtime, ctime이 있습니다.
atime: access time, 최종 접근시각
mtime: modify time, 최종 수정시각
ctime: change time, 최종 변경시각
| 옵션 | 설명 |
|---|---|
| -a | atime만 변경합니다. |
| -c | 해당 파일이 존재하지 않다면 새로 생성하지 않습니다. |
| -d | 문자열을 입력해 atime, mtime을 변경합니다. (touch -d '15 Dec' filename) |
| -m | mtime만 변경합니다. |
| -r | 다른 파일의 타임스탬프를 복제해 적용합니다. (touch -r file1 file2) |
# 형식
cat [option] file
cat 커맨드는 파일(들)의 내용을 입력된 순서대로 출력하거나 연결하는 등의 다양한 기능을 가진 커맨드입니다. 파일을 간편하게 프롬프트에 출력하거나 여러 파일들을 합칠 수 있어 유용합니다.
cat file1 file2 와 같이 파일 이름들을 나열하면 줄바꿈으로 구분된 파일들의 내용이 출력됩니다.
cat > file 과 같이 사용하면 파일의 내용을 새로 작성하거나, 새 파일을 만들어 내용을 작성할 수 있습니다. 작성을 마쳤으면 Ctrl + D 로 빠져나옵니다.
cat file1 file2 > file3 와 같이 사용하면 file1과 file2의 내용을 합쳐 file3에 작성합니다. 이때 cat file1-file2 > file3 와 같이 사용하면 file1과 file2 사이에 원하는 내용을 작성해 넣을 수 있습니다. 마찬가지로 작성을 마쳤으면 Ctrl + D로 빠져나옵니다.
| 옵션 | 설명 |
|---|---|
| -n | 줄번호를 함께 출력합니다. |
| -b | 비어 있지 않은 줄에만 줄번호를 출력합니다. |
| -E | 줄의 마지막에 $ 기호를 출력합니다. |
| -T | 탭 문자를 ^I 로 바꿔서 출력합니다. |
| -s | 두 번 이상 연속된 빈 줄을 출력하지 않습니다. |
# 형식
grep [option] pattern file
grep 커맨드는 파일의 내용을 검색해 찾아내고 조작할 수 있는 커맨드입니다.
pattern 부분에 원하는 텍스트를 넣어 해당 파일 내에서 찾을 수 있습니다. 마치 윈도우에서 Ctrl + f 로 단어를 찾아보는 것과 유사합니다.
파일은 한 번에 여러 개를 지정할 수 있으며 grep pattern * 와 같이 사용해 모든 파일을 검색할 수 있습니다.
| 옵션 | 설명 |
|---|---|
| -c | 패턴에 해당하는 줄의 개수를 출력합니다. |
| -h | 해당하는 줄을 출력하지만, 파일명은 출력하지 않습니다. |
| -i | 대소문자를 구별하지 않습니다. |
| -l (소문자 L) | 해당하는 파일이름의 리스트만 출력합니다. |
| -n | 해당하는 줄을 줄번호와 함께 출력합니다. |
| -v | 해당하지 않는 줄만 출력합니다. |
| -o | 줄이 아닌, 해당되는 부분만 출력합니다. |
| -A n | 해당되는 줄과 그 뒤 n개의 줄을 함께 출력합니다. |
| -B n | 해당되는 줄과 그 전 n개의 줄을 함께 출력합니다. |
| -C n | 해당되는 줄과 그 뒤 n개의 줄을 함께 출력합니다. |