====== 알아두면 유용한 리눅스 명령어 모음 ======
* description : 알아두면 유용한 리눅스 명령어 모음
* author : 치킨5분컷
* email : hgkim@repia.com
* firstupdate : 2022-12-12 Mon
* lastupdate : 2022-12-12 Mon
====== 리눅스 명령어 ======
====리눅스의 기본 명령어 구조====
* [명령어][옵션][인자]가 기본 구조
* 옵션이 (-옵션, --옵션, 옵션) 3가지로 나누어짐
확인해본 결과 (약어 사용 vs 풀네임 사용)
"-" : short option style
"--" : long option style
===== find 사용방법(find [옵션] [경로] [표현식]) =====
find . -name "*log*" - 현재 위치에서 log가 들어가는 파일 모두 찾기)\\
(Log뒤 한칸 뛰고 2> /dev/null 입력시 에러 로그는 터미널에 출력되지 않도록 만들 수 있음 ex.권한획득 불가로인한 오류 표시 삭제)\\
**1.경로**\\
* 상대경로, 절대경로 모두가능. 경로 인자값을 생략한다면 현재 위치(.)를 입력받은것으로 간주\\
**2.표현식**\\
* name : 해당 이름의 파일을 찾음. 해당 이름에는 정규 표현식을 활용할 수 있음(가장 많이 쓰는 표현식)\\
^ find - name 사용 예 ^ 명령어 ^ 명령어 역할 ^
| [NAME]이 포함되는 파일 찾기 | find . -name "test" | 현재 디렉토리에서 test가 포함되는 파일 찾기 |
| 확장자가 .txt인 파일 모두 찾기 | find . -name "*.txt" | 현재 디렉토리에서 .txt 확장자 모두 찾기 |
| 확장자가 .txt인 파일 검색 후 모두 삭제 | find . -name "*.txt" -delete | 현재 디렉토리에서 .txt 확장자 파일 검색 후 모두 삭제 |
| [NAME]으로 시작되는 파일 찾기 | find . -name "test*" | 현재 디렉토리에서 test로 시작되는 파일 찾기 |
| [NAME]으로 끝나는 파일 찾기 | find . -name "*test" | 현재 디렉토리에서 test로 끝나는 파일 찾기 |
* type:지정된 파일 타입에 해당하는 파일 검색(d : 디렉토리, f : 일반적인 파일, l : 심볼릭 링크)
^ find - type 사용 예 ^ 명령어 ^ 명령어 역할 ^
| 디렉토리만 찾기 | find . -type d | 현재 디렉토리에서 모든 디렉토리 찾기 |
| [NAME]으로 시작하는 디렉토리 모두 찾기 | find . -name " test*" -type d | 현재 디렉토리에서 test가 들어가는 디렉토리 찾기 |
| 파일 검색 후 모두 삭제 | find . -type f | 현재 디렉토리에서 모든 파일 찾기 |
* user : 해당 유저에게 속한 파일 검색
^ find - user사용 예 ^ 명령어 ^ 명령어 역할 ^
| [USERNAME]에 속한 파일 검색 | find . -user hgkim | hgkim이라는 유저에게 속한 모든 파일 찾기 |
* empty : 빈 디렉토리 혹은 크기가 0인 파일 검색(b : 블록단위, c : byte, k : kbyte)
^ find - empty 사용 예 ^ 명령어 ^ 명령어 역할 ^
| 디렉토리만 찾기 | find . -type d | 현재 디렉토리에서 모든 디렉토리 찾기 |
| [NAME]으로 시작하는 디렉토리 모두 찾기 | find . -name " test*" -type d | 현재 디렉토리에서 test가 들어가는 디렉토리 찾기 |
| 파일 검색 후 모두 삭제 | find . -type f | 현재 디렉토리에서 모든 파일 찾기 |
* delete : 검색된 파일 혹은 디렉토리 삭제
^ find - delete 사용 예 ^ 명령어 ^ 명령어 역할 ^
| [FILENAME]에 해당하는 파일이나 크기가 0인 파일 삭제 | find . -name "test*" -empty -delete | 현재 디렉토리에서 test가 들어가는 빈 디렉토리이거나 크기가 0인 파일 검색하여 삭제 |
* exec : 검색된 파일에 대해 지정된 명령 실행
^ find - exec 사용 예 ^ 명령어 ^ 명령어 역할 ^
| [FILE]중 [조건내용]이 들어가는 파일의 상세정보 출력 | find . -name "test*" -exec ls -l {} \; | 현재 디렉토리에 "test"가 들어가는 파일을 찾아서 상세정보 출력 |
| [FILE]중 [조건내용]이 들어가는 디렉토리 모두 찾기 | find . -type f -exec grep "test" {} \; | 현재 디렉토리에 있는 파일중 "test"가 들어가는 내용 찾기 |
| [파일확장자]에 해당하는 파일 모두 삭제 | find . -name ".txt" -exec rm {} \; | 현재 디렉토리에 ".txt" 확장자를 찾아서 모두 삭제 |
* size : 파일 크기를 사용하여 파일 검색
^ find - size 사용 예 ^ 명령어 ^ 명령어 역할 ^
| 현재 디렉토리에서 특정크기인 파일 검색 | find . -size 1024c | 현재 디렉토리에서 1024byte인 파일 검색 |
| 현재 디렉토리에서 특정크기보다 큰 파일 검색 | find . -size +1024c | 현재 디렉토리에서 1024byte보다 큰 파일 검색 |
| 현재 디렉토리에서 특정크기보다 작은 파일 검색 | find . -size -1024c | 현재 디렉토리에서 1024byte보다 작은 파일 검색 |
| 현재 디렉토리에서 특정크기보다 크고 10kb보다 작은 파일 검색 | find . -size +1k -size -10k | 현재 디렉토리에서 1kb보다 크고 10kb보다 작은 파일 검색 |
=====(|파이프)를 이용한 find 응용 방법=====
| 파이프라인이란 명령어1 | 명령어2 형태로 명령어1의 처리결과를 명령어2로 전달하는것
^ find //|// 사용 예 ^ 명령어 ^ 명령어 역할 ^
| find를 이용하여 특정 확장자 지우기 | find . -name '*.mp3' //|// xargs rm | 확장자가 mp3인것을 찾아 지우기 |
| find를 이용하여 숨겨진 파일을 찾기 | find . -name ".*" -print //|// more | 숨겨진 파일을 찾아 more상태로 목록 출력 |
| find를 이용하여 특정크기 이상인 파일 정보출력 | find . -size +100k //|// xargs ls -l | size가 100k 이상인 파일 정보를 리스트로 출력 |
| find를 이용하여 변경시간이 특정일 이상인 파일 삭제 | find . -type f -ctime +7 //|// xargs rm -f | ctime이 +7인 파일을 찾아 지우기 |
| 디렉토리 밑으로 파일을 찾고 그 파일 내용에 특정 단어가 있는지 검색 | find /home -name "*.php" //|// xargs egrep -s "ftp” | /home 밑으로 확장자가 php인 파일의 내용에 ftp가 있는 파일 찾기 |
=====grep 사용방법 ([옵션] [패턴(단어)] [파일명] =====
* 단어 내에 공백이 있을 경우에는 " "를 사용
^ grep 사용 예 ^ 명령어 ^ 명령어 역할 ^
| 대상 파일에서 문자열 검색 | grep "STR" [FILE] | [FILE]에서 “STR” 문자열 검색 |
| 현재 디렉토리 모든 파일에서 문자열 검색 | grep "STR" * | 현재 디렉토리 모든파일에서 “STR”검색 |
| 특정 확장자를 가진 모든 파일에서 문자열 검색 | grep "STR" *.ext | .ext 확장자를 가진 파일중 “STR” 검색 |
| 단어(Word) 단위로 문자열 검색 | grep -w "STR" [FILE] | [FILE]에서 “STR”이라는 문자열(단어 단위) 검색 |
| 검색된 문자열이 포함된 라인 번호 출력 | grep -n "STR" [FILE] | "STR"이 포함된 라인 번호 출력 |
| 0-9 사이 숫자만 변경되는 패턴 찾기 | grep "STR[0-9]" [FILE] | FILE에서 STR0~STR9에 해당하는 패턴 찾기 |
^ 옵션 ^ 옵션 역할 ^
| -r | 하위 디렉토리까지 검색 |
| -l | 패턴이 포함된 파일의 이름 출력 |
| -w | 패턴이 전체 단어와 일치하는 행만 출력 |
===== cat 사용법(cat [옵션] 파일명 =====
*텍스트 파일시 정상 출력, 바이너리 파일일 경우 확인 불가
^ cat 사용 예 ^ 명령어 ^ 명령어 역할 ^
| 파일열기 | cat test1.txt | test1.txt를 화면에 출력(vi편집기랑은 다름)\\ 결과화면\\ test1\\ test2 |
| 특정 확장자를 가진 파일 내용 출력 | cat *.txt | |
| 각 행에 번호 붙여 출력 | cat -b test1.txt | 1행 test1\\ 2행 test2 |
| 빈행에도 번호 붙여 출력 | cat -n test1.txt | 1 test1\\ 2 test2\\ 3 |
| 서로 다른 파일 내용 연속출력 | cat FILE1 FILE2 | |
=====tail 사용법(tail [옵션] 파일명)=====
* 입력파일의 마지막 10줄을 출력하는데 로그파일의 모니터링 용도로 사용 가능
^ tail 사용 예 ^ 명령어 ^ 명령어 역할 ^
| 파일의 마지막 10 줄 출력 | tail [FILE].log | [FILE].log를 화면에 출력(vi편집기랑은 다름)\\ 내용10\\ …\\ 내용1(최신) |
| 파일의 마지막 10줄을 실시간으로 출력 | tail -f [FILE].log | 마지막 10줄을 실시간 출력 |
| 원하는 라인의 수 만큼 출력 | tail -n 20 [FILE].log | 내용20\\ ….\\ 내용 1 |
=====vi/vim 사용TIP=====
* vi/vim 이란 리눅스 편집기를 말함
^ vi/vim 사용예 ^ 사용법 ^
| 라인 출력 | :set nu |
| 현재 커서에 있는 글자 바꾸기 | r키 |
| insert모드로 변경 | i키 |
| 블록지정 | v키+드래그 |
| 복사 | y키 |
| 라인복사 | yy |
| 라인복사 후 붙여넣기(yy이용한것만 가능) | p키 |
| ctrl+z 대신 사용 | u키 |
| vim편집 사용중 :/{찾을 키워드} 찾을때 키워드 단위 이동 | n키 |
=====alias 사용법(alias [명령어 별칭]=’[명령어]’) =====
* Alias는 명령어를 간소화하여 다른 이름으로 사용할 수 있도록 해주는 쉘내부 명령어
^ alias 사용예 ^ 명령어 ^ 명령어 역할 ^
| 현재 등록되어 있는 별칭 보기 | alias | 등록되어 있는 별칭 확인 |
| 해당 경로 바로가기 | alias rsa=’cd /opt/search/RSA/bin’ | rsa입력시 해당경로로 바로이동 |
| 매번 반복되는 데이터 백업(tar)을 쉽게 하기 | alias backup='tar czvf webS_backup.tar.gz /var/www/html’ | backup입력시 해당 경로에 있는 디렉토리를\\ webS_backup.tar.gz 로 백업 |
| 패키지 설치 간단하게 바꾸기 | alias yum=’yum -y install’ | yum [패키지명] 만으로 간단하게 설치 가능 |
| alias 명령어 삭제 | unalias [alias명] | alias 삭제 |
=====sed 사용법(sed [옵션] 파일명)=====
* 문자열을 치환하거나 삭제할때 유용하게 사용할 수 있는 명령어
^ sed 사용예 ^ 명령어 ^ 명령어 역할 ^
| 문자열 치환 | sed 's/원본문자열/바꿀문자열/g' 파일명 | |
| 특정 파일의 문자열을 변경 | sed 's/lim/kim/g' text ← kim/g | text파일에 lim이라는 문자열을 kim으로 변경 |
| 특정 파일의 치환한 내용을 지정한 파일에 저장 | sed 's/lim/kim/g' text > new-text | text 파일의 치환한 내용을 new-text에 저장 |
| d명령 : 삭제 | sed /man/d 파일명 | 지정 파일에 man이 포함된 줄 삭제 |
| s명령 : 치환 | sed 's/man/girl/g' 파일명 | 지정 파일에 man을 girl로 치환 |
=====tar 사용법(tar [옵션] 파일명)=====
* tar는 여러 개의 파일을 하나의 파일로 묶거나 풀 때 사용하는 명령어
^ tar 사용예 ^ 명령어 ^ 명령어 역할 ^
| 현재 디렉토리의 모든 파일과 디렉토리를 tar로 묶기 | tar cvf T.tar * | T.tar라는 이름으로 모든 파일과 디렉토리 묶기 |
| 파일을 지정하여 tar 아카이브로 묶기 | tar cvf T.tar FILE1 FILE2 | FILE1,2라는 파일을 지정하여 T.tar라는 이름으로 묶기 |
| tar 아카이브를 현재 디렉토리에 풀기 | tar xvf T.tar | T.tar를 현재 디렉토리에 풀기 |
| tar 아카이브를 지정된 디렉토리에 풀기 | tar xvf T.tar -C [PATH] | T.tar를 PATH에 해당하는곳에 풀기 |
| tar 아카이브의 내용을 확인 | tar tvf T.tar | T.tar의 내용을 확인 |
| gzip으로 압축된 tar 아카이브를 현재 디렉토리에 풀기 | tar zxvf T.tar.gz | T.tar.gz을 현재 디렉토리에 풀기 |
| 특정 디렉토리를 제외하고 압축하기 | tar cvfz T.tar.gz --exclude "제외할 디렉토리" "압축할 디렉토리" | 제외할 디렉토리를 빼고 압축할 디렉토리만 골라 T.tar.gz으로 압축하기 |
=====xargs 사용법(xargs [옵션] 디렉토리)=====
* 다양한 파일 목록을 추출해서 삭제, 복사 등 이런 작업을 단순하게 진행할 수 있게 도움을 주는 명령어
^ xargs 사용예 ^ 명령어 ^ 명령어 역할 ^
| 특정 디렉토리 아래 특정 파일을 찾아 삭제 | find /opt -name search -type d -print //|// xargs rm -rf | search라는 이름의 폴더를 찾아 목록을 출력후 삭제 |
| ls를 이용하여 특정 확장자를 모두 읽어와 하나의 파일로 병합 | ls *.txt //|// xargs cat >> abc.txt | txt확장자를 모두 찾은후 abc.txt라는 파일을 화면에 출력 |
| 디렉토리에서 특정 확장자를 찾은 다음\\ 특정 이름을 포함하는 파일을 찾기 | find ~/ -type f //|// grep -H “*.txt$” //|// xargs grep -H “abcd” | 타입이 파일인것중 확장자가 txt인것을 찾고\\ 그중 abcd라는 내용을 포함하는 파일명 찾기 |
| 파일안에 url이 있을 경우 해당 인자들을 모두 wget으로 넘겨 다운 | cat url-list.txt //|// xargs wget -c | url-list.txt를 화면에 출력후 url이 있을경우 해당\\ 인자를 모두 wget으로 넘겨받음 |
| 특정 확장자를 찾아 tar.gz로 압축 | find / -name “*.jpg” -type -f -print //|// xargs tar -cvzf images.tar.gz | 모든 jpg파일을 찾아 images.tar.gz로 압축 |
^ 옵션 ^ 옵션 역할 ^
| - a | 표준 입력 대신 파일에서 항목을 읽음 |
| - O | 공백이나 특수문자를 찾을때 사용 |
| - d | 입력된 문자를 그대로 사용(따음표, 백슬래쉬 같은 특수문자) |
| - n | 지정된 숫자만큼 행을 출력 |
| - p | 사용자에게 각 명령 행을 실행할지 여부와 터미널에서 행을 읽는거에 대한 여부 확인 |
| - s | 한 라인에 들어갈 수 있는 문자열 수를 지정 |
| - x | -s 로 지정한 크기가 초과되면 종료 |
| —show-limits | xargs의 버퍼 크기 선택 및 -s 옵션에 대한 길이 제한을 출력 |
=====crontab 사용법(crontab [옵션] 경로+파일명)=====
* 서버 스스로 정해둔 명령을 일정 기간마다 실행하도록 하는 것
^ crontab 사용예 ^ 명령어 ^
| crontab 작업 리스트 보기 | crontab -l |
| crontab 모든 작업 삭제 | crontab -r |
| crontab 작성 | crontab -e |
| 매분 test.sh 을 수행 | * * * * * /home/user/test.sh |
| 매주 일요일 23시 55분에 수행 | $ 55 23 * * 0 /home/user/test.sh |
| backup crontab | 50 23 * * * crontab -l > /home/bak/crontab_bak.txt |
| 5월 17일 오후 3시 23분에 해당 스크립트를 돌리라는 명령 | 23 15 17 5 * source /home/dlit/work/pred_batch.sh |
=====chkconfig 사용법(chkconfig 데몬 --[옵션])=====
* 부팅시에 자동으로 스크립트 실행을 통해 특정 데몬의 시작 여부를 결정할 수 있는데, 이를 간편하게 제어할 수 있도록 제공되는 명령어
^ chkconfig 사용예 ^ 명령어 ^
| 부팅시 자동 실행되는 데몬들을 확인 | chkconfig --list |
| del 옵션을 통해 sshd의 자동부팅 서비스 해제 | chkconfig sshd --del |
| add 옵션을 통해 sshd의 자동부팅 서비스 등록 | chkconfig sshd --add |
| level 옵션을 통해 데몬의 원하는 레벨을 다룰 수 있음 | chkconfig --level 3 sshd on |
=====rpm 사용법(rpm[옵션] 패키지이름)=====
* 주의 - 패키지 삭제시는 패키지 파일(패키지.rpm)이 아니라 패키지 이름을 사용해야함
^ rpm 사용예 ^ 명령어 ^
| 전체목록 확인 | rpm –qa |
| RPM 설치 | rpm -ivh 패키지명 |
| 패키지 설치 확인 | rpm -qa //|// grep 패키지명 |
| 패키지 제거 | rpm -ev 패키지이름 |
| 업그레이드 | rpm -Uvh 패키지명 |
| 파일이 속한 패키지 찾기 | rpm -qf 파일 |
| 내부 파일 목록 보기 | rpm -ql 설치된패키지명 |
| 내부 설정파일 확인 | rpm -qc 설치된패키지명 |
| 설치된 패키지 상세 정보 확인 | rpm -qi 패키지이름 |
^ 옵션 ^ 옵션 역할 ^
| -U | 설치되어있는 패키지 업그레이드 하는 옵션 |
| -v | 진행 과정 확인하는 옵션 |
| -e | 패키지 삭제 옵션 |
| -h | 진행과정을 '#' 기호로 화면에 출력하는 옵션 |
| -q | 패키지 정보 확인 옵션 |
| -a | 시스템에 설치 된 전체 패키지 정보 확인 |
| -i | 설치 된 패키지의 정보 확인 |
=====yum사용법(yum [옵션] 패키지이름)=====
* rpm 기반의 시스템을 위한 자동 업데이터 이자 패키지 설치/ 삭제 도구
^ yum 사용예 ^ 명령어 ^ 명령어 역할 ^
| 패키지를 최신 버전으로 업데이트 | yum update | yum 업데이트 |
| 모든 패키지 목록을 보기 | yum list | yum으로 설치 가능한 패키지 목록 확인 |
| 특정 패키지와 관련된 패키지를 검색 | yum search http | http과 관련된 패키지를 검색 |
| 패키지 이름에 특정 이름을 포함하고 있는 것을 검색 | yum list *http* | 설치 가능한 패키지 목록중 \\ http 이름을 가진 패키지 목록 확인 |
| 특정 패키지의 정보 보기 | yum info httpd | httpd 패키지의 정보 보기 |
| 특정 패키지 업그레이드 | yum upgrade httpd | httpd 패키지 업그레이드 |
| 특정 패키지 여러개 설치하기 | yum install httpd php | httpd와 php 설치하기 |
| 특정 패키지 여러개 삭제하기 | yum erase httpd php | httpd와 php 삭제하기 |
^ 옵션 ^ 옵션 역할 ^
| -i | 패키지 설치 |
| -U | 업그레이드 |
| --version | -버전확인 |
| -h | 명령어의 도움말 보여줌 |
| -y | 모든 물음에 예를 진행 |
| -q | 모든 작업이 종료 |
| -skip-broken | 문제 있는 패키지는 자동으로 스킵 |
| -t | 에러를 자동으로 잡아서 설치 |
=====systemctl 사용법(systemctl [옵션] 디렉토리)=====
* RHEL 7에 도입된 systemd를 관리하는 명령어 - systemctl 옵션 서비스명. service(.service는 생략 가능)
* CentOS systemctl 과 service 명령어 차이점
* 같은 동작을 수행하지만 CentOS6버전 이하에서 service구문으로 사용. 이상은 systemctl
* 기존 명령어와 비교 표
^ service 명령어 ^ systemctl 명령어 ^ 명령어 역할 ^
| service name start | systemctl start name.service | 서비스 시작 |
| service name stop | systemctl stop name.service | 서비스 중지 |
| service name restart | systemctl restart name.service | 서비스 재시작 |
| service name condrestart | systemctl try-restart name.service | 서비스가 구동중이었을 경우에만 재시작 |
| service name reload | systemctl reload name.service | 설정 재구동 |
| service name status | systemctl status name.service | 서비스 구동 여부 확인 |
| service name --status-all | systemctl list-units --type service -all | 모든 서비스의 상태 표시 |
=====chmod 사용법(chmod [OPTION] [MODE] [FILE])=====
* 파일의 권한을 변경할 수 있게 만들어주는 명령어로 **ch**ange와 **mod**e의 앞 글자를 조합한 이름
^ 옵션 ^ 옵션 역할 ^
| -v | 모든 파일에 대해 모드가 적용되는 진단(diagnostic) 메시지 출력 |
| -f | 에러 메시지 출력하지 않음 |
| -c | 기존 파일 모드가 변경되는 경우만 진단(diagnostic) 메시지 출력 |
| -R | 지정한 모드를 파일과 디렉토리에 대해 재귀적으로(recursively) 적용 |
^ 문자열 ^ 문자열 역할 ^
| u,g,o,a | 소유자(u), 그룹(g), 그 외 사용자(o), 모든 사용자(a) 지정 |
| +,-,= | 현재 모드에 권한 추가(+), 현재 모드에서 권한 제거(-), 현재 모드로 권한 지정('=') |
| r,w,x | 읽기 권한(r), 쓰기 권한(w), 실행 권한(x) |
| X | "디렉토리" 또는 "실행 권한(x)이 있는 파일"에 실행 권한(x) 적용 |
| s | 실행 시 사용자 또는 그룹 ID 지정(s). "setuid", "setgid" |
{{:wiki:os:chmod_예.png?600|}}
^ chmod 명령어 ^ 명령어 역할 ^
| chmod g+x FILE | 파일이 속한 그룹 이 실행 할 수 있는 권한 추가 |
| chmod a=r FILE | 시스템의 모든 사용자가 읽을 수만 있는 권한 지정 |
| chmod go-rwx FILE | 파일을 소유한 그룹과 그 외 사용자의 모든 권한 제거 |
| ls -l | 파일의 현재 권한을 확인 가능 |
파일 또한 디렉토리 권한 확인(ls -l)
{{:wiki:os:chmod_예_2_.png?600|}}
^ chmod 명령어 ^ 명령어 역할 ^ chmod 명령어 ^ 명령어 역할 ^
| chmod u+x FILE | 파일 소유 사용자에게 실행권한 추가 | chmod ug=rw FILE | 파일 소유 사용자와 그룹이 읽기, 쓰기 가능 |
| chmod u+w FILE | 파일 소유 사용자에게 쓰기 권한 추가 | chmod g=rw,o=r FILE | 파일 소유 그룹은 읽기, 쓰기 가능, 그 외 사용자는 읽기만 가능 |
| chmod u=rwx FILE | 파일 소유 사용자에게 읽기, 쓰기, 실행 권한 지정 | chmod ug=rw,o=r FILE | 파일 소유 사용자 및 그룹은 일기, 쓰기 가능, 그외 사용자는 읽기만 가능 |
| chmod u-x FILE | 파일 소유 사용자의 실행 권한 제거 | chmod 664 FILE | 사용자(읽기+쓰기), 그룹(읽기+쓰기), 그외 사용자(읽기) |
| chmod g+w FILE | 파일 소유 그룹에 쓰기 권한 추가 | chmod 755 FILE | 사용자(읽기+쓰기+실행), 그룹(읽기+실행), 그외 사용자(읽기+실행) |
| chmod g-x FILE | 파일 소유 그룹의 실행 권한 제거 | chmod 777 FILE | 모든 사용자에 모든 권한 추가 |
| chmod o=r FILE | 파일 소유 사용자 및 그룹을 제외한 사용자는 읽기만 가능 | chmod -R g+x DIR | DIR 디렉토리 하위 모든 파일 및 디렉토리에 그룹 실행(x) 권한 추가 |
| chmod a-x * | 현재 디렉토리의 모든 파일에서 모든 사용자의 읽기 권한 제거 | chmod -R o-wx * | 현재 디렉토리의 모든 파일에서 그외 사용자의 쓰기, 실행 권한 제거 |
| chmod a-w FILE | 모든 사용자에 대해 쓰기 권한 제거 | chmod -R a-x,a+X * | 현재 디렉토리 기준 모든 파일 읽기 권한 제거, 디렉토리 실행 권한 추가 |
| chmod u=rwx,g=r FILE | 파일 소유 사용자는 모든 권한, 그룹은 읽기만 가능 | chmod -R a-x+X * | 위(chmod -R a-x,a+X *)와 동일 |
=====chown 사용법(chown [옵션] [소유자].[그룹] [파일 및 디렉토리]) =====
* 파일이나 디렉터리의 소유자와 그룹을 변경하는 명령어
^ 옵 션 ^ 옵션 역할 ^
| -c | 수정된 파일들만 자세하게 표시해주는 옵션 |
| -t | 간략히 표시해주는 옵션 |
| -v | 작업 진행 상태를 자세하게 표시해주는 옵션 |
| -R | 지정한 디렉토리 포함하여 하위파일까지 변경할 경우 사용되는 옵션 |
^ 명령어 ^ 명령어 역할 ^
| chown [소유자].[소유그룹] [파일이름] 또는 chown [소유자]:[소유그룹] [파일이름] | 소유자와 소유 그룹을 동시에 변경 |
| chown member1 test.cnf | test.cnf 파일에 대해 소유자를 member1로 바꿈 |
| chown :member1 test.cnf | test.cnf 파일에 대해 그룹명을 members1로 바꿈 |
| chown member1: test.cnf | test.cnf 파일에 대해 소유자 및 그룹명을 members1로 바꿈 |
| chown member1:member2 test.cnf | test.cnf 파일에 대해 소유자는 member1, 그룹명은 member2로 바꿈 |
=====file 사용법(file [옵션] [파일명])=====
* 리눅스 명령어 file은 파일의 종류 확인 및 파일 속성 값을 확인할때 사용하는 명령어
^ 옵션 ^ 옵션 역할 ^
| -C | 매직파일의 포맷을 검사하는 옵션 |
| -f | 많은 파일을 한번에 확인하기 위한 파일리스트를 만들어서 여러개의 파일을 한번에 할때 사용되는 옵션 |
| -m | 매직파일을 지정하는 옵션 |
| -z | 압축된 파일에 사용되는 옵션 |
| -L | 심볼릭 링크의 사용되는 옵션 |
=====wc 사용법(wc [옵션] [파일이름])=====
* wc 명령어는 특정 파일내에서 존재하는 바이트(Bytes)수, 단어(Words)수, 행(Lines)수를 카운트하여 화면에 출력해 주는 명령어. 옵션을 사용하지 않고 사용할 경우 [행(Lines)수] [단어(Words)] [문자] [파일명] 순으로 출력
^ 옵션 ^ 옵션 역할 ^
| -c | 바이트의 수(파일크기)를 출력하는 옵션 |
| -l | 행의 개수를 출력하는 옵션 |
| -w | 단어의 개수를 출력하는 옵션 |
=====split 사용법(split [옵션] [파일이름] [분할된 분할 파일 이름_])=====
* 큰파일을 여러 작은 파일로 나눌때 사용한다. 로그가 계속 쌓여 커지는 환경에서 파일을 분리해주는 SPLIT 명령어는 유용!!
^ 옵션 ^ 옵션 역할 ^ 명령어 ^ 명령어 결과 ^
| -a | 분할되는 파일뒤에 붙을 길이를 지정 | split -a 3 tree tree_ | tree(원본파일)4MB\\ tree_aab-2MB\\ tree_aac-2MB |
| --additional-suffix | 분할파일 자릿수 뒤에 확장자 설정 | split --additional-\\ suffix=.txt tree tree_ | tree(원본)\\ tree_aa.txt\\ tree_ab.txt |
| -b | 분할되는 기준을 바이트 크기로 분할 | split -b 1 tree tree_ | tree_aa\\ tree_ab\\ tree_ac\\ tree_ad |
| -c | 라인을 기준으로 지정 바이트가 넘지 않도록 파일을 분할 | split -C 50000 tree tree_ | |
| -d | 분할 파일이름뒤에 영문이 아닌 숫자로 지정 | split -d tree tree_ | tree_00\\ tree_01 |
| -numeric-suffixes | d 옵션과 동일하지만 시작값을 지정 | split --numeric-\\ suffixes=90 tree tree_ | tree_90\\ tree_91 |
| -l | 라인수 기준으로 파일을 분할 | split -l 1500 tree tree_ | tree_aa |
| -n | 파일을 균등하게 1/N 나누어 분할 | split -n 4 tree tree_ | tree_aa~ad |
=====man 사용법(man [옵션] [섹션번호] command)=====
* 각종 명령어, 프로그램의 사용법(매뉴얼)을 확인을 위한 명령어
^ 옵션 및 섹션 ^ 옵션 및 섹션 역할 ^
| -k | 키워드를 포함하는걸 찾기 |
| -s, -S | 특정 section을 지정할 때 사용 |
| man | man 명령어의 매뉴얼 페이지를 출력. |
| man1 | 실행가능한 프로그램 혹은 쉘 명령어 |
| man2 | 시스템 호출 |
| man3 | 라이브러리 호출 |
| man4 | 스페셜 파일(장치, 장치 드라이버, Socket, /dev 디렉토리에 있는 형식과 관련된 규약 등) |
| man5 | 파일 포맷과 컨벤션 (예를 들어 /etc/passwd의 데이터 구성은 어떻게 되어 있다.. 등) |
| man6 | Games |
| man7 | Miscellanea (리눅스 시스템 파일 관련 표준, 규칙, 프로토콜, 시그널 목록 등) |
| man8 | 시스템 관리자를 위한 명령어 |
| man9 | 리눅스 커널 루틴 |
=====top(table of processes) 사용법=====
* 리눅스 시스템의 운용상황을 실시간으로 전반적인 상황을 모니터링하거나 프로세스 관리를 할 수 있는 유틸리티
* 시스템의 상태를 전반적으로 가장 빠르게 파악 가능(CPU, Memory, Process)
* 옵션 없이 입력하면 interval 간격(기본 3초)으로 화면을 갱신하며 정보를 보여줌
* ps와 top의 차이점
* ps는 ps한 시점에 proc에서 검색한 cpu 사용량
* top은 proc에서 일정 주기로 합산해 cpu 사용율 출력
* - 세부 정보 필드별 항목
^ 필드 ^ 역할 ^ 필드 ^ 역할 ^
| PID | 프로세스 ID (PID) | SHR | 분할된 페이지, 프로세스에 의해 사용된 메모리를 나눈 메모리의 총합 |
| USER | 프로세스를 실행시킨 사용자 ID | S | 프로세스의 상태 [ S(sleeping), R(running), W(swapped out process), Z(zombies) ] |
| PRI | 프로세스의 우선순위 (priority) | %CPU | 프로세스가 사용하는 CPU의 사용율 |
| NI | NICE 값. 일의 nice value값. 마이너스를 가지는 nice value는 우선순위가 높음 | %MEM | 프로세스가 사용하는 메모리의 사용율 |
| VIRT | 가상 메모리의 사용량(SWAP+RES) | TIME+ | 프로세스 시작된 이후 경과된 총 시간 |
| RES | 현재 페이지가 상주하고 있는 크기 | COMMAND | 실행된 명령어 |
* top 실행 후 사용할 수 있는 옵션
^ 옵션 ^ 역할 ^ 옵션 ^ 역할 ^
| shift + t | :실행된 시간이 큰 순서로 정렬 | -P | 지정된 프로세스 ID들만 보여줌 |
| shift + m | 메모리 사용량이 큰 순서로 정렬 | -i | 좀비(zombie) 또는 Idle 상태의 것들은 무시됨 |
| shift + p | cpu 사용량이 큰 순서로 정렬 | space bar | 새로고침 |
=====ssh 사용법=====
* 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜
* 셸로 원격 접속을 하는 것이므로 기본적으로 CLI 상에서 작업을 하게 되고, 기본 포트는 22번
* 주요 기능과 특징
* 보안 접속을 통한 rsh, rcp, rlogin, rexec, telnet, ftp 등을 제공
* IP spoofing (IP스푸핑, 아이피 위/변조 기법중 하나)을 방지하기 위한 기능을 제공
* X11 패킷 포워딩 및 일반적인 TCP/IP 패킷 포워딩을 제공
* 서버와 클라이언트 사이에 로그인하지 않고도 scp(원격복사 기능)를 통해 파일을 복사 할 수 있음
* 주요 명령어와 사용예
^ 명령어 ^ 명령어 역할 ^
| ssh [호스트명 or ip주소] | ssh를 사용할 때 현재 사용중인 계정으로 다른 시스템에 접속을 시도하게 됨 |
| ssh [계정명]@[호스트이름] | 클라이언트와 서버의 계정이 다를 때 계정이름을 명기하는 방법임 |
| ssh 호스트네임 명령 | 원격으로 서버의 프로그램만 사용할 때, 접속하진 않고 명령만 내릴때 사용 |
| ssh user@192.168.1.10 | user라는 계정으로 192.168.1.10 서버에 접속을 시도 |
| ssh -p 180 192.168.1.10 | 기본포트는 22번 이지만 180번 포트로 192.168.1.10 서버에 접속을 시도 |
| | |
=====sftp 사용법=====
* FTP의 형태를 가지고 있지만 그 안에 내용물은 SSH를 이용해서 연결을 하는 것이 바로 sftp
^ 명령어 ^ 명령어 의미 ^
| sftp [계정명]@[ip주소][파일경로] | 서버에 해당 계정을 이용해 파일을 클라이언트 측으로 가져오기 가능 |
| sftp -P [포트번호] [계정명]@[ip주소][파일경로] | 특정 포트로 접속하여 서버에 해당 계정을 이용해 파일을 클라인트 측으로 가져오기 가능 |
| sftp> get [파일이름] | 특정 파일 다운로드 |
| sftp> get [다운받을경로] ex)get /home/pi/picture/a.png | 특정 경로로 파일을 다운로드 |
| sftp> put [파일이름] | 특정 파일 업로드 |
| sftp> get -r file_name | 파일이 아닌 폴더를 업로드 및 다운로드 하고 싶은 경우 |
=====scp 사용법=====
* 원격지에 있는 파일과 디렉터리를 보내거나 가져올 때 사용하는 파일 전송 프로토콜
^ 명령어 ^ 명령어 의미 ^
| scp [복사될 파일명][원격지id]:[원격지_ip]:[받는위치] | 서버와 클라이언트 사이에 로그인하지 않고도 scp를 이용해 원격으로 파일을 복사할 수 있는 기능 |
| scp [옵션] [디렉터리 이름] [원격지_id]@[원격지_ip]:[보낼 경로] | 여러 파일을 포함한 디렉터리를 원격지로 보낼 때 |
^ 옵션 ^ 옵션 역할 ^ 옵션 명령어 예 ^
| r | 디렉토리 내 모든 파일/디렉토리 복사 | scp -r |
| p (소문자) | 원본 권한 속성 유지 복사 | scp -p |
| P (대문자) | 포트 번호 지정 복사 | scp -P [포트번호] |
| c (소문자) | 압축 복사 | scp -c |
| v | 과정 출력 복사 | scp -v |
| a | 아카이브 모드 복사 | scp -a |
=====telnet 사용법 - telnet [옵션] [호스트IP] [포트]=====
* 원격으로 호스트에 접속을 하기 위한 명령어
^ telnet 전용모드 명령어 ^ 의미 ^
| close | 현재 telnet연결을 종료 |
| logout | 원격 접속된 사용자를 강제 로그아웃하고 연결을 종료 |
| open | 원격서버로 연결을 시도 |
| send | 특수문자를 전송 |
| display | 텔넷 환경인수들을 출력 |
| set | 텔넷 환경인수들을 설정 |
| unset | 텔넷 환경인수들의 설정을 해제 |
| status | 현재 상황정보를 출력 |
| ! | 서브쉘을 불러들여 실행 |
| environ | 환경변수를 변경 |
| quit | 텔넷을 종료하고 쉘로 빠져나오기 |
=====curl(client url) 사용법 - curl [options...] =====
* URL 로 데이터를 전송하여 서버에 데이터를 보내거나 가져올때 사용하기 위한 명령줄 도구 및 라이브러리
- 주요 옵션과 사용예
^ short ^ long ^ 설명 ^
| -k | --insecure | https 프로토콜에서 SSL 인증서에 대한 검증없이 연결 |
| -l | --head | HTTP 헤더만 보여주고 컨텐츠는 표시하지 않음 |
| -L | --location | HTTP 301(영구적 주소변경), 302(일시적 주소변경) 응답을 받은 경우 리디렉션 URL로 따라감 --max-redirs 옵션 뒤에 숫자로 몇 번의 리디렉션까지 따라갈 것인지를 적을 수 있음 |
| -d | --data | HTTP POST 요청 데이터 입력 |
| -v | --verbose | 동작하면서 세세한 내용을 출력 |
| -J | --remote-header-name | 헤더에 있는 파일 이름으로 다운로드 파일을 저장 |
| -o | --output FILE | curl로 받아온 내용을 FILE 이라는 이름의 파일로 저장 |
| -v | --verbose | 동작하면서 자세한 헤더 통신 옵션을 출력 |
| -C | --continue-at | 파일 다운로드 재개
|
{{tag>치킨5분컷 리눅스_명령어}}