Linux Upskill 2. 파일 접근 권한, 시간대, midnight commander, 탭과 화살표 사용

9924 단어 linuxlinux

본 포스트는 박재호님의 유튜브 강의를 보고 개인적으로 정리한 내용입니다.

1. 파일 접근 허가와 sudo

1-1. 명령어 실습

ubuntu@ip-172-26-9-205:~$ ls -l /etc/shadow

위와 같이 명령어를 입력하면 다음처럼 결과가 나온다.
-rw-r----- 1 root shadow 832 Mar 22 04:54 /etc/shadow
여기서 왼쪽의 r,w가 있는 곳이 접근 권한을 나타내는 부분이다.
가장 왼쪽의 - 는 d, l 등으로도 나타나는데 각각 정규파일, 디렉토리, 링크파일을 뜻한다.
그 다음부터는 3개씩 끊어서 r,w,x로 표시하는데, 각각 읽기, 쓰기, 실행 권한을 뜻하며
왼쪽부터 소유주, 그룹, 제3자의 실행 권한을 의미한다.
따라서 예시의 파일은 소유주는 읽기와 쓰기를 할 수 있고, 그룹에 속한 유저는 읽기만, 그 외의 유저는 접근 권한이 없음을 알 수 있다.
실제로

ubuntu@ip-172-26-9-205:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied

cat 명령어(원래는 concatenate로 두 파일을 이어주는 명령어이나 인자를 하나만 주면 파일의 내용을 출력)를 사용하여 파일에 접근할 수 없는 것을 볼 수 있다.

반면 sudo 명령어를 사용해 cat을 실행하면 다음과 같이 잘 나오는 것을 볼 수 있다.

ubuntu@ip-172-26-9-205:~$ sudo cat /etc/shadow
root:*:17786:0:99999:7:::
daemon:*:17786:0:99999:7:::
bin:*:17786:0:99999:7:::
sys:*:17786:0:99999:7:::
sync:*:17786:0:99999:7:::
games:*:17786:0:99999:7:::
man:*:17786:0:99999:7:::
lp:*:17786:0:99999:7:::
mail:*:17786:0:99999:7:::
news:*:17786:0:99999:7:::
uucp:*:17786:0:99999:7:::
proxy:*:17786:0:99999:7:::
www-data:*:17786:0:99999:7:::
backup:*:17786:0:99999:7:::
list:*:17786:0:99999:7:::
irc:*:17786:0:99999:7:::
gnats:*:17786:0:99999:7:::
nobody:*:17786:0:99999:7:::
systemd-network:*:17786:0:99999:7:::
...

이제 다음처럼 명령을 입력해보자

ubuntu@ip-172-26-9-205:~$ sudo -i
root@ip-172-26-9-205:~#

사용자가 ubuntu에서 root로 바뀐 것을 볼 수 있다.
man sudo를 통해 -i에 대한 설명을 보면

login shell로 들어간다는 표현을 쓰고 있는데, 이는 superuser shell로 들어간다는 것과 같다.

사용자의 로그인 기록은 /var/log/auth.log에서 확인할 수 있는데

ubuntu@ip-172-26-9-205:~$ ls -al /var/log/auth.log
-rw-r----- 1 syslog adm 706785 Apr  2 13:41 /var/log/auth.log

이 파일은 adm 그룹에 속해 있어야 읽을 수 있는데

ubuntu@ip-172-26-9-205:~$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),108(lxd),114(netdev)

id 명령어를 통해 확인해 보면 ubuntu계정은 adm 그룹에 속해있으므로 sudo 명령어 없이도 auth.log 파일을 읽을 수 있다.
실제로 파일을 읽어보면 엄청난 길이의 문서가 당신을 맞이할 것이다.
우리는 여기서 sudo 권한으로 접속한 기록만 확인하고 싶은데, 이 때는 grep 명령어를 통해 sudo 가 적힌 부분만 뽑아내고자 한다.

ubuntu@ip-172-26-9-205:~$ grep "sudo" /var/log/auth.log

명령을 실행하면 sudo가 들어간 기록만 모아서 나온 것을 볼 수 있을 것이다.

2. 시간대

2-1. 명령어 실습

우선은 간단하게 시간대 정보를 표시하는 명령어를 입력해보자

 ubuntu@ip-172-26-9-205:~$ timedatectl
                      Local time: Fri 2021-04-02 14:01:52 UTC
                  Universal time: Fri 2021-04-02 14:01:52 UTC
                        RTC time: Fri 2021-04-02 14:01:53
                       Time zone: Etc/UTC (UTC, +0000)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

사용 가능한 시간대를 표시하려면 timedatectl list-timezones 명령어를 사용하는데, 전 세계의 시간대가 나오므로 여기에 올리지는 않겠다.

한 가지 중요한 것은, 비록 시간대를 변경(수동/자동)할 수 있지만 AWS를 사용하면서 시간대를 변경하는 일은 절대 없어야 하며 default timezone은 UTC가 되어야 한다.
현재 시간을 제대로 표시하고자 할 때는 application단에서 위치 등을 사용해 보정할 수 있도록 해야 한다. 데이터베이스의 경우도 UTC로 입력을 받게 하여 세계 어디에서 입력이 들어와도 자동으로 보정이 되도록 하는 것이 옳다.

3. midnight commander 설치

midnight commander는 콘솔 파일 관리자 어플리케이션 중 하나로, 자세한 내용은 공식 사이트 https://midnight-commander.org 에서 확인할 수 있다.
설치 방법은 이전 포스트와 동일하게

sudo apt update
sudo apt upgrade
sudo apt install mc

를 통해 최신화 시켜준 후 설치하는 것을 권장한다.

3-1. 가지고 놀아보기

설치 후 sudo apt mc를 실행하면 아래와 같은 화면이 나온다.

왼쪽 오른쪽 창은 tab키로 이동할 수 있고 맨 밑에 있는 숫자 메뉴들은 F1~F10에 해당한다.(마우스 클릭도 가능)
그리고 만약 왼쪽 창의 root 디렉토리로 들어가려고 한다면 다음과 같은 화면을 마주하게 될 것이다.


이는 물론 현재 실행중인 ubuntu 계정으로는 권한이 없기 때문에 발생하는 일이다.

이제 파일을 복사해보자.
위에서 다루었던 /var/log/auth.log 파일을 복사해볼텐데 복사할 위치는 아래 오른쪽 창에서 볼 수 있는 것처럼 /test 디렉토리가 될 것이다.

복사 방법은 무척 간단한데, 오른쪽 창에서는 /test 디렉토리 안으로 들어가 있는 상태에서 왼쪽 창에서 auth.log 파일을 선택한 후 f5키를 누른다. 그러면 아래와 같은 창이 뜰 것이다.

/test 디렉토리가 설정되었는지 확인 후 엔터를 누르면 복사된 것을 볼 수 있다.

또한 편집과 삭제도 쉽게 가능한데, 편집을 위해서는 f4를 누르면 다음과 같이 어떤 편집기를 사용할 지 물어보는 화면이 나오므로 자신에게 편한 것을 선택하면 된다.

삭제는 f8만 누르면 되므로 따로 사진을 싣지는 않겠다.
또한 디렉토리 생성의 경우도 f7을 누르고 새 디렉토리 이름만 정해주면 간단하게 생성이 가능하다.

4. 탭/화살표 사용법과 숨겨진 파일

4-1. 탭/화살표 사용법

지금까지는 명령어를 입력할 때 한글자 한글자 정성스럽게(?) 입력했을 것이다.
하지만 이를 매번 반복하는 것도 힘들고, 오타가 날 가능성도 있기 때문에 조금이라도 편리하게 입력할 수 있는 방법을 소개하고자 한다.
바로 tab키를 사용하면 되는데, tab키는 auto completion(자동완성) 기능을 제공한다.

less /etc/ser (tab)
less /etc/services

설명을 보는 것보다 직접 쳐보는 것이 이해하기가 쉬울 것이다.
ser만 치고 tab을 눌러도 자동으로 services까지 완성되는 것을 확인할 수 있다.
se 또는 s까지만 치면 se, s로 시작하는 파일/디렉토리를 아래와 같이 보여준다.
자동완성 기능을 통해 조금이라도 더 빠르게 작업을 할 수 있다는 점에서 익혀두면 유용한 기능이리라 생각한다.

또한 이전에 수행했던 명령을 다시 실행하고자 할 때, 명령을 다시 입력할 수도 있지만 화살표 위아래를 눌러보면 이전에 입력했던 명령들이 나오는 것을 알 수 있다.
이를 사용하면 좀 더 편하게 명령어를 새로 입력하지 않아도 이전에 했던 작업을 다시 실행할 수 있을 것이다.
추가로, 이전에 사용했던 명령들의 목록을 보고 싶다면 history명령어를 통해 볼 수 있는데, 특히 유용한 점은 grep 명령을 통해 원하는 명령어만 검색할 수 있다는 것이다.

history에서 확인한 명령을 선택해서 실행하고 싶을 때는 해당 명령을 복사, 붙여넣기 할 수도 있지만 좀 더 세련된 방법으로는 !history번호를 사용할 수 있다. 위 이미지에서 볼 수 있듯 모든 명령에는 번호가 붙으므로 느낌표+번호를 사용하면 해당 명령을 실행할 수 있다.

4-2. 숨겨진 파일

이미 우리는 ls -al로 숨겨진 파일의 목록도 포함해서 볼 수 있다는 것을 알고 있다.
home 디렉토리에서 ls -al을 입력하면 .bashrc 파일과 .bash_history 파일이 보일 것이다.
.bashrc는 bash의 설정을 담아놓은 파일이고, .bash_history는 입력한 명령어를 기록해 놓은 파일이다.
그렇다면 여기서 들 수 있는 의문은 .bash_history와 위의 history 명령어는 무슨 차이가 있는가 하는 점일 것이다.

history는 .bash_history 파일에서 데이터를 가져와 보여주는 것이 가장 큰 차이이다.
따라서 history -c를 통해 history를 지우고 history명령을 사용하면 지워져서 아무것도 보이지 않지만 .bash_history는 그대로 남아있고, 터미널을 종료 후 다시 실행해서 history를 실행하면 사용했던 명령어들이 그대로 남아있는 것을 볼 수 있다.

좋은 웹페이지 즐겨찾기