Linux Command


Shell script 특수문자

특수문자 의미
$0 The name of the script being executed. (Ex. sh test.sh -> test.sh, sh /workspace/temp/test.sh -> /workspace/temp/test.sh)
$$ The process ID of the current shell
$# The number of command-line arguments
$? The exit status of the last executed command, 쉘에서 최근 실행한 명령어의 종료 상태를 담은 변수
$1-$9 The first nine command-line arguments
$@ All command-line arguments as an array, $* 과 비슷하나 $@는 “$1”, …“$N”을 의미
$* All command-line arguments as a single string, 모든 위치 매개변수를 담고 있는 단일 문자열
$_ 마지막 인수를 출력하는 변수를 저장


dd

# ​dd if=[파일] of=[파일] bs=[block 크기] count=[횟수]

# 읽기 사용법 
# dd if=[파일] of=[빈경로] bs=[block 크기]
dd if=/var/log/message of=/dev/zero bs=1024

# 쓰기 사용법
dd if=/dev/zero of=test bs=1 count=0 seek=2G

# 읽고 쓰기 
# /var/log/message 내용을 읽고, test파일에 쓰는것을 1024크기로 5번 반복
dd if=/var/log/syslog of=test bs=1024 count=5
dd if=/var/log/syslog of=test count=1


ldd (List Dynamic Dependencies)

# 프로그램이 어떤 라이브러리를 링크하는지
$ ldd /bin/echo
	linux-vdso.so.1 (0x00007ffdcc39b000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fae38000000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fae383d6000)

taskset & sar (System Activity Report)

# 특정 프로세스를 특정 논리 코어에서 실행
taskset -c <logical cpu num> <command>
sudo taskset -c 0 ./inf-loop.py &
# CPU 코어 0의 데이터를 3초마다 5번 수집하는 의미
$ sar -P 0 1 5
Linux 6.2.0-1012-aws (ip-10-20-15-218) 	12/05/2023 	_x86_64_	(4 CPU)
01:04:57 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:04:58 PM       0     91.09      0.00      0.00      0.00      8.91      0.00
01:04:59 PM       0     96.97      0.00      0.00      0.00      3.03      0.00
01:05:00 PM       0     88.12      0.00      0.00      0.00     11.88      0.00
01:05:01 PM       0     87.00      0.00      0.00      0.00     13.00      0.00
01:05:02 PM       0     82.00      0.00      0.00      0.00     18.00      0.00
Average:          0     89.02      0.00      0.00      0.00     10.98      0.00

%user + %nice = 사용자 모드에서 프로세스를 실행하는 시간 %system = 커널이 시스템 콜을 처리한 시간 비율 %idle = 아무것도 하지 않는 아이들 상태 비율

# sar -r 명령어를 사용하면 두 번째 인수로 지정한 간격으로 메모리 관련 통계 정보를 얻을 수 있다.  
$ sar -r 1
Linux 6.1.92-99.174.amzn2023.x86_64    07/23/24        _x86_64_        (2 CPU)

06:37:29    kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
06:37:30      6328344   7061152    648712      8.11      3172    927348   1528372     19.11    272788   1210996      5332
06:37:31      6328344   7061152    648712      8.11      3172    927348   1528372     19.11    272788   1210996      5332
06:37:32      6328344   7061152    648712      8.11      3172    927348   1528372     19.11    272788   1211056      5344
06:37:33      6328344   7061152    648712      8.11      3172    927348   1528372     19.11    272788   1211072      5340
06:37:34      6328344   7061152    648712      8.11      3172    927348   1528372     19.11    272788   1211072      5344
06:37:35      6328344   7061152    648708      8.11      3172    927352   1528372     19.11    272788   1211072        24
06:37:36      6327588   7060396    649464      8.12      3172    927352   1528372     19.11    272788   1211824        24
06:37:37      6327588   7060400    649464      8.12      3172    927352   1528372     19.11    272788   1210620        12

tcpdump

# 특정 작업을 실행 후 3번 정도 수행
tcpdump -i eth0 any port <destination port> -w packetdump.pcap

if

# -eq: equal
if [ "$a" -eq "$b" ]

# -ne: not equal
if [ "$a" -ne "$b" ]

# -z: 문자열이 "null"임. 즉, 길이가 0

# -n: 문자열이 "null"이 아님.
if [[ -n "$KUBELET_EXTRA_ARGS" ]]; then
  cat << EOF > /etc/systemd/system/kubelet.service.d/30-kubelet-extra-args.conf
[Service]
Environment='KUBELET_EXTRA_ARGS=$KUBELET_EXTRA_ARGS'
EOF
fi

openssl

# 인증서 볼 때 
openssl x509 -text -noout -in test.pem

base64

echo $TOKEN | base64 --decode; echo 

efs mount

sudo yum -y update  
sudo yum -y install nfs-utils

mkdir /mount-point
sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-0810dac727c8700a9.efs.ap-northeast-2.amazonaws.com:/   /mount-point
  • Ref: https://docs.aws.amazon.com/efs/latest/ug/wt1-test.html

iptables

iptables -L -t filter
iptables -L -t nat

ip6tables -L -t filter
ip6tables -L -t nat

while반복문

while true; do
echo "======================================================="
netstat -anop | grep SYN
sleep 1
done

압축하기

tar -cpvf dr.tar dr 

-c 압축 
-p 권한유지 
-v 진행사항 
-f 파일이름변경 

압축풀기

tar -xvf dr.tar 

-x 압축해제 
-v 진행사항 
-f 파일 이름 

Jar 클래스 파일 검색

find . -type f -name '*.jar' | while read LINE;do echo $LINE; jar tvf $LINE | grep "log4j";done 
find . -type f -name '*.jar' | while read LINE;do echo $LINE; jar tvf $LINE;done 

TCPDUMP

tcpdump -i eth0 -w test.pcap 

SCP

scp httpd_imws.conf wasadm@10.43.43.15:/was/jbcs-httpd24-2.4/httpd/conf 
scp -Rp safenet wasadm@10.43.43.15:/was/jboss-eap-7.2/modules/com/safenet 
scp -rp com_kal_cms_war.ear dco3user@10.43.43.23:/home/dco3user 

ChangeOwner

chown wasadmin:wasadmin dr 

# 기존 gid 3030 -> wasadm 변경 
find -group 3030 | while read line ; do chgrp wasadm "$line"; done 
# 기존 uid 3030 -> wasadm 변경 
find -user 3030 | while read line ; do chown wasadm "$line"; done 

Change Mode

chmod 755 

-R 하위폴더 권한까지 변경 (755 rwxr-xr-x)

문자, 라인, 단어 수

ps -ef | grep java | wc -l 

-c 전체 문자 수 출력 
-l 전체 라인 수 출력 
-w 전체 단어 수 출력 

호스트에 장착된 네트워크 인터페이스의 통신 상태를 보여 줌

netstat -ano 

-a 활성화된 모든 TCP 연결 정보를 보여 줌 
-n 출력결과가 숫자형태가 되도록 함 (IP 주소, 포트 번호 등) 
-o 해당 포트를 연 프로세스 ID를 보여줌 
ㅣ…/ 

다운로드

wget https://archive.apache.org/dist/httpd/httpd-2.4.20.tar.gz 

Kill

ps -ef | grep httpd | awk '{print $2}' | xargs kill -9 

ps -ef | grep travelmn | awk '{print $2}' | xargs kill -9 

ps -ef | grep lmms | grep httpd | awk '{print $2}' | xargs kill -9 

Text검색

grep -rin JAVA_OPTS 

-b 검색 결과의 각 행 앞에 검색된 위치의 블록 번호를 표시한다. 검색 내용이 디스크의 어디쯤 있는지 위치를 알아내는데 유용하다. 
-c 검색 결과를 출력하는 대신, 찾아낸 행의 총수를 출력한다.  (count) 
-h 파일 이름을 출력하지 않는다. 
-I 대소문자를 구분 하지 않는다.(대문자와 소문자를 동일하게 취급). (ignore) 
-l 패턴이 존재하는 파일의 이름만 출력한다.(개행문자로 구분) (list file) 
-n 파일 내에서 행 번호를 함께 출력한다. (number) 
-s 에러 메시지 외에는 출력하지 않는다. 종료상태를 검사할 때 유용하게 쓸 수 있다. 
-v 패턴이 존재하지 않는 행만 출력한다. (invert) 
-w 패턴 표현식을 하나의 단어로 취급하여 검색한다. (word) 

문자 변경

# 출력
sed -e 's/sg-076cd7a25d135f677/sg-06423688e8a1ab528/g' az1_secondary.yml

# 파일에 변경
sed -i '.original' 's/sg-076cd7a25d135f677/sg-06423688e8a1ab528/g' *.yml

Tag: [ linux  command  ]