본문으로 바로가기

메타 케릭터(meta character)
메타 케릭터란 Shell 이 특별한 의미로 해석하는 문자 또는 기호를 의미한다.


' ' 작음 따옴표 : 쉘이 해석할 수 없도록 막아
echo '$HOME' 
$HOME


" " 큰 따옴표 : 쉘이 해석할 수 없도록 막아 줌, 단 $, ``, \은 인식됨
[root@CentOS /test]# echo "$HOME"
/root
[root@CentOS /test]# echo "\HOME"
\HOME
[root@CentOS /test]# echo "``HOME"
HOME


ex)
echo "$HOME is root directory" : $, ``,\은 인식되므로 /root로 바뀌고 echo가 출력하는것이기 때문에
나머지 문자는 그대로 출력된다.
/root is root directory


'' 역 따옴표
쉘이 해석할 때 명령어로 인식함, 그렇기 때문에 역 따옴표 안의 내용을
실행한다.


[root@CentOS /test]# echo 'date'
date


[root@CentOS /test]# echo `hostname`
CentOS
$( ) 역 따옴표 : 동일 역 따옴표와 동일함


[root@CentOS /test]# echo 'date'
date

echo $(date)   
2017. 04. 19. (수) 11:02:28 KST


\ 역 슬래쉬 : 역 슬래쉬 다음에 나온 문자를 쉘이 해석할 수 없도록 막아줌

[root@CentOS /test]# echo $HOME
/root
[root@CentOS /test]# echo \$HOME
$HOME

; 세미콜론 : 한개의 라인에 여러개 명령어를 수행해줌

ex) echo $HOME ; date ; cal

* 애스터리스크 : 모든 파일 의미함
< 입력 재지정 :입력을 파일로 할때 사용함
<< 입력 완료 :이 문자열까지만 입력을 받음(here document)
> 출력 재지정 : 출력 내용을 파일로 저장할때 사용함 (덮어쓰기됨)
>> 출력 재지정 : 출력 내용을 파일로 저장할때 사용함 (이어쓰기됨)

| 파이프 : 앞에서 실행한 명령어 출력 결과를 뒤에서 실행하는 명령어 입력값으로
처리함


`abc` = $(abc)

리다이렉션 : 리다이렉션이란 입출력 방향을 재지정하는 기능을 의미한다.


fd : 0 STDIN 표준 입력, 특별히 입력이 지정되지 않는 경우 키보드에서 입력을 받는다.
fd : 1 STDOUT
표준 출력, 특별히 출력이 지정되지 않는 경우 정상적인 출력 결과를
모니터로 출력한다.
fd : 2 STDERR
표준에러, 특별히 출력이 지정되지 않는 경우 에러의 출력 결과를 모니터로
출력한다.

cat
ccna // 엔터 (표준 입력)
ccna // (표준 출력)
ccnp // 엔터 (표준 입력)
ccnp // (표준 출력)


[root@CentOS test]# tr linux LINUX 치환
hello
heLLo
unix
UNIX

[root@CentOS test]# tr a-z A-Z
hello
HELLO
abcde
ABCDE


[root@CentOS /test]# ls /var  --> 정상실행(표준 출력)
account  crash  db     games  lib    lock  mail  opt       run    tmp  yp
cache    cvs    empty  gdm    local  log   nis   preserve  spool  www

[root@CentOS /test]# ls /dir
ls: cannot access /dir: 그런 파일이나 디렉터리가 없습니다 (오류메세지) 표준오류


입력 재지정

 Ex1) 입력 재지정 예제 I
[root@CentOS /test]# cat < /etc/passwd  : /etc/passwd라는 파일을 입력받아서 cat로 출력
화면에 커서가 깜빡이며 키보드로 입력하기를 원하는데, 타이핑대신 특정파일을 입력으로 쓰고싶을때
          예) cat < aa.txt


Ex2) 입력 재지정 예제 II
[root@CentOS /test]# tr a-z A-Z < /etc/passwd : /etc/passwd라는 파일을 입력받아서 tr로 치환

tr a-z A-Z < /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


[root@CentOS /test]# tr a-z A-Z < /etc/passwd > p.txt : /etc/passwd라는 파일을 입력받아서 tr로 치환하고 p.txt라는 파일로 저장
EX3) 입력 재지정 예제 III

cat << ^
> abc
> def
> ^ ---> ^ 이 입력되야 종료
abc
def

cat << END
> abc
> def
> END   ---> END가 입력되야 종료
abc
def


cat << END
> abc
> def
> END
abc
def

 

 

출력재지정 예제 1


ls -l /root
합계 100
-rw-------. 1 root root  1594 2017-04-17 22:31 anaconda-ks.cfg
-rw-r--r--. 1 root root 46035 2017-04-17 22:31 install.log
-rw-r--r--. 1 root root 10033 2017-04-17 22:29 install.log.syslog
drwxr-xr-x. 2 root root  4096 2017-04-17 22:35 공개
drwxr-xr-x. 2 root root  4096 2017-04-17 22:35 다운로드
drwxr-xr-x. 2 root root  4096 2017-04-17 22:35 문서
drwxr-xr-x. 2 root root  4096 2017-04-17 22:35 바탕화면
drwxr-xr-x. 2 root root  4096 2017-04-17 22:35 비디오
drwxr-xr-x. 2 root root  4096 2017-04-17 22:35 사진
drwxr-xr-x. 2 root root  4096 2017-04-17 22:35 음악
drwxr-xr-x. 2 root root  4096 2017-04-17 22:35 템플릿
[root@CentOS test]# ls -l /root > lsfile
[root@CentOS test]# ls -l lsfile
-rw-r--r-- 1 root root 649 2017-04-19 11:33 lsfile

출력재지정 예제 2

[root@CentOS test]# echo 1111
1111
[root@CentOS test]# echo 1111 > file1
[root@CentOS test]# cat file1
1111
[root@CentOS test]# echo 2222 > file1
[root@CentOS test]# cat file1
2222
[root@CentOS test]# echo 1111 >> file1
[root@CentOS test]# cat file1
2222
1111

[root@CentOS /test]# who
root     tty1         2017-04-17 15:00 (:0)
user1    pts/1        2017-04-19 10:43 (192.168.2.1)
root     pts/0        2017-04-19 09:34 (192.168.2.1)
[root@CentOS /test]# echo "hi user" > /dev/pts/1  ---> user1으로 출력 재지정

 

에러 재지정


[root@CentOS test]# ls -l /test/nols
ls: cannot access /test/nols: 그런 파일이나 디렉터리가 없습니다


[root@CentOS test]# ls -l /test/nols 2>errfile   ---> 에러코드 2번까지 숫자를 입력해야 에러메세지를 저장한다.
[root@CentOS test]# cat errfile
ls: cannot access /test/nols: 그런 파일이나 디렉터리가 없습니다

ps -ef | grep sshd | head -2  ps -ef를 grep받아먹고 또 head
root      2028     1  0 09:13 ?        00:00:00 /usr/sbin/sshd
root      3551  2028  0 09:34 ?


[root@CentOS /test]# cat /etc/services -n |head -n 5000 | tail -11       
  4990  apollo-cc       2754/udp                # APOLLO CC
  4991  expresspay      2755/tcp                # Express Pay
  4992  expresspay      2755/udp                # Express Pay
  4993  simplement-tie  2756/tcp                # simplement-tie
  4994  simplement-tie  2756/udp                # simplement-tie
  4995  cnrp            2757/tcp                # CNRP
  4996  cnrp            2757/udp                # CNRP
  4997  apollo-status   2758/tcp                # APOLLO Status
  4998  apollo-status   2758/udp                # APOLLO Status
  4999  apollo-gms      2759/tcp                # APOLLO GMS
  5000  apollo-gms      2759/udp                # APOLLO GMS

 

 

vi 편집기


vi 편집기 사용 방법
vi 편집기는 유닉스 계열에서 가장 많이 사용되고 있는 편집기이다.
- 명령 모드 : vi 편집기 기본 모드, 입력을 명령어로 처리함
- 입력 모드 : i, I, a, A, o, O 를 입력하면 텍스트 입력이 가능한 모드, 입력을 파일에 입력함
- 확장 모드 : 왼쪽 하단에서 명령어를 수행하는 모드

 


명령모드에서
소문자 u : 취소
x : delete
nx - 커서 뒤쪽 n 글자 삭제
dd 한줄삭제
ndd - 현재 커서에서 n 번째 라인까지 삭제
dw - 커서 단어 삭제
ctrl + r : 취소한것을 취소
대문자 A : 맨뒤로 이동
소문자 o : 다음줄 공백
대문자 O : 윗줄 공백
a는 커서 뒤에 입력
i는 커서 앞에 입력
$ 뒤, 0 앞 (home, end)
ctrl +b : 앞으로 , ctrl +f : 뒤로( pgup, pgdn)
대문자 G : 맨마지막
gg : 맨앞으로
10G : 10줄로 이동
u - 취소 기능
dw - 커서 단어 삭제
p - 커서 아래쪽 붙혀넣기
P - 커서 위로 붙혀넣기
:13,21 co 37 <- 13~21 라인을 37 번째 아래에 복사&붙여넣기
p - 커서 아래쪽 붙혀넣기
P - 커서 위로 붙혀넣기
cc - 삭제 후 바로 입력 가능 (치환 명령어)
J - 현 위치에서 아래 라인 올리기
. - 방금 전에 했던 명령어 및 입력 내용을 실행해줌
/ <- 위에서 아래로 검색
: ? <- 아래에서 위로 검색
n - 검색 정방향 이동
N - 검색 역방향 이동
:noh - 검색된 내용에 색깔 표시를 초기화하는 기능
:set nu - 라인번호 설정
:set nonu - 라인번호 해제
d$ - 커서 라인 삭제 및 라인 유지
dw - 커서 단어 삭제
dG - 커서 라인 포함해서 끝 라인까지 삭제
! bash - 잠시 나가기 (Ctrl+z 동일, 다시 들어갈땐 fg 실시)
alias vi='vim'

vimtutor

 

chown 명령어

[root@CentOS /test]# chown user1 file1
[root@CentOS /test]# ls -l file1
-rw-r--r--. 1 user1 root 0 2015-12-24 10:21 file1  ---> 소유자가 바뀜


[root@CentOS /test]# chown .user1 file1
[root@CentOS /test]# ls -l file1
-rw-r--r--. 1 user1 user1 0 2015-12-24 10:21 file1----> 그룹이 바뀜


[root@CentOS /test]# chown root.root file1
[root@CentOS /test]# ls -l file1
-rw-r--r--. 1 root root 0 2015-12-24 10:21 file1----> 소유자와 그룹이 바뀜

chown -R : 하위디렉토리까지 소유권변경
[root@CentOS /test]# mkdir -p dir1/dir2/dir3
[root@CentOS /test]# touch dir1/file1
[root@CentOS /test]# touch dir1/file2
[root@CentOS /test]# tree
.
└── dir1
├── dir2
│ └── dir3
├── file1
└── file2
[root@CentOS /test]# ls -lR dir1
dir1:
합계 4
drwxr-xr-x. 3 root root 4096 2015-12-24 10:32 dir2
-rw-r--r--. 1 root root 0 2015-12-24 10:32 file1
-rw-r--r--. 1 root root 0 2015-12-24 10:32 file2
dir1/dir2:
합계 4
drwxr-xr-x. 2 root root 4096 2015-12-24 10:32 dir3
dir1/dir2/dir3:
합계 0
[root@CentOS /test]# chown -R user1 dir1
[root@CentOS /test]# ls -lR dir1
dir1:
합계 4
drwxr-xr-x. 3 user1 root 4096 2015-12-24 10:39 dir2

chgrp 명령어

[root@CentOS /test]# touch file1
[root@CentOS /test]# ls -l file1
-rw-r--r-- 1 root root 0 2017-04-19 17:06 file1
[root@CentOS /test]#
[root@CentOS /test]# chgrp user1 file1
[root@CentOS /test]# ls -l file1
-rw-r--r-- 1 root user1 0 2017-04-19 17:06 file1

chgrp -R 명령어

root@CentOS /test]# touch file1
[root@CentOS /test]# ls -l file1
-rw-r--r-- 1 root root 0 2017-04-19 17:02 file1

[root@CentOS /test]#
[root@CentOS /test]# chgrp user1 file1
[root@CentOS /test]# ls -l file1
-rw-r--r-- 1 root user1 0 2017-04-19 17:02 file1


[root@CentOS /test]# mkdir -p dir1/dir2/dir3
[root@CentOS /test]# touch dir1/file1
[root@CentOS /test]# touch dir1/file2
[root@CentOS /test]# ls -lR
.:
합계 4
drwxr-xr-x 3 root root 4096 2017-04-19 17:03 dir1

./dir1:
합계 4
drwxr-xr-x 3 root root 4096 2017-04-19 17:03 dir2
-rw-r--r-- 1 root root    0 2017-04-19 17:03 file1
-rw-r--r-- 1 root root    0 2017-04-19 17:03 file2

./dir1/dir2:
합계 4
drwxr-xr-x 2 root root 4096 2017-04-19 17:03 dir3

./dir1/dir2/dir3:
합계 0

 

@chmod 파일, 디렉토리 허가권(심볼릭 모드)

[root@CentOS /test]# chmod u+x file1
[root@CentOS /test]# ls -l file1
-rwxr--r-- 1 root root 0 2017-04-19 17:11 file1

[root@CentOS /test]# chmod g-r file1
[root@CentOS /test]# ls -l file1
-rwx---r-- 1 root root 0 2017-04-19 17:11 file1

[root@CentOS /test]# chmod u-x,g+x file1
[root@CentOS /test]# ls -l file1
-rw---xr-- 1 root root 0 2017-04-19 17:11 file1

[root@CentOS /test]# chmod a=rwx file1
[root@CentOS /test]# ls -l file1
-rwxrwxrwx 1 root root 0 2017-04-19 17:11 file1

 

@chmod 파일, 디렉토리 허가권(수치 모드)

 

[root@CentOS /test]# chmod 744 file1
[root@CentOS /test]# ls -l file1
-rwxr--r-- 1 root root 0 2017-04-19 17:16 file1

[root@CentOS /test]#
[root@CentOS /test]# chmod 754 file1
[root@CentOS /test]# ls -l file1
-rwxr-xr-- 1 root root 0 2017-04-19 17:16 file1

 

@@파일 & 디렉토리 퍼미션 이해

@user2

user2@CentOS /home/user2]# ls -ld /home/user2
drwx------ 4 user2 user2 4096 2017-04-19 14:46 /home/user2
  7  0   0
[user2@CentOS /home/user2]#
[user2@CentOS /home/user2]#
[user2@CentOS /home/user2]#
[user2@CentOS /home/user2]#
[user2@CentOS /home/user2]#


[user2@CentOS /home/user2]# mkdir dir1
[user2@CentOS /home/user2]# touch dir1/file.txt
[user2@CentOS /home/user2]# ls -lR
.:
합계 4
drwxrwxr-x 2 user2 user2 4096 2017-04-19 17:23 dir1
   7  7  5
./dir1:
합계 0

 

@user1
-rw-rw-r-- 1 user2 user2 0 2017-04-19 17:23 file1.txt  ---> 타인사용자는 읽기만 가능
   6  6  4

[user1@CentOS /home/user1]# cd /home/user2
-bash: cd: /home/user2: 허가 거부

[user1@CentOS /home/user1]# rm -rf /home/user2/dir1/file1.txt
rm: cannot remove `/home/user2/dir1/file1.txt': 허가 거부
[user1@CentOS /home/user1]$ cd /home/user2/dir1
-bash: cd: /home/user2/dir1: 허가 거부
rm -rf /home/user2/dir1/file1.txt
rm: cannot remove `/home/user2/dir1/file1.txt': 허가거부

퍼미션 결과 : 'user1'으로 'user2' 디렉토리 접근 및 생성/삭제 불가능


@user2
[user2@CentOS /home/user2]# chmod 757 /home/user2
[user2@CentOS /home/user2]# ls -ld /home/user2
drwxr-xrwx 5 user2 user2 4096 2017-04-19 17:22 /home/user2
   7  5  7
[user2@CentOS /home/user2]# chmod 755 dir1
[user2@CentOS /home/user2]# touch dir1/file2
[user2@CentOS /home/user2]# chmod 646 dir1/file2
[user2@CentOS /home/user2]# ls -lR
.:
합계 4
drwxr-xr-x 2 user2 user2 4096 2017-04-19 17:37 dir1
   7  5  5

./dir1:
합계 0
-rw-rw-r-- 1 user2 user2 0 2017-04-19 17:23 file1.txt
  6  6 4
-rw-r--rw- 1 user2 user2 0 2017-04-19 17:37 file2
  6  4  6

 

@user1

[user1@CentOS /home/user1]# id user1
uid=501(user1) gid=501(user1) groups=501(user1)
[user1@CentOS /home/user1]#
[user1@CentOS /home/user1]# cd /home/user2/dir1
[user1@CentOS /home/user2/dir1]# rm -f file2
rm: cannot remove `file2': 허가 거부

[user1@CentOS /home/user1]# mkdir /home/user2/dir1/dir2
mkdir: `/home/user2/dir1/dir2' 디렉토리를 만들 수 없습니다: 허가 거부

[user1@CentOS /home/user2/dir1]$ rm -f file1.txt
rm: cannot remove `file1.txt': 허가 거부

[user1@CentOS /home/user2/dir1]$ mkdir dir2
mkdir: `dir2' 디렉토리를 만들수 없습니다. 허가 거부

[user1@CentOS /home/user2/dir1]$ cd /home/user2/dir1
[user1@CentOS /home/user2/dir1]$ cd
[user1@CentOS /home/user1]$
[user1@CentOS /home/user1]$ mkdir /home/user2/dir1/dir2
mkdir: `/home/user2/dir1/dir2' 디렉토리를 만들 수 없습니다: 허가 거부

[user1@CentOS /home/user1]$ rm -rf /home/user2/dir1
rm: cannot remove `/home/user2/dir1/file2': 허가거부
rm: cannot remove `/home/user2/dir1/file1.txt': 허가거부

 rm -rf /home/user2
rm: cannot remove `/home/user2/.mozilla/plugins': 허가거부
rm: cannot remove `/home/user2/.mozilla/extensions': 허가거부
rm: cannot remove `/home/user2/dir1/file2': 허가거부
rm: cannot remove `/home/user2/dir1/file1.txt': 허가거부

퍼미션 결과 : 'user1'으로 'user2' 디렉토리 접근 가능, 대신 생성/삭제 불가능


@user2

[user2@CentOS /home/user2]$ chmod 757 dir1
[user2@CentOS /home/user2]$ ls -lR
.:
합계 4
drwxr-xrwx. 2 user2 user2 4096 2015-12-24 13:44 dir1
7 5 7
./dir1:
합계 0
-rw-rw-r--. 1 user2 user2 0 2015-12-24 13:37 file1.txt
-rw-r--rw-. 1 user2 user2 0 2015-12-24 13:44 file2


@user1

[user1@CentOS /home/user2/dir1]$ rm -f file2
rm: cannot remove `file2': ?덇? 嫄곕?
[user1@CentOS /home/user2/dir1]$ rm -f file2
[user1@CentOS /home/user2/dir1]$ rm -f file1.txt
[user1@CentOS /home/user2/dir1]$ mkdir dir2
[user1@CentOS /home/user2/dir1]$ ls -lR
.:
합계 4
drwxrwxr-x. 2 user1 user1 4096 2015-12-24 14:09 dir2
./dir2:
합계 0
[user1@CentOS /home/user2/dir1]$ rmdir dir2
[user1@CentOS /home/user2/dir1]$ ls -lR
.:
합계 0
[user1@CentOS /home/user2/dir1]$ mkdir /home/user2/dir1/dir2
[user1@CentOS /home/user2/dir1]$ ls -lR /home/user2/
/home/user2/:
합계 4
drwxr-xrwx. 3 user2 user2 4096 2015-12-24 14:10 dir1
/home/user2/dir1:
합계 4
drwxrwxr-x. 2 user1 user1 4096 2015-12-24 14:10 dir2
/home/user2/dir1/dir2:
합계 0
[user1@CentOS /home/user2/dir1]$ rm -rf /home/user2/dir1
[user1@CentOS /home/user2/dir1]$ ls -lR /home/user2/
/home/user2/:
합계 0
퍼미션 결과 : 'user1'으로 'user2' 디렉토리 접근 가능 및 생성/삭제 가능

 

@umask 명령어

[root@CentOS /test]# umask 002
[root@CentOS /test]# touch file2
[root@CentOS /test]# mkdir dir2
[root@CentOS /test]# ls -l
합계 8
drwxr-xr-x 2 root root 4096 2017-04-19 22:01 dir1  
drwxrwxr-x 2 root root 4096 2017-04-19 22:03 dir2    777-002=775
-rw-r--r-- 1 root root    0 2017-04-19 22:01 file1
-rw-rw-r-- 1 root root    0 2017-04-19 22:03 file2   666-002=664