<리눅스 터미널 팁>
>(리다이렉션)
- 명령어의 출력을 파일로 저장하는 역할
- 이미 존재하는 파일의 경우 덮어쓰기하며, 새로운 파일의 경우 생성함
|(파이프)
- 명령어의 출력을 다른 명령어의 입력으로 연결하는 역할
tr
- 어떤 내용을 변환하는 명령어
- 구조: tr [target] [change]
- 주로 다른 명령어의 결과에서 변환하여 사용함
- Ex) awk '{print $1}' result.txt | tr '\n' ',' # 줄바꿈을 반점으로 변환
Version
- 프로그램 버전 확인
- 구조: [명령어/프로그램명] --version
터미널 단축키
- ctrl+shift+c: 복사
- ctrl+shift+v: 붙여넣기
- ctrl+alt+t: 터미널 켜기
- ctrl+shift+t: 새 탭 켜기
- tab: 자동 완성 기능
> 같은 이름으로 시작하는 것이 여러 개 있는 경우에는 변화 없음(이럴 경우 tab 2번 연속 누르면 모두 출력)
vi 편집기
- #vi 로 진입
- :q(종료), :q!(변경내용 저장없이 종료), :wq(변경내용 저장하고 종료)
- i, a, o 키 입력하면 입력 모드로 진입
- esc 누르면 명령 모드로 전환
- x(현재 커서 위치한 문자 삭제), dd(현재 커서 행 삭제), u(직전 명령 취소)
- 문자열 찾기 : "/" 입력하고 원하는 문자열 입력 후 엔터 -> n 눌러서 다음 찾기
RPM(Redhat Package Management)
- 프로그램 설치를 위한 패키지
- rpm 옵션 패키지명
- 옵션 : -i(패키지 설치), -U(업그레이드), -e(삭제), -q(정보 확인)
- i, U, e와 함께 사용하는 옵션 : v(상세 내용 함께 출력), h(프로세스를 #으로 표시)
- q와 함께 사용하는 옵션 : a(시스템에 설치된 전체 패키지), i(설치된 패키지)
YUM(Yellodog Updater Modified)
- RPM 기반의 자동 업데이터 및 패키지 설치 프로그램(인터넷 사용이 필수, 대신 패키지간 의존성 문제 해결)
- yum 옵션 패키지명
- 옵션 : install(설치), remove(삭제), update(업그레이드), list(목록)
tab
- 명령어 자동완성 및 도움말
- 명령어 전부 다 칠 필요없이 일부분 입력 후 tab 치기
- tab 두번 치면 일부분친 것에서 이어지는 명령어/폴더/파일 나열해줌
history
- 명령어 사용 기록
tail -f [filename]
- 실시간 로그 파일 읽기
--help
- 명령어 도움말
- 명령어 옵션을 알고 싶은 경우, 명령어 --help 입력
alias
- 별칭 지정 명령어
- 구조 : alias 명령어별칭='명령어'
ex) alias cc='clear'
- unalias 명령어별칭 #등록된 별칭 해제
- alias는 시스템(터미널) 재부팅하면 초기화 되어 재설정 필요, 영구등록하는 방법이 있음
vi /etc/bashrc #bashrc에 설정하면 영구등록 됨
alias alias 명령어별칭='명령어'
source /etc/bashrc #동기화를 위함
man
- manual의 줄임말
- 구조: man [명령어]
> 해당 명령어의 메뉴얼 확인 가능
디렉토리
- /bin: 기본 시스템 기능에 필요한 필수 바이너리 실행 파일 존재
> 모든 사용자가 사용할 수 있으며 ls, cp 및 mv와 같은 일반 명령이 포함
- /boot: 시스템 부팅에 필요한 파일 존재
> Linux 커널, 초기 RAM 디스크(initrd) 및 GRUB와 같은 부트 로더 구성 파일이 포함
- /dev: 시스템의 다양한 하드웨어 장치를 나타내고 이에 대한 액세스를 제공하는 장치 파일 존재
> 디스크 드라이브, USB 장치 및 터미널은 이 디렉토리에서 파일로 표시
- /etc: 시스템 전반에 걸친 구성 파일 존재
> passwd, shadow, group, default, login 등 포함
- /home: 일반 사용자의 홈 디렉터리 역할
- /lib 및 /lib64: 시스템 및 다양한 응용 프로그램에 필요한 필수 공유 라이브러리 및 커널 모듈 존재
- /media: CD, DVD 및 USB 드라이브와 같은 이동식 미디어 장치의 마운트 지점
- /mnt: /media와 마찬가지로 파일 시스템 또는 장치의 임시 마운트 지점
- /opt: 선택적 소프트웨어 또는 시스템에 설치된 타사 응용 프로그램 존재
- /proc: 런타임 시스템 정보를 포함하는 가상 파일 시스템 존재
> 시스템 프로세스 정보, 하드웨어 구성 및 커널 관련 정보 포함
- /root: 루트 사용자의 홈 디렉토리
- /sbin: 시스템 유지 관리 작업을 위해 시스템 관리자가 주로 사용하는 시스템 바이너리 존재
- /srv: 시스템에서 제공하는 특정 서비스에 대한 데이터 파일을 저장하는 데 사용
> 웹 서버, FTP 서버 및 기타 네트워크 서비스에서 데이터를 저장하는 데 자주 사용
- /tmp: 임시 파일의 위치
> 재부팅 후에도 지속할 필요가 없는 임시 데이터를 저장하는 데 사용
- /usr: 대부분의 사용자 관련 프로그램, 라이브러리 및 문서 존재
> 사용자 바이너리의 경우 /usr/bin, 사용자 라이브러리의 경우 /usr/lib, 여러 응용 프로그램에서 사용되는 공유 데이터의 경우 /usr/share 등 포함
- /var: 시스템 운영 중 자주 변경되는 변수 데이터 파일을 저장하는 디렉터리
> 로그 파일, 스풀 디렉터리, 캐시된 데이터 및 크기나 내용이 다를 수 있는 기타 파일 포함
<네트워크 명령어>
ifconfig
- 네트워크 구성 정보 확인 명령어
- 인터페이스 구성 확인
> ifconfig : 활성화된 인터페이스 구성 확인
> ifconfig -a : 모든 인터페이스 구성 확인
> ifconfig [인터페이스명] : 해당 인터페이스 확인
* lo, eth1 등(네트워크 인터페이스 이름), flags(인터페이스 상태), inet(인터페이스에 할당된 IP 주소), netmask(넷마스크 주소), broadcast(브로드캐스트 주소), ether(인터페이스 MAC 주소)
- 인터페이스 활성화/비활성화
> ifconfig [인터페이스명] up/down
> flag 변화 확인 가능
- 인터페이스 IP/MAC/netmask/broadcast 변경
> ifconfig [인터페이스명] [IP/MAC]
> ifconfig [인터페이스명] netmask [넷마스크]
> ifconfig [인터페이스명] broadcast [주소]
- Windows에서는 ipconfig
ping
- 네트워크 호스트 또는 IP 주소의 도달 가능성 및 왕복 시간(RTT)을 테스트할 때 사용하는 명령어
- 대부분의 운영체제에서 사용 가능
- ICMP 프로토콜을 사용하여 Echo Request 메시지를 대상 호스트에게 보내고 Echo Reply 메시지를 수신
- 패킷 IP 헤더에 TTL(Time-to-Live) 값 포함
> 패킷이 폐기되기 전에 통과할 수 있는 최대 네트워크 홉 수
> 패킷이 네트워크에서 무한 순환되는 것 방지하기 위함
> 유닉스 계열 225, 윈도우 계열 128이며 TTL 값이 라우터 지날때 마다 1씩 감소
- 호스트 사이 거리 구하기
> (윈도우의 경우)128 - TTL = 라우터 개수
> 라우터 개수가 적은 곳이 더 가깝다는 걸 알수 있음
dig
- DNS 정보 확인 명령어
- 구조 : dig [도메인]
- 짧은 답변 얻으려면 dig [도메인] +short
tcpdump
- 네트워크 인터페이스를 거치는 패킷들의 헤더 확인 명령어
- 구조 : tcpdump [옵션] [expression] [host]
- 옵션 : -A(패킷 내용을 ASCII로 출력), -c(주어진 수의 패킷 받은 후 종료), -D(가능한 인터페이스 목록 출력), -i(인터페이스 지정), -w(캡쳐한 패킷을 분석하여 출력하는 대신 파일에 저장)
- 출력 결과: <패킷 수집 시간> <출발지 IP 및 포트번호> <목적지 IP 및 포트번호> <flag> <윈도우 사이즈> ...
- Ex)
> tcpdump -i any host 8.8.8.8
> tcpdump -i any src 8.8.8.8 and tcp port 80
- Windows에서는 windump 명령어 존재
ss
- 네트워크 소켓 정보 확인 명령어
- 구조 : ss [옵션]
- 옵션 : -a(모든 소켓 표시), -n(DNS명이 아니라 IP주소로 표시), -t(TCP 소켓), -u(UDP 소켓)
- netstat와 비슷한 기능을 하지만 ss 명령어 사용을 추천
- Ex)
> ss -an | grep [포트번호] #특정 포트번호가 열려있는지 확인
netstat
- 현재 시스템(PC)의 네트워크 연결 정보를 보여주는 명령어
- 네트워크 연결 상태, 라우팅 테이블, 네트워크 통계 등 정보 확인 가능
- 다양한 운영체제에서 사용 가능
- 옵션: -a(모든 연결 및 수신 대기 포트 출력), -f(외부 주소 FQDN 형태로 출력), -e(이더넷 통계 출력), -i(도움말), -n(주소 및 포트번호를 숫자로 출력), -r(라우팅 정보·경로 테이블 출력), -s(프로토콜별 통계 출력)
traceroute
- 패킷이 목적지까지 도달하는 동안 거치는 라우터 IP 확인할 때 사용하는 명령어
- 네트워크 문제 해결, 네트워크 정체 진단, 네트워크 성능 문제 식별 가능
- 다양한 운영체제에서 사용 가능
> Unix 계열에서는 traceroute(UDP 사용), Windows에서는 tracert(ICMP 사용)
- 응답시간이 *로 표시되는 경우 IPS 등에서 UDP 패킷 차단됨
- 우연히 도달하는 것 방지하기 위해 3번 통신 시도
- 결과로 출력되는 첫번째 숫자는 TTL 값 의미
- 옵션: -m(최대 홉 수 또는 TTL 값 지정)
netcat(nc)
- 네트워크 연결을 생성하고 데이터 전송하는 데 사용
- 네트워크 테스트 수행하는 유용한 도구
- 구조: nc [옵션] [IP주소/도메인] [포트번호]
- 옵션: -l(리스닝 모드로 실행하여 서버 역할을 수행), -p(포트번호와 함께 사용하여 특정 번호로 연결 설정), -u(UDP 프로토콜 사용), -v(자세한 출력), -z(포트 스캐닝 수행)
- Ex) nc localhost 9999 # 9999 열린포트로 연결
<프로세스 관련 명령어>
ps
- 프로세스 확인 명령어
- 구조 : ps [옵션]
- 옵션 : -A(모든 프로세스), -a(현재 실행 중인 프로세스), -e(프로세스 실행 환경), -u(프로세스 사용자 및 시간), -x(다른 사용자가 실행한 완료되지 않은 프로세스 포함), -f(한줄씩 출력)
- 주로 사용되는 옵션은 -aux, -ef, -A
top
- 프로세스별 CPU, Memory 상태 확인
kill
- 현재 실행 중인 프로세스 종료 명령어
- 구조 : kill [옵션] [PID]
<디렉터리/파일 관련 명령어>
디렉토리/파일 권한
- 권한 : r 읽기(4), w 쓰기(2), x 실행(1)
- 권한은 소유자(Owner) 그룹(Group) 기타사용자(Others) 순서로 기재
- 파일 권한은 최대 666, 디렉토리는 최대 777
> 실행 권한은 디렉토리로 이동할 수 있는지 여부
- SetUID(SUID): 4000, SUID 설정된 파일 실행 시 일시적으로 파일 소유자(Owner)의 권한으로 실행함
- SetGID(SGID): 2000, SGID 설정된 파일 실행 시 일시적으로 그룹(Group)의 권한으로 실행함
- Ex) chmod 4755 passwd.txt 등으로 사용됨
pwd
- 현재 디렉터리 절대경로 확인 명령어
cd
- 디렉터리 내 이동 명령어
- 구조 : cd [이동경로]
- Ex)
> cd .. #상위 디렉터리로 이동
> cd . #현재 위치로 이동(새로고침)
> cd - #이전 위치 폴더로 이동
> cd / #루트 디렉터리로 이동
> cd ~ #홈 디렉터리로 이동
> cd test #현재 디렉터리 내 test 디렉터리로 이동
> cd /test #test 디렉터리로 이동
ls
- list의 줄임말
- 디렉터리/파일 확인 명령어
- 구조 : ls [옵션] [디렉터리/파일명]
- 옵션 : -a(숨김파일 포함), -l(상세정보 출력), -s(파일크기 순으로 정렬), -h(파일크기를 단위 사용하여 출력)
- [파일타입 파일권한 링크수 소유자 소유그룹 파일사이즈 마지막수정날짜 파일명]
- 파일타입 : -(일반파일), d(디렉터리), l(링크), s(소켓) 등
- 자주 쓰는 옵션: ls -alh [디렉토리명]
mkdir
- 디렉터리 생성 명령어
- 구조 : mkdir [디렉터리명]
- mkdir [디렉터리명1] [디렉터리명2] 와 같이 여러개 생성 가능
touch
- 파일 생성, 날짜, 시간 변경 명령어
- 구조 : touch [옵션] [파일명]
- 옵션없이 사용할 경우 서버의 현재시간으로 변경됨
- 기재한 이름의 파일이 존재하지 않을 경우, 크기가 0인 파일 생성
- 옵션 : -m(서버시간으로 변경), -t(yyyymmdd 형식으로 파일 날짜 수정)
rmdir
- 디렉터리 삭제 명령어
- 구조 : rmdir [디렉터리명]
- rmdir보다 rm -r로 디렉터리 및 내부 파일 완전 삭제함
rm
- 디렉터리/파일 삭제 명령어
- 구조 : rm [옵션] [디렉터리/파일]
- 옵션 : -f(오류 메시지 없이 강제 삭제), -r(디렉터리 내부 모든내용과 함께 삭제), -d(비어있는 디렉터리만 삭제)
cp
- 디렉터리/파일 복사 명령어
- 구조 : cp [옵션] [복사할 디렉터리/파일] [대상 디렉터리/파일]
- 옵션 : -a(원본 파일의 속성 유지하며 복사), -f(복사할 대상이 이미 있으면 강제 삭제 후 복사)
mv
- 디렉터리/파일 이동 명령어
- 구조 : mv [옵션] [이동할 디렉터리/파일] [대상 디렉터리/파일]
- 옵션 : -f(강제 이동), -b(같은 이름 존재하면 기존 파일 백업 후 이동)
- 같은 디렉터리 내에서 파일 이동시 이름 변경이 이루어짐
cat
- 파일 내용 전체 확인 명령어
- 구조 : cat [파일명]
- cat [파일명1] [파일명2]로 여러 파일 출력 가능
find
- 디렉터리/파일 검색 명령어
- 구조 : find [옵션] [경로] [표현식]
- 옵션 : P, L, H, D #옵션은 아직 안써봤다.
- 경로 : 상대경로, 절대경로 모두 가능, 현재 위치에서 검색하고자 한다면 . 잊지말기
- 표현식 : -name(명으로 검색), -type(타입으로 검색), -size(파일크기로 검색), -exec(찾은 파일에 대해 특정 명령어를 실행)
- exec 구조: -exec [명령어] {} \;
> {}는 find에 의해 찾은 파일을 의미, ;는 exec 종료를 의미, \는 ; 이스케이프를 위해 사용
- Ex) find . -name "*red*"
> 현재 디렉터리에서 red가 포함되는 파일찾기
- Ex2) find . -name "*.txt"
> .txt 확장자 찾기
- Ex3) find / -name "flag.txt" 2>/dev/null
> Permission denied를 제외한 나머지 출력
- Ex4) find / -type f -perm -4000 -exec ls -h {} \; 2>/dev/null
> type이 파일이면서 권한이 SUID(4000)이 설정된 파일을 출력
- Ex5) find / -type f -perm -4000 -exec /bin/bash -p ;
> SUID 권한 취약점을 이용하여 취약한 실행 파일에서 root 권한 획득
grep
- 파일 패턴 검색 명령어
- 구조 : grep [옵션] [패턴] [파일명 또는 경로]
- 옵션 : -i(대소문자 구별하지 않고 검색), -r(디렉토리 내 파일 재귀적으로 검색), -v(패턴과 일치하지 않는 줄만 출력), -o(패턴과 일치하는 부분만 출력), -l(패턴과 일치하는 파일명만 출력) 등
- Ex)
> grep 'red' text1 #text1 파일에서 red 문자열 검색
> grep 'red' * #현재 디렉터리 내 모든 파일에서 red 문자열 검색
> grep [a-k] text2 #text2 파일에서 a,b,...,k로 시작하는 단어 모두 검색
> grep -ir "hello" /home/*.txt #홈디렉토리 및 하위 디렉토리에서 txt 파일 내 hello 검색
* 패턴은 일반 텍스트 또는 정규 표현식으로 지정 가능
chmod
- 파일 허가권 변경 명령어
- 구조 : chmod [숫자 또는 기호 문자] [파일명]
- 권한 : r(4), w(2), x(1)
- Ex)
> chmod 644 text1.txt #사용자는 읽기, 쓰기 가능하고 그룹 및 다른 사용자는 읽기만 가능
> chmod u=rw text2.txt #사용자의 권한을 읽기, 쓰기 권한으로 설정
> chmod g-w text3.txt #그룹 권한에서 쓰기 제거
> chmod o+rw text4.txt #다른 사용자 권한에서 읽기, 쓰기 추가
* 권한에 대한 부가 설명은 위 디렉터리/파일 권한에서 자세히 확인하기
chown
- 파일 사용자 및 그룹 소유권 변경 명령어
- 구조 : chown [사용자명]:[그룹명] [파일명]
- 그룹명 없이 사용자명만 기재할 경우 사용자 소유권만 변경
chgrp
- 그룹 소유권 변경 명령어
- 구조 : chgrp [그룹명] [파일명]
umask
- 새로 생성되는 파일/디렉터리 허가권 지정 명령어
- umask #접속한 계정의 umask 확인 가능
- vi /etc/profile #umask 확인 및 편집 가능
file
- 파일의 유형 및 속성 확인하는 명령어
- 구조 : file [옵션] [파일 또는 디렉터리명]
- 옵션 : -b(간단한 형식으로 출력), -z(압축된 파일 내용 출력)
- Ex) file test.raw
> test.raw: ELF 64-bit ~~~ #해당 파일 형식이 ELF인 것을 확인
wget
- 인터넷에서 파일 다운로드하는 명령어
- 구조: wget [options] [URL]
- 옵션: -O(파일을 저장할 경로 및 이름 지정), --limit-rate(다운로드 속도 제한)
- Ex) wget github.~~ #깃허브에서 파일 다운로드
strings
- 이진 파일에서 문자열 추출하는 명령어
- 구조: strings [options] [filename]
- 옵션: -n(최소 길이 지정)
- Ex) strings test.raw > test.txt #결과를 txt파일에 저장
- Ex2) strings -n 20 flag
base64
- 텍스트나 이진 파일을 base64 형식으로 인코딩 또는 디코딩하는 명령어
- 구조: base64 [options] [filename]
- 옵션: -d(디코딩)
- Ex) base64 test.txt
> test.txt를 인코딩한 값 출력
- Ex2) base64 test.txt >> test2.txt
> test.txt를 인코딩한 값을 test2.txt 파일에 저장
- Ex3) echo "abcdefg" | base64
> 문자열 인코딩값 출력
- Ex4) echo "YWJjZGVmZwo=" | base64 --decode
> 문자열 디코딩값 출력
awk
- 원본 문서에서 특정 패턴 검사한 후 원하는 값을 얻을 때 사용하는 명령어
- 구조: awk '패턴 {명령어}' 파일명
- 패턴: 행을 선택하기 위한 조건 지정(패턴 생략시 모든 행)
- 명령어: 선택된 행에 대해 명령어 수행(여러 개의 명령어는 ; 로 구분)
- Ex) awk -F'/' '{print $1} 파일명
scp(Secure Copy Protocol)
- SSH 기반으로 안전하게 파일이나 디렉토리를 로컬 시스템과 원격 서버 간에 복사하는 명령어
- 구조: scp [옵션] [소스] [대상]
- 옵션: -r(디렉토리 재귀적 복사), -P(특정 포트 사용하여 SSH 연결)
- 원격서버 파일을 로컬로 복사: scp [username]@[IP 또는 호스트이름]:/path/file.txt /local/destination
- 로컬 파일을 원격서버로 복사: scp /local/file.txt [username]@[IP 또는 호스트이름]:/path/destination
<계정 확인 명령어>
whoami
- 현재 내가 로그인한 사용자 확인 명령어
- 구조 : whoami
id
- 현재 내가 로그인한 사용자의 UID, GID, 그룹 정보 확인 명령어
- 구조 : id
users
- 현재 호스트(시스템)에 로그인한 사용자 확인 명령어
- 구조 : users
who
- 호스트에 로그인한 사용자 정보 자세히 확인 명령어
- 구조 : who [옵션]
- 옵션 : -b(마지막 시스템 부팅 시간 출력), -m(호스트명과 사용자만 출력), -s(이름, 행, 시간 정보만 출력), -t(마지막으로 변경한 시스템 시간 출력)
※ 계정 전체 확인하고자 할 때는 /etc/passwd 확인
hostname
- 현재 사용하고 있는 호스트 이름 확인 명령어
uname
- 현재 사용하고 있는 운영체제 확인 명령어
- Ex) uname -a #운영체제, 호스트이름 등 확인
<사용자 환경설정 파일 종류>
/etc/passwd
- 사용자 계정 아이디, 비밀번호, 그룹정보 등 계정 정보
- [계정명:비밀번호:UID:GID:주석:홈디렉터리:쉘]
/etc/shadow
- 암호화된 비밀번호, 정책 설정 정보
- [계정명:비밀번호:마지막 변경일:최소사용일:최대사용일:만료경고일:유예기간:만료일]
- shadow 활성화/비활성화(pwconv/pwunconv)
> pwconv: /etc/passwd 방식을 /etc/shadow로 변환해줌
- 두번째 필드 분석
> $6$CWA90qcuqNsVFrEw$NvfCN4S1iJH
> 첫번째 $항은 해시암호 알고리즘 종류 -> $6 ($1 : MD5, $5 : SHA256, $6 : SHA512)
> 두번째 $항은 Salt 값 -> $CWA90qcuqNsVFrEw
> 세번째 $항은 암호화된 비밀번호 -> $NvfCN4S1iJHbRfgDGrzaFGOxVJ0jv0
> ! or !! : 계정에 비밀번호가 설정되어 있지 않아 잠가놓은 상태
> * : 이 계정을 통해서 아예 로그인을 할 수 없음을 의미
> 빈 값 : 비밀번호 없이 로그인을 할 수 있는 상태를 의미
/etc/group
- 그룹 정보
- [그룹명:비밀번호:GID:그룹 내 사용자목록]
/etc/gshadow
- 그룹의 암호화된 비밀번호 정보
- [그룹명:비밀번호:그룹관리자:그룹 내 사용자목록]
/etc/default/useradd
- 계정 생성 시 기본적으로 적용되는 사용자 정보
- useradd -D로 내용 확인 가능
/etc/login.defs
- 로그인 시 적용되는 기본 정보
- 비밀번호 최소사용일, 최대사용일, 만료경고일 존재
/etc/skel
- 홈디렉터리 생성 시 기본으로 제공할 파일
<사용자 계정 관리 명령어>
sudo(super user do)
- super user(root)의 권한 필요할 때 사용
- root 계정 접속하여 처리할 수 있지만 안전을 위해 일반 계정에서 sudo로 처리
- sudo 명령어
- 사용자 계정 만들기 : sudo useradd -m 사용자명
#sudo useradd로 사용자 만들면 권한 추가하기 전까지는 해당 계정에서 sudo 명령어 사용 불가
- 사용자 비밀번호 설정 : sudo passwd 사용자명
- vi /etc/sudoers #여기서 User privilege specification을 수정하면 사용자 권한 추가 가능
- 옵션 -l: 현재 사용자의 권한 확인을 위해 사용(sudo 사용 가능한 명령어 확인)
> Ex) sudo -l
> (root) NOPASSWD: /bin/find
> 현재 사용자는 sudo find 명령어를 비밀번호 입력 없이 사용 가능하다.
su
- 계정 전환 명령어
- 구조 : su [옵션] [계정명]
- Ex)
> su - #root 사용자 전환
useradd
- 계정 생성 명령어
- 구조 : useradd [옵션] [계정명]
- 옵션 : -u(UID 할당), -g(GID 할당), -d(홈 디렉터리 경로 지정, 홈디렉터리 생성하고자 하면 -m 옵션 같이 사용), -e(YYYY-MM-DD 형식으로 계정 만료일 지정), -D(사용자 생성 시 사용하는 기본값 확인), -c(주석 추가)
- Ex)
> useradd -d /home/abc -m redstone #abc 디렉터리 생성해주며 redstone 라는 계정 생성
> useradd -D #사용자 생성 시 사용하는 기본값 확인, 해당 정보는 /etc/default/useradd 파일 내용 보여줌
userdel
- 계정 삭제 명령어
- 구조 : userdel [옵션] [계정명]
- 옵션 : -r(홈디렉터리도 같이 삭제), -f(오류 무시 강제 삭제)
usermod
- 계정 설정 변경 명령어
- 구조 : usermod [옵션] [계정명]
- 옵션 : -u(UID 변경), -g(GID 변경), -l(계정명 변경), -d(홈디렉터리 변경)
passwd
- 계정 비밀번호 설정 명령어
- useradd로 계정 생성 시 비밀번호 없으므로 passwd로 비밀번호 설정하기
- 구조 : passwd [옵션] [계정명]
- 옵션 : -S(계정 상태 표시), -d(계정의 비밀번호 삭제), -l(Lock 상태로 변경), -u(Lock 상태 해제), -e(계정 비밀번호 만료)
- 계정 상태 : PS(정상), NP(비밀번호 없음), LK(Lock 상태)
chage
- 비밀번호 유효기간 설정 명령어
- 구조 : chage [옵션] [계정명]
- 옵션 : -l(계정의 비밀번호 만료 정보 확인), -m(비밀번호 최소 사용기간 설정), -M(비밀번호 최대 사용기간 설정), -E(계정 만료일 지정)
- 비밀번호 정책 변경
> /etc/login.defs 파일 수정
<그룹 관리 명령어>
groups
- 사용자 그룹 확인
- 한 사용자가 여러 그룹에 속할 수 있으므로 해당 사용자가 포함된 그룹을 나열
- 구조 : groups [계정명]
groupadd
- 그룹 생성 명령어
- root 또는 sudo 권한 있는 사용자만 새 그룹 생성 가능
- 구조 : group [옵션] [그룹명]
- 옵션 : -f(오류 메시지 표시하지 않고 명령 완수), -g(특정 GID 할당), -o(g와 함께 사용하며 중복 GID 할당 가능), -r(시스템 그룹 생성시 사용, 500번 이하 값 지정)
groupdel
- 그룹 삭제 명령어
- 그룹 안에 계정이 존재하는 경우 삭제되지 않음
groupmod
- 그룹 설정 변경 명령어
- 구조 : groupmod [옵션] [계정명]
- 옵션 : -g(GID를 변경, -o와 함께 사용하여 중복 설정 가능), -n(그룹명을 변경, -n 새로운그룹명 기존그룹명)
<재부팅, 종료 명령어>
halt
- 시스템 종료 명령어
- 구조 : halt [옵션]
- 일반적으로 옵션 없이 사용됨
- 옵션 : -f(시스템 강제 종료)
reboot
- 시스템 재부팅 명령어
- 구조 : reboot [옵션]
- 일반적으로 옵션 없이 사용됨
- 옵션 : -f(시스템 강제 재부팅)
shutdown
- 시스템 종료 및 재부팅 명령어
- 구조 : shutdown [옵션] [시간]
- 옵션 : -h(종료), -r(재부팅), -c(예약된 shutdown 명령 취소)
- Ex)
> shutdown -h now #바로 시스템 종료
> shutdown -h 10 #10분 후 종료
> shutdown -h 15:10 #15시 10분에 종료
※ 윈도우에서의 shutdown
- 옵션 : -s(종료), -r(재부팅), -t(시간), -a(예약된 shutdown 명령 취소)
- 즉시 종료 : shutdown -s -t 0
init
- 시스템 런레벨 지정
- 구조 : init [런레벨]
- 런레벨 : 0(종료), 6(재부팅)
<입출력 관련 명령어>
표준 출력 재지정
- 명령 실행 결과를 화면에 출력하지 않고 파일에 저장
- > 연산자 : text1 > text2 #text1에서 출력하는 것을 text2에 기록(파일 덮어씀)
- >> 연산자 : text3 >> text4 #text3에서 출력하는 것을 text4에 이어서 기록(이어쓰기)
<기타>
systemctl
- systemd를 관리하는 명령어
- /usr/lib/systemd/system 디렉터리의 .service 파일을 제어 가능
- 옵션 : start(시작), stop(중지), restart(재시작), enable(부팅 시 자동실행), disable(부팅 시 자동실행x), list(목
록), status(상태 확인)
hostnamectl
- OS 정보, Kernel 버전 등 확인 가능
- Kernel 버전 확인은 uname -a 로도 가능
arp
- arp 테이블 설정하고 확인하는 명령어
- 경로는 /sbin/arp
- 구조 : arp [옵션]
- 옵션 : -v(arp 상태 출력), -a(등록된 모든 호스트 출력), -a [특정호스트](특정 호스트 내용 출력), -d [특정호스트](특정호스트 삭제), -s [MAC주소](MAC주소 추가)
bg, fg, jobs, kill
- bg : Foreground 작업을 Background에서 실행하는 명령어
- fg : Background 작업을 Foreground에서 실행하는 명령어
- jobs : 백그라운드 작업들과 상태를 나타내는 명령어
- 백그라운드에서 작업 실행하려면 명령어 뒤에 & 붙이면 됨
ex) cp ~/play/over.zip /home/public/over.zip &
- Foreground 작업 진행 중 오래 걸리고 다른 작업 실행하고자 하면,
1) 실행 중인 상태에서 Ctrl + Z 눌러서 우선 멈추고
2) jobs 명령어로 ID값 확인
3) bg %1 #여기서 1은 작업 ID값
- 작업 끝내고자 하면 kill %작업ID
- 또는 killall [프로세스명]
gzip, gunzip, zcat
- gzip : 파일 압축 명령어(gz로 압축됨)
1) 구조 : gzip [옵션] [파일명]
2) 옵션 : -d(파일 압축 해제), -l(압축된 파일 정보 출력), -t(압축 파일 검사), -v(압축 정보 출력)
ex) gzip test.txt
- gunzip : gz로 압축된 파일 압축을 푸는 명령어
1) 구조 : gunzip [파일명]
- zcat : gz로 압축된 파일 내용 출력하는 명령어
1) 구조 : zcat [파일명]
bzip2, bunzip2, bzcat
- bzip2 : 파일 압축 명령어(bz로 압축됨)
1) 구조 : bzip2 [옵션] [파일명]
2) 옵션 : -d(파일 압축을 해제), -l(압축된 파일 내용 출력), -t(압축 파일 검사), -v(압축 정보 출력)
ex) bzip2 test.txt
- bunzip2 : bzip2로 압축된 파일 압축을 푸는 명령어
1) 구조 : bunzip2 [파일명]
- bzcat : 압축된 파일 내용 출력하는 명령어
1) 구조 : bzcat [파일명]
xz, unxz
- xz : 파일 압축 명령어(xz로 압축됨)
- unxz : 압축 해제 명령어
zip, unzip
- zip : 파일 압축 명령어(zip로 압축됨)
- unzip : 압축 해제 명령어
tar
- 파일 아카이브를 만들거나 풀기 위해 사용되는 명령어
* 아카이브: 여러 파일과 디렉터리를 하나의 파일로 묶는 역할
- 구조: tar [옵션] [파일명]
- 옵션: -cvf(아카이브 생성 모드, 자세한 출력, 파일 지정), -xvf(아카이브 풀기 모드)
compress, uncompress
- 파일 압축 및 해제 명령어(z로 압축됨)
cal
- 달력을 출력하는 명령어
- 구조 : cal [옵션] [원하는 달] [원하는 연도]
- 옵션 : -j(1월 1일부터 날짜 수 계산하여 출력), -y(올해의 달력을 출력)
- 옵션 없이 cal 입력하면 현재 달 출력
lsattr, chattr
- lsattr : 디렉터리 또는 파일 속성 확인하는 명령어
1) 구조 : lsattr [파일명]
- chattr : 디렉터리 또는 파일 속성 설정하는 명령어
1) 구조 : chattr [+/-/= 속성] [파일명]
2) +는 속성 추가, -는 속성 제거, =는 해당 속성 제외 나머지 속성 제거
- 속성 종류 : a(파일 쓰는건 가능하지만 삭제 불가), e(파일이 디스크 블록에 매핑되어 있음), i(파일 수정 불가), ...
chsh
- 사용자의 쉘 설정 변경하는 명령어
- chsh #대화형으로 쉘 변경
- chsh -s [변경할 쉘 설정] #대화형이 아닌 한 줄로 변경
- chsh -l #사용 가능한 쉘 종류 확인, cat /etc/shells와 동일
cmp
- 두 파일을 바이트 단위로 비교하여 출력하는 명령어
- 구조 : cmp [옵션] [파일1] [파일2]
- 옵션 : -b(두 파일 간 다른 바이트 출력), -l(틀린 문자 갯수 출력), -s(종료 코드만 출력, 0:파일같음, 1:파일다름, 2:파일접근불가), -v(버전 정보 출력)
comm
- 두 파일을 행 단위로 비교하여 차이점을 출력하는 명령어
- 구조 : comm [옵션] [파일1] [파일2]
- 옵션 : -1(첫번째 파일에만 있는 행 출력하지 않음), -2(두번째 파일에만 있는 행 출력하지 않음), -3(두 파일 모두에 있는 행 출력하지 않음)
diff
- 두 파일을 비교하여 차이점 출력하는 명령어
- 구조 : diff [옵션] [파일1] [파일2] 또는 diff3 [옵션] [파일1] [파일2] [파일3]
- 옵션 : -c(두 파일간 차이점 출력), -d(차이점 상세출력), -r(두 디렉터리간 차이점 출력), -i(대소문자 차이 무시), -w(모든 공백 차이 무시), -s(같을 때 알림)
cut
- 파일에서 특정 필드 추출하는 명령어
- 구조 : cut [옵션] [파일명]
- 옵션 : -b(바이트 기준), -c(문자 기준), -d(지정한 문자를 구분자로 사용), -f(필드 기준)
ex) cut -c 1-3 test.txt #각 라인의 1번째 문자부터 3번째 문자까지 출력
date
- 시스템의 날짜를 출력하거나 변경하는 명령어
- 구조 : date "속성"
- 속성 : %Y(YYYY 년도), %y(YY 년도), %m(월), %d(일), %H(24시간), %l(12시간), %M(분), %S(초), %p(오전/오후)
ex) date "+%Y-%m-%d %H:%M:%S"
df
- 시스템에 마운트된 하드디스크 사용량 확인하는 명령어
- df -h #디스크 사용량 점검, 보기 좋게 출력됨
du
- 디렉터리 기준으로 디스크 사용량 확인하는 명령어
- du -h
edquota
- 사용자와 그룹에 대해 쿼터를 설정하고 변경하는 명령어
- 구조 : edquota [옵션]
- 옵션 : -u(사용자에 대한 쿼터 설정), -g(그룹에 대한 쿼터 설정), -p(특정 사용자의 쿼터를 다른 사용자에게 동일하게 적용)
eject
- DVD나 CD-ROM 등 미디어를 해제하고 장치 제거하는 명령어
- 구조 : eject [옵션]
- 옵션 : -n(eject하지 않고 장치만 찾기), -r(eject CD-ROM), -d(디폴트 장치 찾기), ...
env
- 환경변수에 대한 정보를 출력하는 명령어
mii-tool
- 네트워크 인터페이스의 속도, 전송모드 등을 확인하는 명령어
- mii-tool -v #보다 상세한 상태 확인
- mii-tool -w #실시간 연결 상태 확인
ex) mii-tool -v [특정 인터페이스] #특정 인터페이스의 상태 확인 가능
ethtool
- 네트워크 인터페이스의 물리적 연결 상태를 확인하는 명령어
- 구조 : ethtool [옵션]
- 옵션 : -s(설정 값 변경), -S(인터페이스 통계 정보 출력), -i(드라이버 정보), ...
ex) ethtool [인터페이스명] #해당 인터페이스에 대한 정보
ethtool -s speed [숫자] duplex full #스피드 값 변경
fdisk
- 파티션을 생성, 수정, 제거 및 파일 시스템 유형을 지정하는 명령어
- 구조 : fdisk [옵션] [장치명]
- 옵션 : -l(현재 파일 시스템과 파티션 정보 출력), -s(지정된 파일 시스템 크기를 블록 단위로 출력)
fsck
- 파일 시스템 무결성 점검과 오류 복구하는 명령어
- 구조 : fsck [옵션] [장치명]
- 옵션 : -A(/etc/fstab 파일에 지정된 파일 시스템 검사), -a(검사 후 복구 여부 묻지 않고 자동 복구), -r(검사 후 복구 여부 묻기), -t(파일 시스템 유형 지정), -R(-A와 같이 사용하면 루트 파일 시스템 제외한 모든 파일 시스템 검사)
mkfs
- 파일 시스템 생성하는 명령어
- 구조 : mkfs [옵션] [파일 시스템 유형] [장치명]
- 옵션 : -c(파일 시스템 불량 블록 검사), -t(파일 시스템 유형 지정), -v(작업 과정 출력)
- mke2fs : mkfs의 확장버전
free
- 메모리 사용량과 남은 용량 확인하는 명령어
- free -h #읽기 쉽게 출력