본문으로 바로가기

쉘에 대한 이해4

category SECURITY/Linux 2017. 3. 30. 19:22


쉘에 대한 이해 4


쉘에 대한 이해 3에 이어서 진행하겠습니다.


사용자별 쉘 설정파일(쉘 스크립트)

/etc/skel/ 경로로 들어가면 .bash_logout과 .bash_profile .bashrc 쉘 스크립트가있습니다. 

모든 사용자들은 생성될때 이 3가지 설정파일들을 /etc/skel/에서 자신의 홈디렉터리로 복사하게 됩니다.

따라서 모든 사용자들이 갖고 있습니다.

이 쉘 스크립트를 이용해 전체 사용자들에게 동일한 설정을 적용시키려면 밑에있는 경로에 설정파일을 변경해주면 됩니다.

(단, 이미 생성되어있는 사용자는 변경되지 않습니다.)

  - /etc/skel .bash_logout

  - /etc/skel .bash_profile

  - /etc/skel .bashrc

사용자별로 설정을 바꾸고 싶을때에는 각 사용자들의 홈디렉터리에 있는 설정파일을 변경해주면 됩니다.

  - $HOME/ .bash_logout

  - $HOME/ .bash_profile

  - $HOME/ .bashrc


 - .bash_logout : 사용자가 로그아웃할 때 자동으로 실행되는 스크립트

 - .bash_profile : 사용자가 로그인할 때 자동으로 실행되는 스크립트

 - .bashrc : 로그인할때 실행되는 스크립트

.bash_profile과 .bashrc는 로그인쉘입니다. 둘 다 사용자가 로그인할 때 실행되는 쉘입니다.   

.bash_profile의 내용을 보면 환경변수를 볼 수 있습니다. 또한 로그인 될 때 실행되기 때문에 바꿀 수 있는 프롬프트 모양을 바꿀때 매번 바꾸기 보다는 .bash_profile에 저장해 로그인이 실행되면 알아서 바꿀 수 있게 만들 수 있습니다.

.bashrc는 .bash_profile과 마찬가지로 로그인이 실행될때 실행됩니다. root 권한의 .bashrc에서만 alias 설정이 되어있습니다. 다른 일반 사용자에게는 alias 설정이 되어있지 않습니다.


그러면 어떤 차이인가?

su 명령어를 통해서 확인해 볼 수 있습니다.

먼저 su 명령어를 살펴보면

switch user : su

su 옵션중에서 su 와 su - 의 차이를 통해 .bashrc 와 .bash_profile의 차이를 볼 수 있습니다.

su user1 : 기존에 사용했던 쉘을 이용해서 쓴다. (서브쉘) - run bashrc 

su - user1 : 전혀 다른 쉘. 로그인쉘 - run bashrc , run bash_profile


예를 들어 user1에 홈디렉터리 안에 있는 .bashrc와 .bash_profile 내에 각각 "run bashrc"와 "run bash_profile"을 추가해주었습니다. 

su 명령어를 통해 user1이 로그인되면 쉘스크립트가 작동되는지 확인하기 위해서 추가했습니다.

밑에는 echo 명령어로 추가된 것을 볼 수 있습니다.

그리고 나서 su user1과 su - user1을 사용해보았습니다.

su user1에 경우에는 .bashrc만 실행되었다는 것을 확인해 볼 수 있습니다. 여기서 env라는 환경변수 목록을 확인하는 명령을 통해 현재 PATH를 확인해 보았습니다.

user1으로 변경했음에도 불구하고 쉘이 root로 실행되고 있다는 것을 볼 수 있습니다. (서브쉘)

su - user1 에 경우에는 .bashrc와 .bash_profile 둘 다 실행되었다는 것을 알 수 있습니다. 마찬가지로 env 명령어를 통해 PATH를 확인해 보았더니 user1의 쉘을 이용하고 있다는 것을 확인해볼 수 있습니다. 사용자를 변경했어도 root쉘을 사용하지않고 터미널에서와 같이 사용자의 쉘을 사용하고 있는 것을 볼 수 있습니다.


.bash_history : 로그인한 쉘의 명령어들의 목록을 보여준다. 

사용자가 로그인하면 썼던 명령어들을 .bash_history로 저장하게 됩니다. 로그아웃되었을 때 자동으로 만들어지고, 로그인 안한 사용자의 경우에는 생성되지 않습니다.

기본 설정으로는 1000개이상 저장되지 않습니다. set 명령을 통해 바꿔줄 수 있습니다. 만약 바꿀때에는 꼭 .bash_profile에 저장해야 합니다.

history : 사용했던 명령어 확인 - .bash_history로 저장되기 전에 메모리에 저장되는데 여기서 확인할 수 있습니다.

!! : 가장 최근에 실행되었던 명령어를 실행

!vi : 가장 최근에 실행되었던 vi 로 시작되는 명령어를 실행

!200 : history에 있는 200번의 명령어를 실행



다중 명령어  ; && || |

 - 한번에 두 개 이상의 명령을 수행

 - 순서대로 처리


 ex) 같이 실행시키고 싶을 때 사용.

 cd /tmp   touch file1   cd ~    이 세가지 명령을 한 줄에 사용하고 싶을때 다중 명령어를 사용한다.


 - cd /tmp ; touch file1 ; cd ~

    ; 는 앞에 명령어가 뒤에 명령어에 영향을 미치지 않음.

   만약 cd/ temp ; touch file1 ; cd ~  으로 앞에 명령어를 실패하면 두번째 명령과 세번째 명령은 실행된다.


 - cd /tmp && touch file1 && cd ~

    && - and

    만약 cd/ temp && touch file1 && cd ~ 으로 첫번째가 명령이 실패되었으므로 전체가 다 실행이 안된다.


 - cd /tmp || touch file1 || cd ~

    || - or   첫번째 것만 실행되고 나머지는 실행 X

    만약 cd/ temp || touch file1 || cd ~  으로 첫번째 명령이 실패되었으면 두번째 명령이 실행되고 세번째 명령은 실행되지 않는다.

 

 

 - 이전 명령어의 표준 출력을 다음 명령어의 표준 입력으로 전달

    ex) cmd1 | cmd2 | cmd3 | cmd4 ... 

    cat | awk

  awk 명령을 통해서 | 를 확인해보려 한다.

  기본적으로 awk 명령은 gawk -F: '{ print $1 }' /etc/passwd 사용한다.

  /etc/passwd 파일을 : 로 나누고 앞에 첫번째 부분을 출력하라는 의미이다.

  이것을 다중명령어인 | 를 이용해 cat /etc/passwd | gawk -F: '{ print $1 }'  사용할 수도 있다.

  또다른 예제로는 ps -ef | gawk -F' ' '{ print $1 }'  cat - | gawk -F: '{ print $1 }' 가 있다.


 



'SECURITY > Linux' 카테고리의 다른 글

마운트(Mount), 런 레벨(Run Level)  (0) 2017.04.03
장치 - 디스크  (0) 2017.03.31
쉘에 대한 이해3  (0) 2017.03.29
쉘에 대한 이해2  (0) 2017.03.28
쉘에 대한 이해1  (0) 2017.03.28