공부/linux, unix

[linux] 자주 사용하지만 헷갈리는 명령어들 - ls, ll, sudo vs su

yeonstudy 2022. 5. 25. 15:49

매일매일 리눅스를 사용하고는 있지만, 대충 어떤 명령어가 이런 뜻일거라고 어림짐작만 하고 있었지 정확한 정의를 알아보면서 사용하고 있지는 않았다. 개념을 모르는 상태에서 사용하고 있었기 때문에 헷갈리기도 했고, 매번 찾아보면서 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를 등록한다는 의미.

현재 내가 사용하고 있는 서버에는 다음과 같은 명령어들이 alias로 등록되어 있다.

 

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 명령어를 모두 사용해 보았다. 

sudo -i 명령어 입력 후 pwd 결과
sudo -s 명령어 입력 후 pwd 결과. ec2-user로 로그인 후 sudo 명령어를 사용했기 때문에 ec2-user directory에 있다.

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#