[Linux] 리눅스 기본 명령어 정리-1

728x90

디렉토리 명령어

cd 명령어 (디렉토리 이동)

  • 절대경로의 기준은 "/" <--- 루트라고 읽음
[root@localhost ~]# cd /etc/rc.d/init.d
[root@localhost init.d]# pwd     <--- pwd 는 현재 위치한 경로를 절대로 보여주는 명령어
/etc/rc.d/init.d    <--------- pwd 의 결과값
  • 상대경로의 기준은 "현재 자신이 위치한 디렉토리"
  • . 은 현재디렉토리 .. 은 상위디렉토리 모든 디렉토리는 자신과 상위 디렉토리를 가리킨다.
[root@localhost init.d]# pwd /etc/rc.d/init.d
[root@localhost init.d]# cd ../../rc3.d
[root@localhost rc3.d]# pwd /etc/rc3.d
  • 특수문자 cd - (방금전 디렉토리로 이동)
[root@localhost rc3.d]# pwd /etc/rc3.d
[root@localhost rc3.d]# cd - /etc/rc.d/init.d

[root@localhost init.d]# cd - /etc/rc3.d
[root@localhost rc3.d]#cd ~사용자명 ( ~뒤에 공백이 없다. )
[root@localhost ~]# cd ~user
[root@localhost user]# pwd /home/user
  • cd ~ (현재 로그인한 사용자의 홈디렉토리 또는 지정된 사용자 홈디렉토리로 이동)
[root@localhost rc3.d]# cd     <------- 현재 로그인 한 사용자의 홈 디렉토리로 이동한다.
주의할 점은 cd 만 처야 하고 이 명령은 오직 현재 로그인한 사용자의 홈디렉토리로 이동만 가능하다.

[root@localhost ~]# pwd /root            <------ root 사용자의 홈디렉토리 root의 홈디렉토리 라고 읽음

ls 명령 (현재 디렉토리에 있는 내용을 출력)

  • -l : 파일이나 디렉토리의 자세한 내용을 출력한다.
  • -a : 숨겨진 파일이나 디렉토리도 보려준다.
  • -i : inode 정보 확인 inode 는 파일과 디렉토리의 주민등록번호 같은 것이다. ls -i  로 파일 이름이나 디렉토리 이름을 읽어들이면 파일 이름이 똑같아도 inode 를 통해 구분이 가능해진다.
  • -F : 속성 확인
  • -R : 해당 디렉토리의 하위 디렉토리까지 출력한다.
  • -d : 지정 경로에 있는 최상위 디렉토리만 출력한다.
  • -t (lt, lut, lct) : 차례대로 수정시간, 접근시간, 변경시간이다. t 를 빼고 l,lu, lc 로 입력해도 동일한 결과가 나온다.
  • -S : 파일 크기 순으로 정렬하여 출력한다.
  • -r : 거꾸로 출력한다.(기본 정렬 순서는 알파벳 순이다.)
  • -h : K, M, G 단위를 사용하여 파일 크기를 사람이 보기 좋게 표시한다.
[root@localhost ~]# ls 
anaconda-ks.cfg initial-setup-ks.cfg 다운로드 문서 바탕화면 비디오 사진 서식 음악

[root@localhost ~]# ls -a . 
.bash_history .bashrc .cshrc .local .tcshrc 바탕화면 서식 .. .bash_logout .cache .dbus .mozilla anaconda-ks.cfg 다운로드 비디오 음악 .ICEauthority .bash_profile .config .esd_auth .pki initial-setup-ks.cfg 문서 사진

[root@localhost ~]# ls -l
합계 8
-rw-------. 1 root root 1220 2월 14 07:02 anaconda-ks.cfg
-rw-r--r--. 1 root root 1447 2월 14 07:12 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 2월 14 07:16 다운로드
drwxr-xr-x. 2 root root 6 2월 14 07:16 문서
drwxr-xr-x. 2 root root 6 2월 14 07:16 바탕화면
drwxr-xr-x. 2 root root 6 2월 14 07:16 비디오
drwxr-xr-x. 2 root root 6 2월 14 07:16 사진
drwxr-xr-x. 2 root root 6 2월 14 07:16 서식
drwxr-xr-x. 2 root root 6 2월 14 07:16 음악
-rw-------. 1 root root 1220  2월 14 07:02 anaconda-ks.cfg
==========================================================
- 속성  - 파일, d 디렉토리 l 심볼릭링크 c 케릭터 파일 b 블록파일
 rw-------   소유자 , 그룹, other 가 가지는 이 파일 (또는 디렉토리)에서의 권한  rw- ,---, ---
          .  파일(또는 디렉토리)에 ACL(access control list) 가 성언되어있는지 유무 표현 .은 선언되지 않음을 나타냄
	    1 링크 카운트  ( 파일의 default 링크카운트는 1  디렉토리의 default 링크카운트는 2)
	      root root  소유자  그룹 을 나타냄  이름이 같지만 다른 정보
	                1220   크기를 나타냄 현재는 byte 단위로 표기
			      2월 14 07:02  시간을 나타냄  ls -l 명령어 뒤에 기본적으로 t 생략됨  수정시간을 나타냄
						ls -lt  Modify time
						ls -lut Access time
						ls -lct Change time
						보통   이걸 줄여서 mac TIME 이라함
					    anaconda-ks.cfg   파일 또는 디렉토리 이름
[root@localhost ~]# ls -i 
67157636 anaconda-ks.cfg       103208654 문서        67934746 비디오        34268744 서식

[root@localhost ~]# ls -F 
anaconda-ks.cfg initial-setup-ks.cfg 다운로드/ 문서/ 바탕화면/ 비디오/ 사진/ 서식/ 음악/

[root@localhost ~]# ls -l /root
합계 8
-rw-------. 1 root root 1220 2월 14 07:02 anaconda-ks.cfg
-rw-r--r--. 1 root root 1447 2월 14 07:12 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 2월 14 07:16 다운로드
drwxr-xr-x. 2 root root 6 2월 14 07:16 문서
drwxr-xr-x. 2 root root 6 2월 14 07:16 바탕화면
drwxr-xr-x. 2 root root 6 2월 14 07:16 비디오
drwxr-xr-x. 2 root root 6 2월 14 07:16 사진
drwxr-xr-x. 2 root root 6 2월 14 07:16 서식
drwxr-xr-x. 2 root root 6 2월 14 07:16 음악

[root@localhost ~]# ls -ld /root
dr-xr-x---. 16 root root 4096 2월 14 09:58 /root

[root@localhost ~]# ls -lR /root
/root:
합계 8
-rw-------. 1 root root 1220 2월 14 07:02 anaconda-ks.cfg
-rw-r--r--. 1 root root 1447 2월 14 07:12 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 2월 14 07:16 다운로드
drwxr-xr-x. 2 root root 6 2월 14 07:16 문서
drwxr-xr-x. 2 root root 6 2월 14 07:16 바탕화면
drwxr-xr-x. 2 root root 6 2월 14 07:16 비디오
drwxr-xr-x. 2 root root 6 2월 14 07:16 사진
drwxr-xr-x. 2 root root 6 2월 14 07:16 서식
drwxr-xr-x. 2 root root 6 2월 14 07:16 음악
/root/다운로드: 합계 0
/root/문서: 합계 0
/root/바탕화면: 합계 0
/root/비디오: 합계 0
/root/사진: 합계 0
/root/서식: 합계 0
/root/음악: 합계 0

파일을 보기 위한 명령어

cat more less head tail grep ( grep fgrep egrep )

cat (text, ASCII 등의 파일만 확인할 수 있다, 디렉토리 text, ASCII 코드 외의 데이터 포맷 등은 확인할 수 없다.)

리눅스에서 텍스트 파일의 내용을 화면에 출력하는 방법이며 cat 파일명 으로 파일의 모든 내용을 표준 출력(모니터)에 출력할 수 있다.

  • -n : 모든 라인 앞에 라인 번호 출력 (빈 라인도 번호 출력)
  • -b : 비어 있지 않은 라인에만 번호 출력
  • -E : 라인의 마지막에 $ 기호 출력 (빈 라인도 $ 기호 출력)
  • -T : 탭 문자를 ^I 로 바꿔서 출력
  • -s : 두 번 이상 연속된 빈 라인 출력 안 함
  • -v : 탭과 줄바꿈을 제외한 nonprinting 문자를 ^, M- 를 사용하여 표시
  • -e : -vE 와 결과가 같다. 줄바꿈을 포함한 nonprinting 문자 표시
  • -t : -vT 와 결과가 같다. 탭을 포함한 nonprinting 문자 표시
  • -A : -vET 와 결과가 같다. 탭, 줄바꿈을 포함한 nonprinting 문자 표시
[root@localhost ~]# file /etc/passwd
/etc/passwd: ASCII text  <-------- text 파일인 것을 확인 실제로 아래에서 cat 을 이용해 파일을 읽을 수 있다.

[root@localhost ~]# cat /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
sync:x:5:0:sync:/sbin:/bin/sync
.................


[root@localhost ~]# file /etc
/etc: directory  <----------- directory 인 것을 확인 cat 을 사용해서 확인할 수 없다.

[root@localhost ~]# cat /etc
cat: /etc: 디렉터리입니다

[root@localhost ~]# file /var/run/utmp <----------- 아래와 같은 data format 이 찍힌다. cat 으로는 확인할 수 없다.
/var/run/utmp: firmware 0 v0 (revision 0) V2, 0 bytes or less, UNKNOWN2 0x38365f36, at 0x0 0 bytes , at 0x0 0 bytes 

[root@localhost ~]# cat /var/run/utmp <------------ cat 으로 확인한 결과 파일이 깨져서 출력된다.
5~~~runlevel4.18.0-240.el8.x86_64H
b�9�tty2roottty2!H
bzp�
tty3tty3user�
K
tty4tty4root;
K
b�9tty5tty5LOGIN~K
bw�
tty6tty6rootL
be�
fpts/1ts/1root192.168.209.1�n
b����

[root@localhost ~]# cat -n /etc/passwd  
1  root:x:0:0:root:/root:/bin/bash
2  bin:x:1:1:bin:/bin:/sbin/nologin
3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
4  adm:x:3:4:adm:/var/adm:/sbin/nologin
5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6  sync:x:5:0:sync:/sbin:/bin/sync
7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
...............

more(긴 파일 확인 혹은 페이지 단위 출력할 때 사용한다.)

리눅스에서 파일을 열 때 파일이 너무 길어 화면상에 다 나오지 않거나(콘솔의 라인수 제한) 다 나오더라도 스크롤을 사용해서 불편한 경우가 있다. 이때 사용하는 명령어가 more 명령어이다.

다시 말해서 more 명령어는 긴 파일을 한 페이지 씩 보여주는 명령어이다.

엔터나 스페이스를 통해 한 페이지 혹은 한 줄 씩 출력할 수 있다.

  • 스페이스바, z : 다음 페이지로 이동
  • b : 이전 페이지로 이동
  • enter : 한 줄 씩 이동
  • d : 반 페이지 씩 이동
  • f : 2페이지 씩 이동
  • = : 현재 줄 번호를 보여준다.
  • :f : 현재 파일명과 줄 번호를 보여준다.
  • /STRING : 현재 파일에서 해당 값(STRING) 을 찾아준다.
  • ! : 다른 명령어를 입력할 수 있는 상태로 전환한다.
  • v : 현재 화면에서 vi 편집창으로 전환한다.
  • q : 현재 명령을 종료
[root@localhost ~]# more /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
sync:x:5:0:sync:/sbin:/bin/sync

 

less

less 는 파일 또는 명령 출력의 내용을 한 번에 한 페이지 씩 표시한다. 파일과 디렉토리를 모두 볼 수 있지만 less 명령어는 more 에 비해서 무겁고 오류가 생길수 있다. 명령의 결과를 다른 변수에 담아서 처리하는 형태의 프로그래밍 경우 오류가 더욱 발생 할 수 있다.

  • -N : 라인 번호를 적게 표시해준다
  • -X : 기본적으로 적게 종료하면 파일 내용이 화면에서 지워진다. 파일 내용을 화면에 표시하기 위해 사용
  • +F : 파일 컨텐츠의 변경 내용을 더 적게 감시, 로그 파일을 열 때 유용
[root@localhost ~]# less /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
sync:x:5:0:sync:/sbin:/bin/sync
.............

[root@localhost ~]# less /root
합계 44
dr-xr-x---. 16 root root 4096 2월 14 09:58 ./
dr-xr-xr-x. 17 root root 224 2월 14 06:45 ../
-rw-------. 1 root root 310 2월 14 07:16 .ICEauthority
-rw-------. 1 root root 109 2월 14 09:58 .bash_history
-rw-r--r--. 1 root root 18 5월 11 2019 .bash_logout
-rw-r--r--. 1 root root 176 5월 11 2019 .bash_profile
-rw-r--r--. 1 root root 176 5월 11 2019 .bashrc
drwx------. 11 root root 245 2월 14 07:36 .cache/
drwx------. 11 root root 215 2월 14 07:17 .config/
-rw-r--r--. 1 root root 100 5월 11 2019 .cshrc
drwx------. 3 root root 25 2월 14 07:11 .dbus/
-rw-------. 1 root root 16 2월 14 07:16 .esd_auth
drwx------. 3 root root 19 2월 14 07:16 .local/
drwx------. 5 root root 66 2월 14 07:36 .mozilla/
drwxr-----. 3 root root 19 2월 14 07:16 .pki/
-rw-r--r--. 1 root root 129 5월 11 2019 .tcshrc
-rw-------. 1 root root 1220 2월 14 07:02 anaconda-ks.cfg
-rw-r--r--. 1 root root 1447 2월 14 07:12 initial-setup-ks.cfg
drwxr-xr-x. 2 root root 6 2월 14 07:16 다운로드/
drwxr-xr-x. 2 root root 6 2월 14 07:16 문서/
drwxr-xr-x. 2 root root 6 2월 14 07:16 바탕화면/
drwxr-xr-x. 2 root root 6 2월 14 07:16 비디오/
drwxr-xr-x. 2 root root 6 2월 14 07:16 사진/
drwxr-xr-x. 2 root root 6 2월 14 07:16 서식/
drwxr-xr-x. 2 root root 6 2월 14 07:16 음악/


pipeline(|) 은 앞에 선행 프로세스 결과을 후행 프로세스의 입력으로 넣어준다.

글자 지우기 버튼 아래에 있는 \ 를 쉬프트 클릭한 값이 pipeline 이다.

[root@localhost ~]# ls -al /etc | more
합계 1376
drwxr-xr-x. 139 root root 8192 2월 14 09:11 .
dr-xr-xr-x. 17 root root 224 2월 14 06:45 ..
-rw-------. 1 root root 0 2월 14 06:47 .pwd.lock
-rw-r--r--. 1 root root 208 2월 14 06:45 .updated
-rw-r--r--. 1 root root 4536 4월 26 2020 DIR_COLORS

head 명령어

파일의 길이가 매우 길어서 일부만 확인해야 하는 경우, head 를 사용한다. head 는 파일의 앞부분을 확인하는 명령어로 몇번째 줄까지 확인할 것인지 명시적으로 나타내지 않으면 10번째 줄까지 출력해준다. 즉, 라인 1부터 라인 10까지 출력해주는 것

다른 명령어들처럼 파일 외의 입력에 대해(파이프라인 활요) 출력 해줄수 있고 화면 대신 파일로 출력할 수도 있다.

  • -c : 바이트 단위로 내용을 보고자 할 때 사용
  • -n : 앞에서부터 n 까지를 보여준다. -n 옵션은 생략 가능하다.
  • ex) head -100 파일명 > 저장_파일명 : 100바이트의 내용만큼 파일의 내용을 저장할 파일에 보내고 명령어가 종료
[root@localhost ~]# head -5 /etc/passwd  <----- 라인 1부터 라인 5까지 출력
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

[root@localhost ~]# cat -n /etc/passwd | head -5 <------/etc/passwd 를 라인번호와 함께 출력 + 라인 1부터 라인 5까지 출력
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

tail 명령어

리눅스 계열 시스템의 유틸리티로 입력받은 파일의 마지막 부분을 출력한다(head 와 반대). 기본적으로 입력파일의 마지막 10줄을 출력하고, 로그 파일의 모니터링 용도로 사용할 수 있다.(-f 옵션 사용)

  • -n : tail -n [라인 수] [파일 명], 일정 갯수의 라인만 보기 위해 사용
  • -c : tail -c [바이트 수] [파일 명], 보여줄 마지막 바이트 수를 지정할 때 사용
  • -q : tail -q [파일 명] [파일 명], 입력된 파일을 각각 파일 이름과 함께 표준 출력으로 출력한다 여기서 파일 이름을 빼 출력하고 싶을 때 -q 옵션을 사용
  • -f : tail -f [파일 명], 파일 모니터링을 하기 위해 사용, 이 옵션은 파일의 마지막 10줄을 출력하는데 파일의 새 라인이 추가 될 경우 업데이트를 하고, 일반적으로 로그 파일 모니터링에 사용한다.
[root@localhost ~]# tail -5 /etc/passwd
gnome-initial-setup:x:976:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated
SSH:/var/empty/sshd:/sbin/nologin
rngd:x:975:974:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
user:x:1000:1000:user:/home/user:/bin/bash

[root@localhost ~]# cat -n /etc/passwd | tail -5 43
gnome-initial-setup:x:976:975::/run/gnome-initial-setup/:/sbin/nologin
44 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
45 rngd:x:975:974:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
46 tcpdump:x:72:72::/:/sbin/nologin
47 user:x:1000:1000:user:/home/user:/bin/bash

[root@localhost ~]# tail -n +41 /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
clevis:x:977:976:Clevis Decryption Framework unprivileged
user:/var/cache/clevis:/sbin/nologin
gnome-initial-setup:x:976:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rngd:x:975:974:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
user:x:1000:1000:user:/home/user:/bin/bash


[root@localhost ~]# cat -n /etc/passwd | tail -n +41
41 gdm:x:42:42::/var/lib/gdm:/sbin/nologin
42 clevis:x:977:976:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
43 gnome-initial-setup:x:976:975::/run/gnome-initial-setup/:/sbin/nologin
44 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
45 rngd:x:975:974:Random Number Generator Daemon:/var/lib/rngd:/sbin/nologin
46 tcpdump:x:72:72::/:/sbin/nologin
47 user:x:1000:1000:user:/home/user:/bin/bash



ex) /etc/passwd 가  47 라인으로 구성 되어있고,  이중 10 번째 라인부터 20번째 라인 까지만 출력해야 할 때

아래 3개로 출력할 수 있다.
cat -n /etc/passwd | tail -n +10 | head -11
cat -n /etc/passwd | head -n +20 | tail -n +10
tail -n +10 /etc/passwd | head -11

테스트 시 다른 터미널에서 systemctl restart firewalld 같은 시스템 명령을 하면 log 파일이 생성되고 생성되는 과정을 지속적으로 모니터링 할 수 있다.

[root@localhost ~]# tail -f -n 5 /var/log/messages
Feb 14 12:38:43 localhost systemd[1]: firewalld.service: Succeeded.
Feb 14 12:38:43 localhost systemd[1]: Stopped firewalld - dynamic firewall daemon.
Feb 14 12:38:43 localhost systemd[1]: Starting firewalld - dynamic firewall daemon...
Feb 14 12:38:44 localhost systemd[1]: Started firewalld - dynamic firewall daemon.
Feb 14 12:38:44 localhost firewalld[9200]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.

grep 명령어

입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자 할 때 사용한다. 리눅스에서 가장 만히 사용되는 명령어이다.

정규 표현식을 사용한다.

    grep [OPTION] [PATTERN] [FILE...]

        -E        : PATTERN을 확장 정규 표현식(Extended RegEx)으로 해석.

        -F        : PATTERN을 정규 표현식(RegEx)이 아닌 일반 문자열로 해석.

        -G        : PATTERN을 기본 정규 표현식(Basic RegEx)으로 해석.

        -P        : PATTERN을 Perl 정규 표현식(Perl RegEx)으로 해석.

        -e        : 매칭을 위한 PATTERN 전달.

        -f        : 파일에 기록된 내용을 PATTERN으로 사용.

        -i        : 대/소문자 무시.

        -v        : 매칭되는 PATTERN이 존재하지 않는 라인 선택.

        -w        : 단어(word) 단위로 매칭.

        -x        : 라인(line) 단위로 매칭.

        -z        : 라인을 newline(\n)이 아닌 NULL(\0)로 구분.

        -m        : 최대 검색 결과 갯수 제한.

        -b        : 패턴이 매치된 각 라인(-o 사용 시 문자열)의 바이트 옵셋 출력.

        -n        : 검색 결과 출력 라인 앞에 라인 번호 출력.

        -H        : 검색 결과 출력 라인 앞에 파일 이름 표시.

        -h        : 검색 결과 출력 시, 파일 이름 무시.

        -o        : 매치되는 문자열만 표시.

        -q        : 검색 결과 출력하지 않음.

        -a        : 바이너리 파일을 텍스트 파일처럼 처리.

        -I        : 바이너리 파일은 검사하지 않음.

        -d        : 디렉토리 처리 방식 지정. (read, recurse, skip)

        -D        : 장치 파일 처리 방식 지정. (read, skip)

        -r        : 하위 디렉토리 탐색.

        -R        : 심볼릭 링크를 따라가며 모든 하위 디렉토리 탐색.

        -L        : PATTERN이 존재하지 않는 파일 이름만 표시.

        -l        : 패턴이 존재하는 파일 이름만 표시.

        -c        : 파일 패턴이 일치하는 라인의 갯수 출력.

 

[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@localhost ~]# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash

[root@localhost ~]# grep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
user:x:1000:1000:user:/home/user:/bin/bash

[root@localhost ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@localhost ~]# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash

[root@localhost ~]# grep bash$ /etc/passwd
root:x:0:0:root:/root:/bin/bash
user:x:1000:1000:user:/home/user:/bin/bash\

etc 이하 모든 디렉토리에서 umask 가 들어있는 파일을 찾는데 디렉토리가 나오면 오류가 발생하므로 해당하는 오류를 /dev/null 로 넘겨서 처리한다.

[root@localhost ~]# grep -l umask /etc/* 2> /dev/null
/etc/bashrc
/etc/csh.cshrc
/etc/login.defs
/etc/profile

[root@localhost ~]# grep -i ROOT /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@localhost ~]# grep -c root /etc/passwd
2

[root@localhost ~]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

[root@localhost ~]# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

[root@localhost ~]# grep -n root /etc/passwd | grep -v bash
10:operator:x:11:0:operator:/root:/sbin/nologin

파일과 디렉토리 관련 명령어

파일 생성

touch 는 파일의 날짜와 시간을 수정하는 명령어이긴 하지만, 0바이트 파일을 생성하기 위해 자주 사용되는 명령어이다. 아무런 옵션 없이 사용하면 서버의 현재 시간으로 파일의 최근 사용한 시간(access time) 과 최근 변경 시간(modification time) 을 변경한다. 만약 특정 옵션이 사용되지 않았다면 파일의 크기가 0인 빈 파일을 생성하고, -t 라는 옵션을 사용하면 서버의 현재 시간이 아닌 지정된 시간으로 파일의 날짜 시간 정보를 변경한다.

  • -a : 현 시간으로 파일의 접근 시간, 변경 시간을 수정
  • -c : 기존 파일이 없으면 파일이 생성되지 않는다
  • -d : touch -d '2022-02-14 10:45:30' a, 지정한 시간으로 접근 시간, 수정시간이 수정되고 변경 시간은 현재 시간으로 수정된다.
  • -m : 현 시간으로 파일의 수정 시간, 변경 시간을 수정
  • -r : 지정한 파일의 접근 시간, 수정 시간으로 파일이 수정되고 변경 시간은 현재 시간으로 수정
  • -t : 지정한 시간으로 접근 시간, 수정 시간을 수정하고 변경 시간은 현재 시간으로 수정
touch [파일 명] -> 0 byte 파일 생성

[root@localhost ~]# touch aaa

[root@localhost ~]# ls -l aaa
-rw-r--r--. 1 root root 0 2월 14 12:07 aaa

[root@localhost ~]# ls -lt aaa
-rw-r--r--. 1 root root 0 2월 14 12:08 aaa

[root@localhost ~]# ls -lut aaa
-rw-r--r--. 1 root root 0 2월 14 12:08 aaa

[root@localhost ~]# ls -lct aaa
-rw-r--r--. 1 root root 0 2월 14 12:08 aaa

> , >> 를 이용한 파일 생성

  • > : 명령어 뒤에 나오는 파일에 덮어 씌울 때 사용(wirte or overwrite)
  • >> : 명령어 뒤에 나오는 파일에 추가할 때 사용(append)
  • echo abcde > test.txt 를 하면 test.txt 라는 파일이 없으면 생성하고 있으면 내용을 덮어쓴다.
  • echo abcde >> test.txt 파일이 없으면 생성하고 있으면 test.txt 파일에 내용을 추가한다.
  • 0< : 표준 입력
  • 1> : 표준 출력
  • 2> : 표준 에러, 표준 에러를 처리할 때 /dev/null 디렉토리를 사용한다.

  • test.sh > file.txt 2>  errfile.txt, 특정 스크립트 실행 결과(stdout) 과 에러를 분리해서 저장하기
  • test.sh > file.txt 2>> errfile.txt, stdout 은 overwirte, stderr 는 append 한다.
  • 프로그램의 입력(stdin), 결과(stdout), 에러(stderr) 을 파일이나 다른 스트림으로 전달할 때 사용
  • >&2, 2>&1, 1>&2 는 기호 오른쪽에 파일 명이 아닌 0, 1, 2 FD 번호를 쓰고 싶을 때 & 를 사용해서 표현한 기호들이다.
  • $ wc asdfgh 2>&1
    wc: asdfgh: No such file or directory
    • 위 뜻은, stdout 을 stderr 로 redirect 하겠다는 의미가 된다. 위 명령어를 실행하면 FD 1의 경우 현재 shell 을 가리키고 있기 때문에 에러를 터미널에 출력하라는 것과 동일한 의미
    • 다시 말해서 위 커맨드를 실행 시, asdfg 라는 파일이 없기 때문에 stderr 가 출력되고, 해당 내용을 &1(stdout) 으로 넘기는데, 현재는 터미널창으로 가리키고 있기 때문에 터미널 창에 에러 메시지가 출력된다.
    • >& as 'redirect merger operator' 이다. 즉, 2>&1 = 2>redirect stderr to a file 를 의미하고 &1 을 추가해서 stderr 를 stdout 으로 머지시키는 것
  • 만약 특정 명령어의 결과를 특정 파일에 넣고, 에러도 같은 파일에 넣고 싶으면 아래의 두가지 방법이 있다.
    • $ wc asdfghh > tmpfile 2>&1    # > tmpfile, 즉 tmpfile 이 표준 출력이 된 것. 그래서 오류를 &1 로 리다이렉트하면 tmpfile 에 출력이 저장되는 것이다.
    • $ wc asdfghh 1> tmpfile 2> tmpfile # 위와 동일
      위처럼 하면 &1 이 현재 tmpfile 로 지정됐기 때문에 err 도 tmpfile 로 넘어간다.
    • stdout 과 stderr 를 나누고 싶다면 아래처럼 하면 된다.
      {명령어, 프로그램} 1> {stdout file 명} 2> {stderr 지정할 파일 명}
    • stdout 만 출력하고 싶다면 아래처럼 한다.
      {명령어, 프로그램} 1> {stdout file 명} 또는 {명령어, 프로그램} > {stdout file 명}
      이렇게 하면 정상 출력은 {stdout file 명} 으로 들어가 stderr 은 터미널에서 출력된다.
[root@localhost ~]# echo hi
hi

[root@localhost ~]# echo hi > bbb
[root@localhost ~]# cat bbb
hi

[root@localhost ~]# echo haha > bbb
[root@localhost ~]# cat bbb
haha

[root@localhost ~]# echo hi >> ccc
[root@localhost ~]# cat ccc
hi

[root@localhost ~]# echo haha >> ccc
[root@localhost ~]# cat ccc
hi haha

[root@localhost ~]# cat < aaa >> bbb
—> aaa 파일의 내용을 bbb 에 append 한다. + aaa 의 파일 내용을 cat 에 표준 입력으로 집어넣는다.
—> 즉, aaa 의 파일 내용을 bbb 에 append 해주는 것
—> cat < aaa 는 echo aaa 와 같다. aaa 파일 내용을 출력한다.

 

728x90