시스템/Linux

[OS] linux에서 사용하면 편리한 명령어 정리

달빛궁전- 2024. 6. 19. 12:33
목적 : 
linux에서 사용하면 편리한 명령어들을 정리해보려 합니다.
지속적으로 추가, 수정 진행 중입니다.


- 파일검색 후 삭제
예를들어 특정 디렉토리의 압축된 (gz)파일이 1일 이후 수정된 파일을 보고싶을때

find /검색디렉토리 -name “*.gz” -mtime +1 -exec ls -l {} \;

만약 그 해당 파일을 삭제하고자 하면 ls-l 대신 rm 사용

find /검색디렉토리 -name “*.gz” -mtime +1 -exec rm {} \;


mtime : 수정된 시간 즉 파일의 마지막 변경시각
ctime : inode가 변경되는 행위 발생시 기록 (권한 변경이나, 소유자 변경등)
atime : 파일의 마지막 접근시각 (cat으로 파일 읽어도 atime이 변경됩니다..)

- 파일내용 찾기

⁠find . -type f | xargs grep "찾을 내용"


→ 해당 내용의 파일명과 내용이 같이 출력됨

⁠find . -type f | xargs grep -l "찾을 내용"


→ 해당 내용이 있는 리스트만 출력


파일내용 일괄 변경 

find . -type f -exec perl -pi -e 's/찾을 문자열/변경할 문자열/g' {}\;



- 파일내용으로 찾기 (grep)
보통 grep을 파이프라인으로 묶어서 잘 사용을 하는데, 단독으로도 사용을 잘 하는 명령어 입니다.
위의 find랑 섞어서 사용할 수 있지만, 단독으로 사용하는 부분이 더 간단하기도 합니다.

⁠grep -rin "찾고자 하는 텍스트"⁠


옵션 명령어의 뜻은 아래와 같습니다.
-r : 명령어 실행한 곳의 하위 디렉토리까지 찾기
-i : 대소문자 상관없이 검색
-n : 해당 텍스트가 파일의 몇 번째 줄에 있는지 줄번호 출력


- 파일내용 일괄 변경 (grep)

⁠grep -rl "찾을 문자열" | xargs sed -i 's/찾을 문자열/변경할 문자열/g'


위의 검색 옵션 명령어가 다른데요. 
위 명령어가 동작하는 순서는 grep 으로 문자열을 찾고, 그것을 xargs로 넘겨서 변경처리 하는 부분입니다.
옵션명령어로 -rin을 사용하면, 파일명, 줄넘버등이 나와서 문자열이 복잡해지기 때문입니다. -l 옵션은 리스트화만 해서 보여 줍니다. 


- OPENSSL로 인증서 확인

openssl x509 -noout -text -dates -in 인증서파일명.pem



- 반복 작업으로 찾기

 

for문도 사용할 수 있겠지만, 저는 보통 아래의 방법으로 사용합니다.
디스크 현황, 리스닝된 포트 찾기 등 여러가지를 활용할 수 있습니다.

 

⁠while true
do
sleep 10 <- 반복 문을 실행할 초 (10으로 해두면, 10초마다 아래 명령어가 계속 실행됩니다.)
사용하고자 하는 명령어
ex. netstat -ltup
ex. df -hP
done



- 현재 있는 디렉토리에서 기존 디렉토리로 바로 이동하기

 

디렉토리 이동시 보통 “cd /절대경로/” or “cd 상대경로” 로 이동하게 됩니다.
디렉토리 이동을 자주하다보면, 절대경로가 길어져서 이동이 ..조금 귀찮을 수 있는데
아래와 같이 “cd -” 을 입력하면 바로 이전의 디렉토리로 이동합니다.


- 예시

 

ubuntu@ubuntu:~/snap$ cd -
/home/ubuntu
ubuntu@ubuntu:~$ cd -
/home/ubuntu/snap



- 디렉토리별 디스크 사용량 확인
du명령어를 통해 각 디렉토리, 파일의 사용량을 체크할 수 있습니다.
기본적으로 최하위 디렉토리부터 사용량을 보여 줍니다.
유의사항으로는 du 실행시 결과가 운영체제별 (aix, linux)로 다르게 나올 수 있으며, man du, du -help등을 통해 운영하는 운영체제의 du가 어떤 옵션명령어를 지원하는지 확인하는 것이 좋습니다.

- 기본 사용방법
경로를 지정하지 않으면 현재 위치를 기준으로 동작됩니다.
du명령어만 사용하면, 기본 단위인 KB로 되어서 보기가 불편합니다.
그래서 -h 옵션 (human-readable format)을 주어 사람이 보기 쉬운형태로 봅니다.
-s는 summarize로 해당디렉토리의 총 사용량만 보여줍니다.

- 예시

du -sh ”용량 체크할 디렉토리”


- 출력결과 

ubuntu@ubuntu:~$ du -hs /home
134M    /home



응용 - 현재 디렉토리에서 하위모든 디렉토리와 파일의 사용량 보기
* 를 사용하여, 하위 전체의 파일과 디렉토리 사용량 보기

- 예시

du -sh *



- 출력결과

 

ubuntu@ubuntu:~$ du -sh *
4.0K    Check.yaml
24K     add-google-cloud-ops-agent-repo.sh
4.0K    cert_new.sh
4.0K    close_wait.sh
4.0K    firewall.sh
4.0K    firewall_test.sh


- 응용 : 하위디렉토리를 제한하여 크기 계산 
기본으로 du를 사용하게 되면, 하위 디렉터리를 모두 계산하게 됩니다.
depth를 주어 하위디렉토리 깊이를 제한할 수 있습니다.

- 예시

 

du -h /디렉토리 --max-depth="깊이"


- 출력결과 

 

ubuntu@ubuntu:/$ du -h /home --max-depth=2
12K     /home/ubuntu/.ansible
32K     /home/ubuntu/pki
28K     /home/ubuntu/work
4.0K    /home/ubuntu/sync
16K     /home/ubuntu/.config
122M    /home/ubuntu/.cache
20K     /home/ubuntu/snap
16K     /home/ubuntu/.ssh
1.9M    /home/ubuntu/projects
9.8M    /home/ubuntu/.local
134M    /home/ubuntu
134M    /home




- 응용 : 현재 디렉토리에서 용량이 큰 순서대로 10개만 보기
-h 옵션을 사용하면 문자열도 같이 정렬이 되기 때문에 용량순으로 정리가 안됩니다.
하여 좀 불편하지만 -m, -k 옵션과 같이 용량단위를 지정하는 옵션을 사용해야됩니다. 
그리고 정렬(sort)과 head를 같이 사용하여 봅니다.
sort의 n은 오름차순, r은 내림차순 옵션입니다.

- 예시

du -m * | sort -n | head -10


- 출력결과

ubuntu@ubuntu:~$ du -m * | sort -n | head -10
1       Check.yaml
1       add-google-cloud-ops-agent-repo.sh
1       cert_new.sh
1       close_wait.sh
1       firewall.sh
1       firewall_test.sh
1       get-docker.sh
1       info.sh
1       mysql-2.sql
1       mysql.sql



그 외 총용량을 보는 -c 옵션, -x, -t등 여러 사용옵션이 있으니 du --help, man du등을 이용해 필요할때 조합해서 사용하면 디스크 사용량 운영에 많은 도움을 받을 수 있습니다.


소수점 잘라내기
스크립트를 작성하다보면, 결과 값에서 소수점을 잘라내어 사용할 경우가 있습니다.

-  예시

- 명령어
df -hP

ubuntu@ubuntu:~$ df -hP
Filesystem      Size  Used Avail Use% Mounted on
tmpfs            91M  3.1M   88M   4% /run
/dev/mmcblk0p2  117G   18G   96G  16% /
tmpfs           453M     0  453M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/mmcblk0p1  253M  126M  127M  50% /boot/firmware


-> 여기서 /run 디렉토리의 3.1M를 소수점을 제거하고 받아보겠습니다.

 

ubuntu@ubuntu:~$ df -hP | grep /run | grep -v /user/1000 | grep -v /run/lock 
tmpfs            91M  3.1M   88M   4% /run


-> grep -v를 통해 /run만 출력되도록 하였습니다.

이제 소수점을 제거하여 원하는 값만 출력하도록 하겠습니다.
- 출력결과

 

ubuntu@ubuntu:~$ df -hP | grep /run | grep -v /user/1000 | grep -v /run/lock |  awk '{printf "%.0f",$3}'
3


3.1에서 3으로 출력이 완료되었습니다.

awk 의 print기능 중 특정 필드만 출력되는 기능을 결합하여, 진행했습니다.
%f는 실수를 출력할 때 사용되는 서식 문자열이고, 0f는 출력 되길 원하는 값의 자릿 수 입니다.
1f입력시에는 소수점 첫째자리, 2f입력시에는 소수점 둘째자리까지 출력됩니다.


- CPU 사용률
linux에서 시스템 성능을 체크하는 도구들은 무척 많습니다.
간략하게 CPU사용률을 보는 방법입니다.

- 명령어

mpstat | tail -1 | awk '{print 100-$NF}'


- 출력결과
ubuntu@ubuntu:~$ mpstat | tail -1 | awk '{print 100-$NF}'
0.86
현재 CPU 사용률은 0.86%입니다.



mpstat는 CPU성능지표를 출력해 주는 도구이며 그냥 실행시에는 아래와 같이 출력됩니다.

ubuntu@ubuntu:~$ mpstat
Linux 5.15.0-1035-raspi (ubuntu)        09/08/23        _aarch64_       (4 CPU)

17:30:27     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
17:30:27     all    0.20    0.02    0.57    0.06    0.00    0.00    0.00    0.00    0.00   99.14


$NF는 마지막 컬럼을 의미하며, mpstat의 마지막 컬럼은 idle입니다.
그래서 100-idle값을 계산하여 CPU사용률을 구하는 것입니다.
mpstat외에 top, sar 으로도 사용률을 구할 수 있습니다.