[linux] 자주 사용하지만 헷갈리는 명령어들 - ls, ll, sudo vs su
매일매일 리눅스를 사용하고는 있지만, 대충 어떤 명령어가 이런 뜻일거라고 어림짐작만 하고 있었지 정확한 정의를 알아보면서 사용하고 있지는 않았다. 개념을 모르는 상태에서 사용하고 있었기 때문에 헷갈리기도 했고, 매번 찾아보면서 CLI를 쓸 수도 없으니 정확하게 공부할 겸 정리를 위해 글을 작성하기로 했다.
1. ls
ls [OPTIONS] [FILES]
- 'list'의 줄임말. 현재 디렉토리의 목록을 출력하는 기능을 함.
- 다양한 옵션들이 있지만, 가장 많이 사용하는 옵션은 -a, -l
- -a 옵션: 숨겨진 파일, 디렉토리를 포함하여 출력.
- -l 옵션: long listing의 줄임말. 현재 디렉토리의 목록을 상세하게 출력함.
- -al 옵션: -a 옵션 + -l 옵션. 숨겨진 파일, 디렉토리를 포함하여 현재 디렉토리의 목록을 상세하게 출력함
2. ll
- ls -l 옵션의 줄임말. 공식적인 줄임말은 아니고 암묵적으로 모든 개발자가 쓰는 줄임말인 것으로 보인다.
- 학부 시절에 리눅스를 써보기는 했지만 한 두시간 정도의 실습 정도였고 ... 리눅스를 매일 쓰게 된 것은 입사하고 난 이후이다. 사수님이 ll 옵션을 자주 사용하셔서 어깨 너머로 저게 리스팅 명령어구나 하고 대충 사용해왔음... 리눅스를 공부하기 시작한 후 이게 정식 명령어가 아니라는 것을 알게 되었다. (다른 환경에서 ll을 사용하려고 하니 먹히지 않았음 😅) 아마 사수님이나 다른 분들이 ll 옵션을 미리 등록해둔 듯 하다... 이는 alias 명령어로 등록할 수 있다.
alias # 등록되어 있는 alias 정보 조회 가능
alias [option] [name]='[value]'
alias ll='ls -l --color=auto' # ll 이라는 명령어에 ls -l --color=auto를 등록한다는 의미.
3. sudo vs su
- sudo: superuser do (이후에는 subtitude user do로 변경) 의 줄임말. 로그아웃 하지 않고 다른 사용자의 권한을 빌려 shell을 사용할 수 있게 함. 파라미터가 없으면 root가 된다.
- -i 옵션: run login shell as the target user; a command may also be specified. 로그인 사용자를 대상 사용자로 실행함과 동시에 명령어도 사용할 수 있음. 보통 파라미터를 넣지 않고 사용하기 때문에 root로 shell을 실행하고, working directory도 /root가 된다. 계정 자체가 관리자로 바뀐다고 생각하면 편하다.
- -s 옵션: run shell as the target user; a command may also be specified. 대상 사용자로 shell을 실행함. -s 옵션을 사용할 때에도 보통 파라미터를 넣지 않기 때문에 root로 shell을 실행하게 된다. 하지만 working directory는 바뀌지 않음.
- su: subtitute user의 줄임말. 로그아웃 하지 않고 다른 사용자의 권한으로 전환.
- 이 명령어도 마찬가지로 .. 공부도 안 한 상태에서 사수님을 막 따라하다 보니 superuser 정도의 줄임말인 줄 알았다. 정확히는 su 명령어는 파라미터가 없을 경우 root 권한이 되기 때문에 뭐 어떻게 보면 superuser...가 맞긴 하다... 🙃
- - 옵션: 위에서 언급한 alias까지 모두 가져오면서 실행함.
sudo, su 명령어 중 자주 쓰이는 옵션들까지 정리하면 다음과 같다.
sudo # parameter 계정의 권한을 빌림.
sudo -i # parameter 계정으로 아예 로그인. 보통 parameter 계정 없이 사용하기 때문에 root 로그인과 동일.
sudo -s # parameter 계정으로 전환. working directory는 바뀌지 않기 때문에 로그인이라고 볼 수는 없음.
su # parameter 계정으로 전환. 보통 parameter 없이 사용하기 때문에 su root와 동일.
su - # parameter 계정으로 전환 + parameter 계정의 환경변수 적용.
현재 내가 사용하고 있는 서버에서 sudo -i, sudo -s 명령어를 모두 사용해 보았다.
working directory 차이가 있는 걸 확인할 수 있다. 보통 sudo 명령어를 사용하는 경우는 일반 계정에서는 접근할 수 없는 파일이나 디렉토리를 root 권한 획득 후 사용하기 위함이기 때문에, 해당 경우에 -i나 -s 옵션의 차이는 없다. 하지만 working directory 차이가 있다는 것을 인지하고는 있어야 한다는 생각이 든다. (내가 이를 오용하고 있었기 때문에 ... )
sudo, su 관련 구글링을 하며 공부하다 좋은 글을 발견해서 링크를 걸어둔다. 내가 가지고 있던 대부분의 궁금증이 이 글을 보면서 해소되었다. 역시 구글과 스택오버플로우 없이는 아무것도 못 하는 몸.. https://unix.stackexchange.com/questions/35338/su-vs-sudo-s-vs-sudo-i-vs-sudo-bash#