Linux 기본 명령어 2

이동명·2023년 10월 26일
0

Cent OS

목록 보기
2/13
post-thumbnail

쉘(Shell)

  • 입력된 명령어 또는 스크립트 파일에서 읽어 들이는 명령어들을 해석하여 사용자와 커널 중계 역할을 담당한다

  • 리눅스 안에 들어있는 또 하나의 운영체제 라고 봐도 될 정도로 중요함

ps -f
->
UID          PID    PPID  C STIME TTY          TIME CMD
root        9042    9018  0 19:01 pts/0    00:00:00 bash
root        9759    9042  0 19:06 pts/0    00:00:00 ps -f


ps -f 는 bash 라는 shell 에서 처리하고 있음.

사용자 입력 -------------- 쉘 ---------------- 커널
ls -l /tmp -> 해석 -> 0101010101

이런식으로 처리가 됨. 대표적으로 가장 많이 사용하는 쉘이 bash 쉘이다.

chsh -l
->
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

사용할 수 있는 쉘은 2개 , 나머지 2개는 소프트링크용

cat /etc/passwd
->
root:x:0:0:root:/root:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash

를 보면 root나 user1,user2로 로그인 하면 bash 을 사용하겠다는거임

메타캐릭터

  • 쉘이 특별한 의미로 해석하는 특수 문자, 기호를 의미한다.

1) 파이프
| : 앞에 실행한 명령어 결과를 파이프 다음 명령어로 넘겨준다. 만약, 따옴표, 소괄호 안에 있다면, OR 개념이다.


[root@Client1 /root/test]# cat /etc/passwd | head -3
[root@Client1 /root/test]# cat /etc/services | more
[root@Client1 /root/test]# cat /etc/passwd | egrep "^root|^user1|^user2"

2) 세미콜론, 더블 앰퍼샌드, 더블 버티컬바

; 여러개의 명령어를 순차적으로 수행하도록 한다.(앞에 명령이 실패되어도, 뒤에 명령이 실행됨)
&& 여러개의 명령어를 순차적으로 수행하도록 한다.(단, 앞에 명령이 성공되면, 뒤에 명령이 실행됨)
|| 앞에 명령이 성공되면, 다음 명령이 수행 안된다. (맊약, 앞에 명령이 실패되면, 다음 명령이 실행됨)


[root@Client1 /root/test]# date ; cal
[root@Client1 /root/test]# dat ; cal
[root@Client1 /root/test]# date && cal
[root@Client1 /root/test]# dat && cal
[root@Client1 /root/test]# date || cal
[root@Client1 /root/test]# dat || cal
[root@Client1 /root/test]# cat /etc/passwd | head -1 ; cat /etc/passwd | tail -2
[root@Client1 /root/test]# ps -ef | head -1 ; ps -ef | grep sshd

3) 애스터리스크 : * 전체를 의미한다.


[root@Client1 /root/test]# find /etc -name pass*
[root@Client1 /root/test]# find /etc -name *conf
[root@Client1 /root/test]# rm -rf /root/test/*

4) 캐럿 : ^ 라인 시작을 의미한다.


[root@Client1 /root/test]# cat /etc/passwd | grep ^root

5) 달러 : 라인 끝을 의미한다


[root@Client1 /root/test]# cat /etc/passwd | grep bash$

$ 변수 지정(Ex : echo 명령어를 이용하면 환경 변수 값을 보여준다.)

[root@Client1 /root/test]# env
[root@Client1 /root/test]# env | grep PATH
[root@Client1 /root/test]# env | grep HOSTNAME
[root@Client1 /root/test]# env | grep SHELL
[root@Client1 /root/test]# echo $PATH
[root@Client1 /root/test]# echo $HOSTNAME
[root@Client1 /root/test]# echo $SHELL

6) 작은 따옴표 : ' ' 쉘이 메타캐릭터를 해석할 수 없도록 처리한다.(메타캐릭터를 일반 문자로 처리함)


[root@Client1 /root/test]# echo $PATH
[root@Client1 /root/test]# echo '$PATH'
[root@Client1 /root/test]# echo $HOSTNAME $SHELL
[root@Client1 /root/test]# echo '$HOSTNAME $SHELL'

7) 큰 따옴표 : " " 쉘이 메타캐릭터를 해석할 수 없도록 처리한다. 단, $, ``, \은 쉘이 해석한다.


[root@Client1 /root/test]# echo $PATH
[root@Client1 /root/test]# echo "$PATH"

8) 역 따옴표, $( ) : , $( ) 쉘이 해석할 때 역 따옴표 안에 있는 문자열을 명령어로 처리한다.


[root@Client1 /root/test]# echo date
[root@Client1 /root/test]# echo `date`
[root@Client1 /root/test]# echo `ls -l /tmp`
[root@Client1 /root/test]# echo date
[root@Client1 /root/test]# echo $(date)
[root@Client1 /root/test]# echo $(ls -l /tmp)

9) 역슬래쉬 : \ 역슬래쉬 다음에 나오는 메타캐릭터를 쉘이 해석할 수 없도록 처리한다.


[root@Client1 /root/test]# echo $PATH
[root@Client1 /root/test]# echo \$PATH

10) 브래킷 : [ ] 안에 있는 문자/숫자을 OR 로 처리하거나, 범위를 지정한다.


[root@Client1 /root/test]# cat /etc/passwd | grep user[12]
[root@Client1 /root/test]# cat /etc/passwd | grep user[1-2]

11) 피리어드 : . 한자리 모든 문자/숫자를 의미한다.


[root@Client1 /root/test]# cat /etc/passwd | grep ^user.

재지정(리다이렉션)

  • 표준 입력 FD 0 키보드로부터 입력을 받는다.
  • 표준 출력 FD 1 모니터로 결과 내용을 출력한다.
  • 표준 에러 FD 2 모니터로 에러 내용을 출력한다.
ls -l /tmp
-> 표준 입력

합계 36
drwx------. 2 root root 4096 2022-03-04 18:50 keyring-r0MVLh -> 표준 출력
drwx------. 2 gdm gdm 4096 2022-03-04 18:50 orbit-gdm
drwx------. 2 root root 4096 2022-03-04 18:52 orbit-root
-rw-r--r--. 1 root root 1576 2022-03-03 19:01 passwd
drwx------. 2 root root 4096 2022-03-04 18:50 pulse-eQ8pBcqmbauc
drwx------. 2 gdm gdm 4096 2022-03-04 18:51 pulse-oU6LUTVnzMgH
drwxr-xr-x. 2 root root 4096 2022-03-03 19:04 test
drwx------. 2 root root 4096 2022-02-22 20:17 virtual-root.UQzjWD
drwx------. 2 root root 4096 2022-03-04 18:51 virtual-root.hjlr35
-rw-------. 1 root root 0 2022-02-23 04:57 yum.log

ls -l /abc
-> 

ls: cannot access /abc: 그런 파일이나 디렉터리가 없습니다 -> 표준 에러

1) 출력 재지정

> : 출력 내용을 파일로 덮어쓰기하여 저장한다.

echo 1111
echo 1111 1> file1 -> 1 은 기본값이기 때문에 생략 가능하다.
cat file1

-> 1111

echo 2222 > file1
cat file1
-> 1111

>> : 출력 내용을 파일로 이어쓰기하여 저장한다.

echo 3333 >> file1
echo 4444 >> file1
cat file1

2222
3333
4444

2) 에러 재지정

2> 에러 내용을 파일로 덮어쓰기하여 저장한다.
2>> 에러 내용을 파일로 이어쓰기하여 저장한다.

ls -l /abc
ls -l /abc > errfile  -> '2'가 없으면, 출력 재지정으로 처리한다.

- 에러 재지정을 의미하는 '2'를 포함하여 지정하지 않았기 때문에 에러는 모니터로 출력되고 파일에
 저장되어 있지 않다.

cat errfile

- 그렇기 때문에 다음과 같이 에러 재지정은 반드시 '2'를 포함시켜서 지정해야한다.

ls -l /xyz 2>> errfile
cat errfile

-> ls: cannot access '/xyz': 그런 파일이나 디렉터리가 없습니다.

- 다음과 같이 에러가 맋이 뜨는 경우, 별도의 파일에 저장하지 않고 모니터에 출력되지 않게 하라면
 '/dev/null'로 에러를 지정하면된다.


find / -perm -4000

->

find: ‘/proc/11054/task/11054/fd/5’: 그런 파일이나 디렉터리가 없습니다
find: ‘/proc/11054/task/11054/fdinfo/5’: 그런 파일이나 디렉터리가 없습니다
find: ‘/proc/11054/fd/6’: 그런 파일이나 디렉터리가 없습니다
find: ‘/proc/11054/fdinfo/6’: 그런 파일이나 디렉터리가 없습니다

find / -perm -4000 2> /dev/null

-> 아무것도 안뜸 ㅇㅇ

/dev/null은 Unix 및 Unix 기반 시스템에서 사용되는 특별한 파일 경로입니다.
이 파일은 모든 데이터를 기록하지 않고 버릴 수 있는 가상의 장소를 나타냅니다.
여러 가지 용도로 사용됩니다.

3) 입력 재지정

< : 인자값을 키보드 입력이 아닌 파일로 받는다.

cat 0< /etc/issue -> 0 은 기본값이기 때문에 생략 가능하다.

<< : 특정 문자열까지맊 입력을 받는다.

cat << EOF

1111
2222
3333
EOF

->

1111
2222
3333

- 다음은 EOF 전까지 입력받은 문자열을 'file2'에 이어쓰기하여 저장한다.

cat << EOF >> file2
-> EOF 전까지 입력했던 것이 file2 들어감

간단한 예제

  • 다음 결과 내용을 순서대로 'file1.txt'에 저장하여라.
  • 확인 명령어 : cat file1.txt

1.ps -ef | head -1 ; ps -ef | grep sleep

2.rpm -qa | grep openssh


head -1 > file1.txt ; ps -ef | grep sleep  >> file1.txt ; rpm -qa | grep openssh >> file1.txt

-> 이렇게 풀이함


ps -ef | head -1 ; ps -ef | grep sleep > file1.txt
-> 실수로 이렇게 하면 앞에건 안들어가고 뒤에것만 들어감

  • 다음 명령어에 의해서 출력되는 에러를 'file2.txt'로 저장한다.
  • 확인 명령어 : cat file2.txt
ind / -perm -4000 2> file2.txt
  • cat 명령어를 이용하여 '1111', '2222', '3333'을 입력을 받은 이후, 출력되는 내용을 'file3.txt'로 저장하여라.
  • 확인 명령어 : cat file3.txt
root@Client1 /root/test]# cat << EOF > file3.txt
> 1111
> 2222
> 3333
> EOF
[root@Client1 /root/test]# 
[root@Client1 /root/test]# cat file3.txt 
1111
2222
3333
  • cat 명령어를 이용하여 '4444', '5555', '6666'을 입력을 받은 이후, 출력되는 내용을 'file3.txt'로 추가하여라.
  • 확인 명령어 : cat file3.txt

root@Client1 /root/test]# cat << EOF >> file3.txt
> 4444
> 5555
> 6666
> EOF
[root@Client1 /root/test]# 
[root@Client1 /root/test]# cat file3.txt 
1111
2222
3333
4444
5555
6666

profile
Web Developer

0개의 댓글