[Linux 기초] 03. 파일 및 디렉터리 명령어

Date:     Updated:

카테고리:

태그:


01. 리눅스 파일 종류



파일 타입 설명
- 일반 파일
b 블록형 특수 장치파일(주로 디스크, /dev/sda 등)
C 문자형 특수 파일(주로 입/출력에 사용, /dev/console 등)
d 디렉터리 파일
P 파이프 파일
S 소켓 파일
l(a) 심볼릭 링크파일


파일 유형 설명
일반 파일 - 원하는 형식의 데이터 저장이 가능하며 각 사용자들이 소유 권한을 가짐
- 데이터베이스, 동영상, 음악, 실행 파일 등
디렉토리 파일 - 연관 있는 파일들을 하나의 그룹으로 만들어 저장하도록 구분되어 있는 공간
- 하나의 inode를 할당 받으며 파일 이름과 inumber를 매칭하는 항목의 리스트로 구성되어 있다.
디바이스 파일 - 하드웨어를 하나의 파일로 인식하여 관리한다.
- 블록 디바이스 파일: 디스크, 테이프 등의 저장장치
- 문자 디바이스 파일: 터미널, 프린터 등의 출력장치
- 키보드 디바이스 파일에서 데이터를 읽음, 사운드 디바이스 파일에서 소리파일을 보내면 스피커로 출력 됨
링크 파일 - 파일과 디렉토리의 관리를 편리하게 하고자 하는 목적으로 사용됨
- 상위 디렉토리가 많은 경우 파일명만 이용하여 접근
- 긴 파일명의 파일을 자주 참조할 경우 다른 디렉토리에 연결
- 해킹에 이용될 수 있으므로 주기적으로 확인하여 불필요한 링크 파일은 삭제하는 것이 좋다.
심볼릭 링크 (소프트 링크) - 원본 파일의 위치 정보를 가지는 단축 아이콘
- 윈도우의 바로가기와 비슷한 개념으로 특정 파일을 가리키고 있는 파일
- 심볼릭 링크 파일을 변경해도 원본 파일에는 변화가 없음
- 다른 파일 시스템에서도 링크 가능, 원본의 링크 카운트가 증가하지 않음
- 별도의 inode를 가지며, 원본의 속성이 변경되도 영향이 없고, 원본 파일이 삭제시 접근 불가능
하드 링크 - 원본 파일과 동일한 inode에 열결되는 링크
- 하나의 파일에 여러 개의 이름을 지정해서 사용하는 개념
- 다른 파일 시스템에서 링크 불가능하며, 원본의 링크 카운트가 증가한다.
- 원본과 동일한 inode를 사용, 원본의 속성이 변경되면 같이 변경되고, 원본 파일


02. ls


지정한 디렉터리의 파일 목록 출력


■ 명령형식

$ ls [option] [디렉터리의 상대경로 또는 절대경로]
옵션 설명
-a/-A 숨김 파일을 포함하여 출력 / . , .. 을 제외하고 출력
-i 파일의 inode number 출력
-l/-n 파일의 inode를 포함한 상세 내용 출력 / UID, GID 로 출력
-k 파일 크기를 KB 단위로 출력
-m 가로 목록으로 출력
-F 파일 이름에 파일 종류를 구분하는 기호를 함께 출력
-R 하위 디렉터리의 모든 파일 출력
-1 한 줄에 한 파일씩 출력


03. pwd


사용자의 현재 작업 디렉터리 출력하는 명령, 사용자 또는 관리자는 어떤 특정 경로에서 작업을 해야 하는 경우가 있다. 이때 현재 디렉터리가 어디인지 확인하기 위해 아래 그림처럼 pwd 명령을 사용한다.


■ 명령형식

$ pwd


04. cd


디렉터리 이동


■ 명령형식

$ cd <이동할 디렉터리의 상대경로 또는 절대경로>
경로 의미
. 현재 위치한 디렉터리
.. 현재 위치의 상위 디렉터리
~ 계정의 홈 디렉터리
~[계정명] 지정한 계정의 홈 디렉터리
/ 최상위 디렉터리 (루트 디렉터리)
절대경로 - 최상위 경로를 기준으로 현재 파일이나 디렉터리의 위치를 나타내는 경로
- 사용자의 현재 위치와는 관계 없음
상대경로 - 현재 위치를 기준으로 파일이나 디렉터리의 위치를 나타내는 경로
- 사용자의 현재 위치에 따라 경로가 달라 짐


04. mkdir


빈 디렉터리 생성


■ 명령형식

$ mkdir [option] <디렉터리 이름>
옵션 설명
-m 생성할 디렉터리의 권한 설정 (default : 755)
-p 상위 디렉터리 함께 생성


05. rmdir


빈 디렉터리 삭제


■ 명령형식

$ rmdir [option] <디렉터리 이름>
옵션 설명
-p 상위 경로의 디렉터리까지 삭제


06. touch


파일이 존재 할 때는 지정된 파일의 시간 정보를 갱신 하고 파일이 존재하지 않을 때는 0byte의 빈 파일 생성한다.


■ 명령형식

$ touch [option] <파일 이름>
옵션 설명
-a 파일의 최근 사용 시간만 변경
-c 파일이 존재하지 않을 때 파일을 생성하지 않음
-m 파일의 최근 변경 시간만 변경
-t 파일의 날짜를 임의의 날짜로 지정하여 변경


07. cat


지정된 파일 내용을 표준 출력으로 확인


■ 명령형식

$ cat [option] <파일 이름>
옵션 설명
-n 라인 번호를 포함하여 출력
-b 라인 번호를 포함하여 출력하지만 공백라인은 제외하고 출력


08. 파일 내용 확인 명령 - more, head, tail, less



08-1. more

텍스트 파일 내용을 한 번에 한 화면씩 보기 위해 사용되는 명령이다. 파일 내용 이 긴 경우 제어키가 사용되는데 이때 사용되는 제어키는 man 명령의 그것과 같다. 텍스트 파 일의 전체적인 내용을 보기 위해서는 cat 또는 more 명령이 사용되는데 cat 은 내용을 보여주는 중간에 끊김 없이 보여주기 때문에 특정 부분을 찾아 내용을 확인하기 위해서는 more 명령 사용한다.


■ 명령형식

$ more [옵션] [filename]
옵션 설명
-num -5,-10 이런 식으로 숫자를 입력하여 다섯 줄 또는 열 줄 단위로 내용을 출력되게 할 때 사용하는 옵션
+num +5,+10 이런 식으로 숫자를 입력하여 다섯 줄 또는 열 줄 이후부터 내용을 출력하게 할 떄 사용하는 옵션


■ man 명령 제어키

설명
Space Key 한 페이지씩 이동
b 한 페이지씩 뒤로 이동
Enter Key 한줄씩 이동
/keyword 키워드 검색
? 뒤로 키워드 검색
W 특수키 일반문자화
n, N 반복 검색, 역방향으로 반복검색
q man 명령 종료


08-2. haed

텍스트 파일의 앞부분을 보기 위해 사용하는 명령이다. 이 명령은 파일의 내용 중 첫 일부분만을 확인하려 할 때 유용하게 사용된다. 아무런 옵션 없이 이 명령을 사용한다면 파일 의 처음 10줄을 출력한다.


■ 명령형식

$ head [옵션] [filename]
옵션 설명
-num -5,-10 이런 식으로 숫자를 입력하여 다섯 줄 또는 열 줄 단위로 내용을 출력되게 할 때 사용하는 옵션
-c num 파일의 처음 몇 Bytes를 출력하기 위해 사용하는 옵션


08-3. tail

텍스트 파일의 뒷부분을 보기 위해 사용하는 명령이다. 이 명령은 파일의 내용 중 마 지막 일부분만을 확인하려 할 때 유용하게 사용된다. 아무런 옵션 없이 이 명령을 사용한다면 파 일의 마지막 10줄을 출력한다.


■ 명령형식

$ tail [옵션] [filename]
옵션 설명
-num -5,-10 이런 식으로 숫자를 입력하여 다섯 줄 또는 열 줄 단위로 내용을 출력되게 할 때 사용하는 옵션
-c num 파일의 처음 몇 Bytes를 출력하기 위해 사용하는 옵션
-n +num 특정 줄 아래의 내용을 출력되게 할 때 사용하는 옵션
-f 파일 실시간 모니털링 하기 위해 사용하는 옵션


08-4. less

텍스트 파일의 내용을 보기 위해 사용하는 more 명령과 유사하다. less 명령은 지나간 내용 보기가 가능한데 more 명령 또한 제어키를 사용하여 지나간 내용 보기가 가능하다. more 보다 조금 더 기능이 많다. less에서는 화살표 방향키를 사용하여 줄 이동이 가능하다. 검색을 하면 검색된 키워드가 하이라이트 된다. 파일 내용을 볼 때 전체 파일을 읽는 것이 아니어 서 속도가 좀 더 빠르다.


■ 명령형식

$ less [옵션] [filename]


■ man 명령 제어키

설명
Space Key 한 페이지씩 이동
b 한 페이지씩 뒤로 이동
Enter Key 한줄씩 이동
/keyword 키워드 검색
? 뒤로 키워드 검색
W 특수키 일반문자화
n, N 반복 검색, 역방향으로 반복검색
q man 명령 종료


09. cut


텍스트로 된 데이터베이스 파일의 특정 필드 값을 추출하기 위해 또는 명령의 결과값이 특정 필드 값을 추출하기 위해 사용되는 명령


■ 명령형식

$ cut [옵션] [filename]
옵션 설명
-b LIST bytes를 선택하여 출력한다.
-c LIST 문자(Characters)를 선택하여 출력한다.
-f FIELD 필드를 선택하여 출력한다.
-d DELIMITER 필드의 구분자를 탭(Tab) 대신에 옵션을 뒤따르는 문자를 사용한다.
-S 구분자를 포함하지 않는 줄은 출력하지 않는다.
–output-delimiter=STRING 출력에 대해 구분자 대신에 STRING 을 사용한다. STRING는 문자, 빈칸 등이 될 수 있다.


■ 예제

$ head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

$ head -5 /etc/passwd | cut -b 1-4
root
bin:
daem
adm:
lp:x

$ head -5 /etc/passwd | cut -c 1-5
root:
bin:x
daemo
adm:x
lp:x:

$ head -5 /etc/passwd | cut -c -5
root:
bin:x
daemo
adm:x
lp:x:

$ head -5 /etc/passwd | cut -c 5-
:x:0:0:root:/root:/bin/bash
x:1:1:bin:/bin:/sbin/nologin
on:x:2:2:daemon:/sbin:/sbin/nologin
x:3:4:adm:/var/adm:/sbin/nologin
:4:7:lp:/var/spool/lpd:/sbin/nologin

$ head -5 /etc/passwd | cut -c 5
:
x
o
x
:

$ head -5 /etc/passwd | cut -d : -f 1,3,5
root:0:root
bin:1:bin
daemon:2:daemon
adm:3:adm
lp:4:lp

$ head -5 /etc/passwd | cut -d : -f 1,3,5 --output-delimiter=' '
root 0 root
bin 1 bin
daemon 2 daemon
adm 3 adm
lp 4 lp

$ head -5 /etc/passwd | cut -d : -f 3- --output-delimiter=' '
0 0 root /root /bin/bash
1 1 bin /bin /sbin/nologin
2 2 daemon /sbin /sbin/nologin
3 4 adm /var/adm /sbin/nologin
4 7 lp /var/spool/lpd /sbin/nologin


10. grep


명령의 결과값 또는 텍스트 파일의 내용에 특정 문자열을 검색 필터링하기 위해 사용된다. 시스템 또는 응용프로그램 로그 파 일을 필터링하여 특정 내용을 확인하거나 동작하고 있는 특정 프로세 스에 대한 정보를 보기 위해 다른 명령과 같이 많이 사용한다.


■ 명령형식

$ grep [옵션] 패턴 [filename]
옵션 내용
-C 패턴에 일치하는 전체 줄 수를 출력한다.
-E egrep과 동일하게 동작한다.
-F fgrep과 동일하게 동작한다.
-f 파일로부터 패턴을 가지고 검색한다.
-i 패턴에 대해 대/소문자 구분없이 모두 검색한다.
-l 패턴을 포함하고 있는 파일 이름을 검색 줄 앞에 표기한다.
-n 패턴을 포함하고 있는 줄번호를 같이 출력한다.
-v 패턴을 포함하고 있는 줄을 제외한 나머지 줄을 출력한다.
-w 패턴이 아닌 단어(Word)로 정확하게 일치하는 것을 검색한다.
-A NUM 패턴 이후 뒤따르는 NUM 줄을 출력한다.
-B NUM 패턴 이전 앞서는 NUM 줄을 출력한다.
-C NUM -A와 -B 옵션의 혼합형이다.
기호 설명
^ 줄(Line)의 처음을 나타낸다.
$ 줄의 마지막을 나타낸다.
* 0개 이상의 문자와 대치된다.
. 한 개의 문자와 대치된다.
[ ] 괄호([]) 사이에 있는 문자 집합 중 하나의 문자씩 대응
[^ ] 괄호([^…]) 사이에 있는 문자와 속하지 않은 문자와 대응
\ 뒤따르는 특수문자를 일반 문자화 한다.
\< 단어의 시작을 나타낸다.
\> 단어의 끝을 나타낸다.
정규식표현식 내용
’^# For’ 줄(Line)의 처음 # For로 시작하는 줄을 출력한다.
‘and$’ 줄의 마지막 and로 끝나는 줄을 출력한다.
‘mem*’ 앞 문자 m이 0개 이상인 문자열이 있는 줄을 출력한다. me, mem, memm 등 가능
‘.re 한 개의 문자와 대치된다. ore, hre, are 등 가능
‘[Tt]he’ The, the 로 검색되는 줄을 출력한다.
’[^a-d]oot’ aoot, boot, coot, doot를 제외한 oot로 검색되는 줄을 출력한다.
’\<Con’ Con으로 시작하는 단어가 있는 줄을 출력한다.
‘ing\>’ ing로 끝나는 단어가 있는 줄을 출력한다.


■ 예제

$ grep '# For' /etc/sysctl.conf
# For more information, see sysctl.conf(5) and sysctl.d(5).


$ grep 'in$' /etc/sysctl.conf
# sysctl settings are defined through files in
# To override a whole file, create a new file with the same in


$ grep '.re' /etc/sysctl.conf
# sysctl settings are defined through files in
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# name in /etc/sysctl.d/ and put new settings there.
# For more information, see sysctl.conf(5) and sysctl.d(5).


$ grep '[Tt]he' /etc/sysctl.conf
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# name in /etc/sysctl.d/ and put new settings there.


$ grep '[^a-d]oot' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
setroubleshoot:x:993:989:SELinux troubleshoot server:/var/lib/setroubleshoot:/sbin/nologin


$ grep '\<Ve' /etc/sysctl.conf
# Vendors settings live in /usr/lib/sysctl.d/.


$ grep 'ings\>' /etc/sysctl.conf
# sysctl settings are defined through files in
# Vendors settings live in /usr/lib/sysctl.d/.
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.


11. cp


파일 복사


■ 명령형식

$ cp [옵션] <원본파일> <대상파일>
옵션 내용
-f 강제로 복사
-i 확인하고 복사
-p 소유주, 소속 그룹, 퍼미션 등을 동일하게 복사
-U 대상이 원본과 변경 날짜가 같거나 더욱 최신 파일이면 복사하지 않음
-R 하위 디렉터리까지 복사


12. mv


파일의 이름 변경 또는 파일 또는 디렉터리의 경로 이동시키기 위한 명령


■ 명령형식

$ mv [옵션] <원본파일> <대상파일>
옵션 내용
-f 이동할 위치에 이동할 파일 이름이 겹치면 확인 하지 않고 강제로 이동 함
-i 이동할 위치에 이동할 파일 이름이 겹치면 확인 함


13. rm


파일, 디렉터리 삭제


■ 명령형식

$  rm [option] <파일 이름>
옵션 내용
-f 강제로 삭제
-i 확인하고 삭제
-r 하위 디렉터리까지 모두 삭제


14. file


파일의 종류를 자동으로 판단하여 출력


■ 명령형식

$  file [option] <파일 이름>
옵션 내용
-f 리스트 파일을 이용하여 파일의 종류 확인
-m 매직 파일을 선택해서 파일의 종류 확인


■ 예제

$ file /etc/passwd  /bin/ls
/etc/passwd: ASCII text
/bin/ls:     ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=e7b6c8ea564ae615082de02296a2b1e13aee830e, for GNU/Linux 3.2.0, stripped


15. wc


파일이나 표준 입력에서 단어(word), 줄(line), 문자(character) 수를 출력


옵션 내용
-l 행 수만 출력
-c 문자 수만 출력
-s 단어 수만 출력
-L 가장 긴 라인의 길이
$ cat test.txt
Hello, this is a test file.
It has multiple lines of text.
The purpose of this file is to demonstrate the usage of wc command.


$ wc test.txt
 3 13 76 test.txt


$ ls -l | wc -l
      10


$ ls -l | awk '{s+=$5} END {print s}'
    8258


16. sort


파일의 내용을 정렬


■ 명령형식

$ sort [options] [file]
옵션 내용
-b 선행하는 공백문자를 무시
-d 공백과 알파벳 숫자만으로 정렬
-f 대/소문자 무시
-r 내림차순으로 정렬
-o 정렬한 결과를 파일명으로 저장
-c 정렬 검사
-n 숫자를 문자가 아닌 숫자값으로 취급해서 정렬
-u 중복되는 줄은 한줄만 출력


■ 예제

$ cat test.txt
b
d
c
a


$ sort test.txt
a
b
c
d

# uniq 명령으로 중복된 라인을 제거한 후에 sort 명령으로 정렬하여 결과를 출력할 수 있다.
$ uniq -c file.txt | sort -n
      1 aaa
      2 bbb
      3 ccc


17. split


하나의 파일을 여러 개의 작은 파일로 분리


■ 명령형식

$ split [options] [input [prefix]]
옵션 내용
-b 파일을 주어진 바이트 크기로 분리
-C 파일의 행을 주어진 사이즈에 최대한 맞춰서 분리
-l 파일을 주어진 행 수 단위로 분리


■ 예제

$ cat test.txt
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

$ split -l 3 test.txt

# 파일 이름은 기본적으로 xaa, xab, xac 등으로 지정됨
$ ls
test.txt  xaa  xab  xac  xad

#  split_ 접두어를 사용하여 파일 이름을 지정히면 split_aa, split_ab, split_ac 등으로 파일이 생성됨
$ split -l 3 test.txt split_


18. uniq


파일에서 중복된 라인을 제거하는 명령, 단 전체적으로 분산된 중복은 찾아내지 못한다 따라서 정렬하여 순차적으로 만든 뒤에 적용해야 한다.


■ 명령형식

$ uniq [options] [input [output]]
옵션 내용
-c 각 라인이 몇 번 반복되었는지 표시합니다.
-d 중복된 라인만 출력합니다.
-D 중복되어 나오는 모든 행을 출력합니다.
-u 중복되지 않은 라인만 출력합니다.
-i 대소문자를 구분하지 않습니다.


■ 예제

$ cat <<EOF > test.txt
aaa
bbb
ccc
aaa
ddd
bbb
EOF


$ cat test.txt | sort | uniq
aaa
bbb
ccc
ddd


$ cat test.txt | sort | uniq -c
      2 aaa
      2 bbb
      1 ccc
      1 ddd


19. diff


두 파일이나 디렉토리를 비교하는데 사용되는 명령어


■ 명령형식

$ diff [옵션] 파일1 파일2


■ 예제

$ cat <<EOF > file1
Ubuntu
Arch Linux
Debian
CentOS
Fedora
EOF

$ cat <<EOF > file2
Kubuntu
Ubuntu
Debian
Arch Linux
Centos
Fedora
EOF


# change-command
# 첫 번째 파일의 줄 번호 또는 줄 범위
# 특수 변경 문자
    # a - 줄을 추가합니다.
    # c - 라인을 변경합니다.
    # d - 줄을 삭제합니다.
# 두 번째 파일의 줄 번호 또는 줄 범위
# 첫 번째 파일에서만 등장하는 라인은 <로 표시되고, 두 번째 파일에서만 등장하는 라인은 >로 표시

$ diff file1 file2
# 0a1 - 파일1의 시작 부분에 (0줄 뒤에) 두 번째 파일의 1줄을 추가합니다.
# Kubuntu - 위에서 설명한 대로 첫 번째 파일에 추가된 두 번째 줄의 행입니다.
0a1
> Kubuntu
2d2
< Arch Linux
# 첫 번째 파일의 5줄을 두 번째 파일의 4-5줄로 교체 (변경)합니다.
4c4,5
< CentOS
---
> Arch Linux
> Centos


20. xargs


명령(1)의 결과를 명령(2)의 인자로 사용하는 명령, 주로 파이프( )와 함께 사용되며, 명령어의 출력 결과를 다른 명령어로 전달해야 할 때 사용됨


■ 명령형식

$ command1 | xargs command2


■ 예제

# ls *.txt 명령어는 현재 디렉토리에 있는 모든 .txt 파일의 리스트를 출력하고, xargs rm 명령어는 ls 명령어의 출력 결과를 rm 명령어에 전달하여 모든 .txt 파일을 삭제
$ ls *.txt | xargs rm

# find 명령어로 현재 디렉토리부터 하위 디렉토리까지 모든 .txt 파일의 리스트를 출력하고, -print0 옵션을 사용하여 널 문자로 인수를 구분하도록 설정
# xargs -0 rm 명령어는 find 명령어의 출력 결과를 rm 명령어에 전달하여 모든 .txt 파일을 삭제
$ find . -type f -name "*.txt" -print0 | xargs -0 rm



21. ln


링크 파일 생성


■ 명령형식

# 심볼릭 링크
ln -s [옵션] <원본 파일> <링크 파일>

# 하드 링크
ln [옵션] <원본 파일> <링크 파일>


■ 예제

$ ls
original.txt


$ ln original.txt hardlink.txt
$ ln -s original.txt symlink.txt


$ ls -li
total 8
16777986 -rw-r--r--. 2 root root 12 Apr 14 16:51 hardlink.txt
16777986 -rw-r--r--. 2 root root 12 Apr 14 16:51 original.txt
16777995 lrwxrwxrwx. 1 root root 12 Apr 14 16:51 symlink.txt -> original.txt

LINUX 카테고리 내 다른 글 보러가기

댓글 남기기