사용자와 그룹, 권한 관리
- 리눅스에서는 사용자를 여러 그룹으로 나누어 관리합니다.
- 권한 관리를 통해서 특정 사용자나 그룹이 파일이나 디렉토리에 접근할 수 있는 권한을 지정합니다.
root 사용자와 sudo
명령어
- 여러 사용자 중, 모든 권한이 있는 최상단에 있는 사용자를 root라고 합니다.
root 사용자로 변경하는 명령어. (su는 switch user라는 의미입니다.)
root 계정의 비밀번호를 모르면 사용할 수 없음
su -
- 시스템 전체 보안에 영향을 미칠 수 있는 명령어는 root가 아닌 일반 사용자는 사용할 수 없습니다.
- ex) root가 아닌 일반 사용자는 다른 user를 추가할 수가 없습니다.
- 하지만 root 계정의 비밀번호를 모르면 root 계정으로 전환할 수도 없습니다. :(
- 따라서 일반 사용자는
sudo
라는 명령어를 통해서 root 계정의 권한을 빌려 특정 명령들을 실행할 수 있습니다. sudo
명령어를 쓸 때, 시스템이 비밀번호를 요구한다면, 현재 계정의 비밀번호를 입력하면 됩니다./etc/sudoers
파일에sudo
를 쓸 수 있는 사용자와 그 명령어가 따로 정의되어 있습니다. (즉, 아무 사용자나 root 권한을 빌릴 수는 없습니다.)
리눅스의 권한 관리
- 리눅스는 3파트로 나누어서 파일 또는 디렉토리의 권한을 관리하고 있습니다.
- 소유자
- 그룹
- 그 외 사용자
ls -al
명령어를 입력하면 좌측에서 해당 파일 or 디렉토리의 접근 권한이 어떻게 되어있는지 확인 가능합니다.
하나를 예시로 보면
를 의미하는데, 각각의 파트는 r, w, x로 이뤄져있고, 3개의 비트로 각각 r, w, x 권한을 표시합니다.
- r: 읽기 권한. r 권한만 있을 시 숫자 4 (100(binary))
- w: 쓰기 권한. w 권한만 있을 시 숫자 2 (010(binary))
- x: 실행 권한. x 권한만 있을 시 숫자 1(001(binary))
예를 들어 모든 권한을 가지고 있다면 숫자 7로 표현합니다. (111(binary)
파일에 대한 권한은 소유자 권한 숫자, 그룹 권한 숫자, 그외 사용자 권한 숫자를 붙여서 3자리 수로 표현합니다.
ex) 764 -> 소유자는 rwx, 그룹은 rw, 그외 사용자는 r 권한을 가짐을 의미
권한 관련 명령어
- chmod [권한] [파일이름]
- 아주 많이 쓰이는 중요한 명령어입니다.
- ex)
chmod 764 test.sh
- ex)
chmod
u+x test.txt: 소유자에게 실행 권한 추가 - ex)
chmod
g-w test.txt: 그룹에게 쓰기 권한 뺏기 - ex)
chmod
o=r test.txt: 그 외 사용자에게 읽기 권한만 주기
- ex)
- 아주 많이 쓰이는 중요한 명령어입니다.
- chown [소유자]:[소유그룹] [파일명]
- 특정 파일의 소유자와 소유 그룹을 새롭게 부여합니다.
- ex)
chmod user2:user2 test.sh
- su [유저이름]: 현재 유저 전환
자주 사용하는 리눅스 명령어
디렉토리 관련
- pwd: 현재 위치 경로 출력
- mkdir: 새로운 디렉토리 생성
- ls: 현재 디렉토리에 있는 파일 리스트 출력
- ls -l: 자세히 출력
- ls -al: 숨김 파일까지 자세히 출력
- cd: 디렉토리 이동(change directory). 절대경로, 상대경로로 디렉토리를 이동할 수 있습니다.
- history: 지금까지 실행한 커맨드 조회
회사의 중요한 파일 rm -f로 날려버리고 안했다고 거짓말 치면 안되는 이유
파일 관련
- rm [파일 이름] : 파일 또는 디렉토리 삭제
- rm -f: 강제 삭제(지울건지 되묻지 않음)
- rm -r: 디렉토리 하위에 있는 모든 것을 재귀적으로 삭제
- cp [src] [dest] : 파일, 디렉토리를 복사
- cp -r: 디렉토리 하위의 것들을 모두 재귀적으로 복사
- mv [src] [dest]: 파일, 디렉토리를 이동. 이름 바꾸기, 잘라내기 시에 사용
- touch [파일 이름] : 빈 파일 생성
- cat [파일 이름]: 파일 전체보기
- head, tail: 파일의 위, 아래에서 10행까지 보기
찾기, 검색과 관련한 명령어
grep
- 파일 내에서 특정 패턴이나 문자열을 검색합니다.
grep [옵션] [패턴] [파일명]
- -r 옵션: 디렉토리 내 모든 파일에서 검색
- -i 옵션: 대소문자 구분 안함
- -n 옵션: 라인 수(어느 라인에 위치해있는지) 출력
ex)
현재 디렉토리에서 하위에 있는 모든 파일(하위 디렉토리도 포함) 내용 중, "hello"가 포함된 파일의 부분과 그 라인 수를 출력하기
grep -rni "hello"
grep이 유용하게 쓰이는 것은 '|'와 같이 쓰일 때입니다.
'|'는 왼쪽 커맨드를 실행한 결과를 오른쪽으로 넘기고, 그 안에서 오른쪽 커맨드를 실행한 결과를 출력하도록 합니다.
아래 예시는 현재 실행 중인 모든 프로세스 중에서, 이름에 "nginx"라는 단어가 포함된 프로세스 목록을 찾는 명령어입니다.
ex)
ps -ef | grep "nginx"
find
- 파일이나 디렉토리를 검색하여 위치를 출력합니다.
find [경로] [옵션] [행동]
- name 옵션: 파일명으로 검색
- f, -d 옵션: 파일 타입으로 검색 (파일 또는 디렉토리)
- exec, , {}:
- exec: find로 찾은 결과에 대해 실행 명령
- : exec의 종료 지점
- {}: find로 찾은 대상이 담기는 곳
ex) 현재 경로에서 이름이 ".sh"로 끝나는 파일 찾기
find . -name "*.sh"
ex) 현재 경로에서 이름이 ".sh"로 끝나는 파일 중에, 이름에 "hello"가 들어가는 파일 찾기
find . -name "*.sh" | grep "hello"
ex) 현재 경로에서 이름이 ".sh"로 끝나는 파일들 중, 그 파일의 내용 중 "hello"가 포함되어있다면 그 부분을 라인수와 함께 출력
find . -name "*.sh" | xargs grep -n "hello"
프로세스 관련 명령어
- ps -ef: 실행 중인 모든 프로세스 출력
- e 옵션: 모든 프로세스
- f 옵션: full format
- kill -9 [프로세스 아이디]: 프로세스 강제 종료
- -9 옵션: 강제 종료
- -15 옵션: 정상 종료
네트워크 관련
nslookup
특정 도메인의 IP 주소 매핑을 조회할 때 사용.
즉, 도메인을 던져주고 이 도메인의 퍼블릭 아이피가 뭐냐를 묻는 것입니다.
nslookup naver.com
ifconfig
IP 정보 등 네트워크의 설정 정보를 출력합니다.
ping [호스트네임 또는 퍼블릭 아이피]
네트워크 연결상태를 확인할 때 사용하지만, 많은 서비스가 보안상의 문제로 막아두고 있습니다.
nc -zv (netcat) 또는 telnet
nc -zv [도메인 또는 아이피] [포트번호]
위와 같은 형식으로 사용하며, 특정 아이피의 특정 포트까지 열려있는지를 확인합니다.
ex)
nc -zv naver.com 443
ssh
원격 호스트와의 터미널 세션을 제공합니다. (=다른 호스트에 원격 접속)
[유저이름]@[호스트 네임 또는 퍼블릭 아이피]
scp
원격으로 파일을 전송할 수 있는 명령어입니다.
scp [source] [destination]
Beyond SW에서 배운 내용들 중 몰랐거나 활용도가 높을 것 같은 내용을 위주로 복습해보았습니다. :)
Reference
- Beyond SW 7기 수업 및 수업 자료
'기록 > Beyond SW' 카테고리의 다른 글
Beyond SW 7기 5주차 회고록 (3) | 2024.06.18 |
---|---|
Beyond SW 7기 4주차 회고록 (6) | 2024.06.09 |
Beyond SW 7기 3주차 회고록 (7) | 2024.06.02 |
Beyond SW 7기 2주차 회고록 (8) | 2024.05.26 |
Beyond SW 7기 1주차 회고록 (4) | 2024.05.19 |