계정 만들기
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인데 실패가 엄청많으면 > 해킹 가능성, 브루트포스
- 패스워드 변경
- 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(쉘)에게 전달한다는 뜻이다. → 해석해서 커널에게 줘야 하기 때문
- 메타케릭터
- 쉘이 특별한 의미로 해석하는 문자, 기호를 의미한다.
| 파이프 앞에 실행한 명령어 결과를 파이프 다음 명령어로 넘김
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 -fppid 부모 프로세스 id이다.
pid 현재 프로세스 id이다.
뜻 ps -f 명령어는 -bash가 처리한다.