메타캐릭터 + 리다이렉션

oogu ㅣ 2022. 4. 3. 16:17

useradd user1

계정 만들기

cat /etc/passwd 에서 맨 밑에보면 user1이 생성된다.

su - user1

계정전환, - 을 붙이면 전환된계정의 환경변수가 적용된다.

id

현재 계정을 알려줌

echo $PATH

환경변수 출력

exit

로그아웃

su user1

루트 계정의 환경변수를 사용한다.

passwd user1

패스워드 설정, user1 패스워드 설정

last

마지막 로그인 정보 및 현재 로그인 정보를 출력해줌

  • still logged in : 현재 접속중인 상태
  • tty : 본체 접속 포트 → vmware
  • pts : 본체 터미널 및 원격 접속 포트

어디서 어떤 포트로 어떤애가

lastlog 모든 사용자의 마지막 로그인 정보를 출력해줌

lastb 접속 실패를 출력해줌

같은 ip인데 실패가 엄청많으면 > 해킹 가능성, 브루트포스

  1. 패스워드 변경
  1. ip차단

 

who, w

현재 접속된 정보를 출력해줌

ip가 뜬거는 원격으로 접속한것이다.

what 들어와서 어떤거 실행했는지

 

외부/내부 명령어
  • 외부 명령어 : 특정 디렉토리에 파일로 존재하는 명령어(Ex : /bin, /sbin, /usr/bin)
  • 내부 명령어 : 쉘에서 제공하는 명령어(디렉토리 안에 파일로 존재 X)
  • 구분하는 방법 : man 명령어로 확인 가능, 또는 whereis 명령어로 확인 가능 → 어디 디렉토리인지 안나옴 → shell이 제공하는 명령어

rmdir, mv, alias, bg, umask, history, nslookup, chmod, chown, type, fg, jobs, man

외부 명령어? 내부 명령어?


@ 쉘(Shell)
  • 명령어 해석기
  • 명령어가 입력되거나 스크립트 파일에서 읽어 들이는 명령어들을 해석하여 사용자와 커널 중계 역할을 담당하는 도구

사용자 입력 -------------- 쉘 ---------------- 커널

ls -l /tmp  ->              해석 ->        0101010101

  • 대표적으로 가장 많이 사용하는 쉘은 Bash 쉘이다.

[root@Client1 ~]# chsh -l

/bin/sh

/bin/bash

/sbin/nologin

/bin/dash

/bin/tcsh

/bin/csh

[root@Client1 ~]# cat /etc/passwd | head -1 ; cat /etc/passwd | tail -2

root:x:0:0:root:/root:/bin/bash

user1:x:500:500::/home/user1:/bin/bash

user2:x:501:501::/home/user2:/bin/bash

 

실행 중인 프로세스 출력

[root@Client1 ~]# ps -f

UID PID   PPID C STIME TTY   TIME     CMD

root 2120 2111 0 15:05 pts/0 00:00:00 -bash

root 3048 2120 0 16:10 pts/0 00:00:00 ps -f

 

PID : 프로세스 고유 ID

PPID : 부모 프로세스 고유 ID

CMD : 실행된 명령 라인

즉, ps -f 명령을 실행하면 -bash(쉘)에게 전달한다는 뜻이다. → 해석해서 커널에게 줘야 하기 때문

 

  1. 메타케릭터
  • 쉘이 특별한 의미로 해석하는 문자, 기호를 의미한다.

| 파이프 앞에 실행한 명령어 결과를 파이프 다음 명령어로 넘김

cat /etc/passwd | head -3

; 세미콜론

여러개의 명령어를 수행하도록 함

&& 더블 앰퍼샌드

여러개의 명령어를 수행하도록 함

date ; cal

date && cal

cat /etc/passwd | head -1 ; cat /etc/passwd | tail -2

ps -ef | head -1 ; ps -ef | grep sshd

* 애스터리스크 전체

find /etc -name pass*

find /etc -name *conf

rm -rf /root/test/*

^ 캐럿

라인 시작의 문자 지정

cat /etc/passwd | grep ^root

$ 달러 라인 끝의 문자 지정

cat /etc/passwd | grep bash$

$ 달러                   변수 지정(EX: echo 명령어를 이용하면 환경 변수 값을 보여줌)             

env - 환경 변수 출력

env | grep PATH

env | grep HOSTNAME

env | grep SHELL

echo $PATH

echo $HOSTNAME

echo $SHELL

' ' 작은 따옴표

쉘이 메타케릭터를 해석할 수 없도록 막아 줌(메타케릭터를 일반 문자로 처리)

echo $PATH

echo '$PATH'

echo $HOSTNAME $SHELL

echo '$HOSTNAME $SHELL'

Ex) echo '$HOSTNAME' $SHELL 명령을 실행할 경우 출력되는 것은?

① $HOSTNAME $SHELL

② Client1 /bin/bash

③ Client1 $SHELL

④ $HOSTNAME /bin/bash

" " 큰 따옴표

쉘이 메타케릭터를 해석할 수 없도록 막아 줌, 단 $, ``, \은 쉘이 해석함

echo $PATH

echo "$PATH"

Ex) echo "$HOSTNAME" $SHELL 명령을 실행할 경우 출력되는 것은?

① $HOSTNAME $SHELL

② Client1 /bin/bash

③ Client1 $SHELL

④ $HOSTNAME /bin/bash

` 역 따옴표

쉘이 해석할 때 역 따옴표 안에 있는 문자열을 명령어로 인식함

echo date

echo `date` echo `ls -l /tmp`

$( ) 역 따옴표 동일

쉘이 해석할 때 역 따옴표 안에 있는 문자열을 명령어로 인식함

echo date

echo $(date)

echo $(ls -l /tmp)

\ 역슬래쉬

역슬래쉬 다음에 나오는 메타케릭터를 쉘이 해석할 수 없도록 막아줌

echo $PATH

echo \$PATH

Ex) echo '$HOSTNAME $SHELL' 명령을 실행할 경우 출력되는 것은?

① $HOSTNAME $SHELL

② Client1 /bin/bash

③ Client1 $SHELL

④ $HOSTNAME /bin/bash

Ex) echo \$HOSTNAME $SHELL 명령을 실행할 경우 출력되는 것은?

① $HOSTNAME $SHELL

② Client1 /bin/bash

③ Client1 $SHELL

④ $HOSTNAME /bin/bash

 

입력/출력/에러 재지정(리다이렉션)

표준 입력 FD 0 키보드로부터 입력을 받음

표준 출력 FD 1 모니터로 결과 내용을 출력함

표준 에러 FD 2 모니터로 에러 내용을 출력함

[root@Client1 ~]# 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

[root@Client1 ~]# ls -l /abc

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

< 입력 재지정 인자값을 키보드 입력이 아닌 파일로 받음

cat /etc/issue - 표준 입력

cat < /etc/issue -> 파일로 부터 입력을 받겠다.

어차피 둘 다 키보드 입력이지만 인자값이 다르다

<< 입력 완료 이 문자열까지만 입력 받음

cat << EOF

>1111

>2222

>3333

>EOF

cat << EOF > file2 -> 자주씀

>1111

>2222

>3333

>EOF

> 출력 재지정 출력을 파일로 실시(덮어쓰기) - 1> 인데 생략됨

echo 1111 > file1

cat file1

echo 2222 > file1

cat file1

>> 출력 재지정 출력을 파일로 실시(이어쓰기)

echo 3333 >> file1

echo 4444 >> file1

cat file1

2> 에러 재지정 - >만하면 1>이기때문데 2>으로 써야한다.

ls -l /aaa

ls -l /aaa 2> errfile

ls -l /xyx 2>> errfile

cat errfile

에러 재지정은 2를 꼭넣어야한다.

find / -perm -4000 -> 에러가 뜸

find / -perm -4000 2> /dev/null -에러가 버려짐

Ex1) 출력 재지정

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

[root@Client1 ~]# cd test

[root@Client1 test]# ps -ef | head -1 ; ps -ef | grep ssh

UID PID PPID C STIME TTY TIME CMD

root 1663 1 0 18:35 ? 00:00:00 /usr/sbin/sshd

root 2116 1663 0 18:37 ? 00:00:00 sshd: root@pts/0

root 3248 2123 0 20:21 pts/0 00:00:00 grep ssh

[root@Client1 test]# rpm -qa | grep openssh

openssh-askpass-5.3p1-104.el6.x86_64

openssh-5.3p1-104.el6.x86_64

openssh-clients-5.3p1-104.el6.x86_64

openssh-server-5.3p1-104.el6.x86_64

Ex2) 에러 재지정

  • 다음 명령어에 의해서 출력되는 에러를 'perm_err.txt'로 저장한다.
  • 확인 명령어 : cat perm.err.txt

[root@Client1 test]# find / -perm -4000

Ex3) 입력 재지정 & 출력 재지정

  • cat 명령어를 이용하여 '1111', '2222', '3333'을 입력을 받은 이후, 출력되는 내용을 'number_file.txt'로 저장하여라.
  • 확인 명령어 : cat number.txt

 

 

 

참고

 

chsh -l

쉘 종류 출력

ps -f

ppid 부모 프로세스 id이다.

pid 현재 프로세스 id이다.

뜻 ps -f 명령어는 -bash가 처리한다.

 

 

 

 

 

'리눅스' 카테고리의 다른 글

압축 및 아카이빙  (0) 2022.04.03
리눅스 계정  (0) 2022.04.03
기본 명령어 2  (0) 2022.03.23
기본 명령어  (0) 2022.03.19
리눅스_기본 명령어 + 환경설정  (0) 2022.03.18