-a : 표시할 수 없는 문자가 있거나 매우 긴 경우에도 모든 Log 내용을 출력 -b : 마지막 부팅 후의 Log만 출력 -r : 최신항목이 먼저 표시되도록 역순으로 출력 -c : 커서가 지정한 저널의 위치부터 Log 표시를 시작 -f : 가장 최근 Log만 표시하고 새롭게 추가되는 Log는 계속 출력 -k : 커널 메시지만 출력 (dmesg랑 같음) -q : 일반 사용자로 실행될 때 접근할 수 없는 시스템 저널에 관한 경고메시지를 표시하지 않음 -u : unit으로 systemctl list-units에서 출력되는 첫번째 항목 -p : 메시지의 우선순위로 log level을 의미 emerg=0, alert=1, crit=2, err=3, warning=4, notice=5, info=6, debug=7 -o : Log 출력 형식을 설정 short : 기본값으로 syslog파일의 형식과 동일하다. 한 행에 하나의 Log만 출력 short-iso : short와 비슷하지만 ISO 8601의 시간 형식으로 출력 short-precise : short와 비슷하지만 마이크로 초 단위로 시간 출력 short-monotonic : short와 비슷하지만 단조로운 시간 형식으로 출력 verbose : 전체 Log를 모두 자세하게 출력 export : Log내용을 내보낸다. (백업 및 전송에 적합한 바이너리 스트림으로 직렬화) json : 한줄에 하나씩 JSON 데이터 구조로 형식화 json-pretty : JSON 데이터 구조로 형식화 하지만 여러줄로 형식을 지정하여 사람이 읽을 수 있게 한다. json-see : JSON 데이터 구조로 형식화 하지만 Server-Sent Events에 적합한 형식으로 한다. cat : 매우 간결한 출력을 생성하며 메타 데이터가 없고 Log만 표시하며 시간은 표시하지 않음 -l : 출력되는 Log의 필드를 줄일때 사용, 기본값은 전체 필드를 표시하여 사용자가 해당 필드를 붙이거나 자를 수 있도록 한다. _UID= 33 : 33번 UID를 가진 프로세스에 대한 Log를 출력 --disk-usage : 저널 파일의 디스크 사용량을 표시 (압춘된 모든 더널 파일과 사용중인 저널 파일의 합계를 표시)
> netsh advfirewall firewall show rule name="TCP/5000"
Rule Name: TCP/5000 ---------------------------------------------------------------------- Enabled: Yes Direction: In Profiles: Domain,Private,Public Grouping: LocalIP: Any RemoteIP: Any Protocol: TCP LocalPort: 5000 RemotePort: Any Edge traversal: No Action: Allow Ok.
터미널은 보통 캐노니컬 (canonical) 모드로 동작합니다. 사용자가 키를 누르면 그 터미널에서 실행중인 프로그램에게 즉시 전달되지 않고, 터미널 지역 버퍼가 키 누름을 저장하고 있다가 ENTER 를 눌렀을 때에 저장하고 있던 값들을 모두 전달하게 됩니다. 터미널에 기본적인 줄단위 편집기가 들어 있는 것과 비슷합니다.
bash$ cat > filexxx whaIfoo barhello world bash$ cat filexxx hello world bash$ bash$ wc -c < file 13
터미널을 제어하는 프로세스는 사용자가 26번의 키를 눌렀음에도 오직13개의 문자(알파벳 12개, 뉴라인 한 개)만 받았습니다.
넌캐노니컬(“raw”) 모드에서는 누르는 모든 키 (ctl-H 같은 편집용 특수키도 포함) 가 제어 프로세스에게 즉시 전달됩니다.
bash 프롬프트는 icanon 옵션과 echo 옵션을 둘 다 꺼서 기본적인 줄 단위 편집을 더 정교하게 제어할 수 있게 합니다. 예를 들어, bash 프롬프트 상에서 ctl-A 을 누르면 ^A 가 터미널에 찍히지 않고 bash 가 \1 문자를 읽고 해석해서 커서를 줄 제일 처음으로 이동시켜 줍니다.
Stephane Chazelas
tset
터미널 세팅을 보여주거나 초기화 함. stty 보다 기능이 떨어집니다.
bash$ tset -r Terminal type is xterm-xfree86. Kill is control-U (^U). Interrupt is control-C (^C).
setserial
시리얼 포트 매개변수를 세트하거나 보여줍니다. root 로 실행시켜야 하고 보통은 시스템 셋업 스크립트에서 찾을 수 있습니다.
터미널용 초기화 프로세스가 getty 나 agetty 를 써서 사용자의 로그인을 설정해 줍니다. 이 명령어들은 사용자의 쉘 스크립트에서 쓰이지 않기 때문에 쉘 스크립트에서 이런 기능을 쓰려면 stty 를 쓰기 바랍니다.
mesg
현재 사용자의 터미널에 대한 쓰기 접근을 제어합니다. 접근을 못하게 설정되면 네트워크에 있는 다른 사용자가 현재 터미널로 write 를 하지 못하게 해 줍니다.
작은 정보: 여러분이 텍스트 파일을 편집하고 있는데 갑자기 피자 주문 메세지가 뜨면 아주 짜증날 것입니다. 다중 사용자 네트워크에서는, 방해받기 싫을 때 여러분의 터미널에 대한 쓰기 접근을 막고 싶은 경우가 생길겁니다.
wall
“write all” 의 앞글자를 따서 wall 이 된 이 명령어는 현재 로그인 되어 있는 모든 사용자에게 메세지를 날립니다. 원래는 유용한 시스템 관리자용 도구입니다. 예를 들어, 시스템에 문제가 생겨서 잠깐 동안 다운 시켜야 할 필요가 생겼을 때 모든 사용자들에게 경고를 할 수 있게 해 줍니다.
bash$ wall System going down for maintenance in 5 minutes! Broadcast message from bozo (pts/1) Sun Jul 8 13:53:27 2001…
System going down for maintenance in 5 minutes!
참고:mesg 로 쓰기가 막혀있는 터미널은 wall 메세지를 받을 수 없습니다.
dmesg
시스템 부팅 메세지를 표준출력으로 보여 줍니다. 디버깅 할 때, 어떤 디바이스 드라이버가 설치됐는지 확인할 때, 사용중인 시스템 인터럽트가 무엇인지 확인할 때 편하게 쓸 수 있습니다. 스크립트에서 dmesg 의 출력을 grep 이나 sed, awk 로 파싱해서 쓸 수 있습니다.
/var/log/lastlog 파일에 읽기 퍼미션이 없는 사용자가 이 명령어를 실행시키면 실패합니다.
lsof
현재 열려 있는 파일들을 보여줍니다. 이 명령어는 현재 열려 있는 모든 파일들에 대한 자세한 표와 각각의 파일에 대한 소유자, 크기, 관련 프로세스등의 정보를 보여 줍니다. 당연히, lsof 의 출력은 파이프를 통해 grep 나 awk 로 넘겨서 파싱해서 분석할 수 있습니다.
bash$ lsof COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME init 1 root mem REG 3,5 30748 30303 /sbin/init init 1 root mem REG 3,5 73120 8069 /lib/ld-2.1.3.so init 1 root mem REG 3,5 931668 8075 /lib/libc-2.1.3.so cardmgr 213 root mem REG 3,5 36956 30357 /sbin/cardmgr …
strace
시스템 콜과 시그널을 추적해서 진단하고 디버깅해 주는 도구입니다. 가장 간단하게 실행시키는 방법은 strace COMMAND 라고 치는 것입니다.
시스템의 호스트명을 보여줍니다. 이 명령어는 /etc/rc.d 에 들어 있는 셋업 스크립트에서 호스트명을 설정해 줍니다 (/etc/rc.d/rc.sysinit 이나 비슷한 스크립트). uname -n 과 동일한 명령어이고 내부 변수인 $HOSTNAME 과 연관이 있습니다.
bash$ hostname localhost.localdomain
bash$ echo $HOSTNAME localhost.localdomain
hostid
호스트 머신에 대한 32비트 16진수 구분자를 에코해 줍니다.
bash$ hostid 7f0100
참고: 이 명령어는 특정 시스템에 대해 “유일한” (unique) 시리얼 숫자를 구해줍니다. 몇몇 상업용 제품의 등록 과정에서 이 숫자를 이용해 사용자 라이센스를 만들어 냅니다. 하지만 불행하게도 hostid 는 오직 네트워크 주소를 두 바이트 단위로 뒤집어 16진수로 리턴해 줍니다.
네트워크에 물리지 않은 리눅스 머신의 전형적인 네트워크 주소는 /etc/hosts 에서 알아낼 수 있습니다.
공교롭게도 127.0.0.1 을 두 바이트 단위로 뒤집으면 0.127.1.0 이 되고 이를 16진수로 변환하면 007f0100 이 되는데 이는 위에서 살펴본 hostid 가 리턴하는 값과 정확히 일치합니다. 결국 동일한 hostid 를 갖는 리눅스 머신이 수 백만 개가 존재하게 되는 것입니다.
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 848 bozo 17 0 996 996 800 R 5.6 1.2 0:00 top 1 root 8 0 512 512 444 S 0.0 0.6 0:04 init 2 root 9 0 0 0 0 SW 0.0 0.0 0:00 keventd …
nice
백그라운드 작업의 우선순위를 바꿔줍니다. 우선순위는 19 (제일 낮음) 에서 -20 (제일 높음) 까지 인데, 오직 root 만이 음수(높은) 우선순위를 줄 수 있습니다. 관련 명령어로는 renice, snice, skill 이 있습니다.
nohup
사용자가 로그 아웃을 하더라고 명령어가 계속 돌게 해 줍니다. 명령어에 & 를 붙여 실행하지 않으면 포그라운드로 실행이 될 것입니다. nohup 을 스크립트에서 쓸 때는, 고아 프로세스나 좀비 프로세스가 생기지 않도록 wait 와 같이 써야 합니다.
pidof
실행중인 작업의 프로세스 ID (pid) 를 식별해 줍니다. kill 이나 renice 같은 작업 제어 명령어들은 프로세스 이름이 아니라 pid 에 대해 동작하기 때문에 종종 pid 로 구분할 필요가 생깁니다. pidof 명령어는 내부 변수인 $PPID 와 거의 쌍을 이룹니다.
bash$ pidof xclock 880
예제4. pidof 로 프로세스를 죽이기
#!/bin/bash
kill-process.sh
NOPROCESS=2
process=xxxyyyzzz # 존재하지 않는 프로세스를 가지고,
그냥 데모용임…
… 실제로 돌고 있는 어떤 프로세스도 죽이려고 하는게 아니니까.
하지만, 예를 들어 인터넷에서 로그오프하고 싶다면
#+ process=pppd #+ 됩니다.
t=`pidof $process` # $process의 pid(프로세스 ID)를 찾고,
‘kill’은 프로그램 이름이 아니라 pid를 쓰기 때문에
if [ -z “$t” ] # 해당 프로세스가 없다면 ‘pidof’는 널을 리턴함. then echo “$process 는 현재 실행중이 아니므로 그냥 종료합니다.” exit $NOPROCESS fi
kill $t # 잘 죽지 않는 프로세스라면 ‘kill -9’라고 해야 할지도 모릅니다.
죽지 않게 돼 있는 프로세스일수도 있기 때문에
다시 한 번 “ t=`pidof $process` “ 로 확인해 볼 필요가 있습니다.
위 전체 스크립트는
kill $(pidof -x process_name)
이라고 할 수도 있겠으나 그러면 교육적이지는 않은것 같군요.
exit 0
fuser
어떤 파일이나, 파일 집합, 디렉토리에 접근하고 있는 프로세스를 PID 로 식별해 줍니다. -k 옵션을 쓰면 해당 프로세스를 죽일 수 있습니다. 이 명령어는 시스템 보안 차원에서 아주 흥미로운 구현인데 주로 스크립트에서 쓰여 시스템 서비스에 대해 허가 받지 않은 사용자의 접근을 막는 용도로 쓰입니다.
crond
시스템 관리용 스케쥴러 프로그램으로서, 시스템 로그 파일을 정리하고 지운다거나 slocate 데이타 베이스를 업데이트 하는 등의 일을 해 줍니다. at 의 root 사용자 버전용 명령어 입니다 (물론, 각 사용자는 crontab 명령어를 써서 자신만의 crontab 파일을 가질 수도 있습니다). 데몬 으로 돌면서 /etc/crontab 의 내용들을 스케쥴에 따라 실행시켜 줍니다.
init 명령어는 모든 프로세스의 부모 프로세스로서, 시스템 부팅 과정의 제일 마지막에 불리면서 /etc/inittab 을 읽어서 시스템의 런레벨을 결정합니다. 오직 root 만이 별명인 telinit 으로 부를 수 있습니다.
telinit
init 를 가르키는 심볼릭링크로서, 시스템 런레벨을 바꿀 때 쓰는데 보통은 시스템 관리나 긴급하게 파일 시스템을 수리해야 할 때 씁니다. 오직 root 만 이 명령어를 쓸 수 있습니다. 이 명령어는 아주 위험하기 때문에 쓰기 전에 이 명령어를 잘 이해하고 있어야 합니다!
runlevel
현재와 바로 전의 런레벨을, 시스템이 정지 상태인지(런레벨 0), 단일 사용자 모드인지(1), 다중 사용자 모드인지(2 나 3), X 윈도우 모드인지(5), 리부팅 중인지(6)등으로 보여 줍니다. 이 명령어는 /var/run/utmp 파일을 통해 정보를 얻어 옵니다.
파일시스템을 마운트해 줍니다. 보통은 플로피나 시디롬 같은 외부 디바이스에 대해서 쓰입니다. /etc/fstab 에 가능한 파일시스템이나 파티션, 디바이스, 옵션등을 적어 놓으면 자동이나 수동으로 마운트를 편하게 할 수 있습니다. /etc/mtab 파일은 /proc 같은 가상 파일시스템도 포함해서 현재 마운트 되어 있는 파일 시스템을 보여 줍니다.
mount -a 는 /etc/fstab 에 들어 있는 파일 시스템과 파티션중에 noauto 옵션이 있는 항목만 빼고 모두 마운트 해 줍니다. 부팅될 때, 모든 파티션이 마운트 되도록 /etc/rc.d 디렉토리에 들어 있는 시스템 구동 스크립트 (rc.sysinit 이나 비슷한 것) 에서 이 명령어를 부릅니다.
mount -t iso9660 /dev/cdrom /mnt/cdrom
CDROM 마운트
mount /mnt/cdrom
/mnt/cdrom 이 /etc/fstab 에 들어 있을 경우 짧게 부르기
이 다재다능한 명령어는 보통 파일을 블럭 디바이스에 존재하는 파일 시스템처럼 마운트 할 수도 있습니다. 이런 능력은 루프백 디바이스 (loopback device) 라고 하는 파일을 이용해서 가능해 집니다. 이 루프백 디바이스를 적용한 예로서, ISO9660 이미지를 CDR 로 굽기 전에 마운트해서 테스트 해보는 것이 있습니다.
예제5. CD 이미지 확인하기
# 루트로…
mkdir /mnt/cdtest # 마운트 포인트가 없다면 준비함.
mount -r -t iso9660 -o loop cd-image.iso /mnt/cdtest # 이미지 마운트.
“-o loop” 옵션은 “losetup /dev/loop0” 와 같음.
cd /mnt/cdtest # 이제 이미지를 확인. ls -alR # 이미지에 들어있는 디렉토리 트리에 들어 있는 파일들을 나열. # 기타 등등…
umount
현재 마운트 되어 있는 파일 시스템을 언마운트 해 줍니다. 이미 마운트 되어 있는 플로피나 시디롬 디스크를 빼기 전에 꼭 umount 를 해 줘야 합니다. 안 그러면 파일 시스템이 깨질 수도 있습니다.
umount /mnt/cdrom
이제 이젝트 버튼을 눌러 디스크를 안전하게 뺄 수 있습니다.
참고: automount 유틸리티가 적절하게 설치되어 있다면 플로피나 시디롬 디스크에 접근시나 제거시에 자동으로 마운트와 언마운트를 할 수 있습니다. 플로피나 시디롬 드라이브를 꼈다 뺐다 할 수 있는 랩탑에서는 문제를 일으킬 수도 있습니다.
sync
버퍼에 들어 있는 최신 데이타를 하드 드라이브로 즉시 쓰게 합니다(버퍼와 드라이브를 동기화). 이 명령어가 꼭 필요한 것은 아니지만 시스템 관리자나 사용자에게 자신들이 변경한 데이타가 갑작스런 전원 이상에도 살아남을 수 있게 해 줍니다. 예전에는 sync; sync (아주 확실히 하기 위해서 두 번 내림) 라고 해서 시스템을 리부팅하기 전의 유용한 예방책으로 쓰였습니다.
파일을 안전하게 지우거나 천장의 전등이 깜빡이기 시작했을 때 버퍼를 즉시 플러쉬시키고 싶을 때가 있을지도 모릅니다.
head -c $SIZE < /dev/zero > file # 지정된 크기로 파일을 설정. losetup /dev/loop0 file # 루프백 디바이스로 설정. mke2fs /dev/loop0 # 파일 시스템 만들기. mount -o loop /dev/loop0 /mnt # 마운트.
Thanks, S.C.
mkswap
스왑 파티션이나 스왑 파일을 만들어 줍니다. 이 명령어 다음에는 꼭 swapon 으로 활성화를 시켜줘야 합니다.
swapon, swapoff
스왑 파티션이나 스왑 파일을 활성화/비활성화 시켜 줍니다. 이 명령어는 보통 부팅시나 셧다운시에 효력을 갖습니다.
mke2fs
리눅스 ext2 파일시스템을 만들어 줍니다. 이 명령어는 root 로 실행 시켜야 합니다.
mkdir $MOUNTPOINT chmod 777 $MOUNTPOINT # 새 드라이브는 모든 사용자가 접근할 수 있도록 함.
자, 테스트를 해 보죠.
mount -t ext2 /dev/hdb1 /mnt/newdisk
디렉토리를 만들어 보고 잘 된다면 umount 한 다음 하던 일을 계속하면 됩니다.
마지막 단계:
다음을 /etc/fstab 에 추가해 주세요.
/dev/hdb1 /mnt/newdisk ext2 defaults 1 1
exit 0
tune2fs
ext2 파일 시스템을 튜닝해 줍니다. 최대 마운트 숫자같은 파일 시스템 매개변수를 바꾸는데 쓰일 수 있습니다. root 로 실행해야 됩니다.
주 의
이 명령어는 굉장히 위험합니다. 부주의하게 쓴다면 여러분 파일 시스템을 박살낼 수도 있기 때문에 여러분 스스로 책임을 지고 써야 합니다.
dumpe2fs
아주 자세한 파일 시스템 정보를 표준출력으로 덤프해 줍니다. root 로 실행되야 합니다.
root# dumpe2fs /dev/hda7 | grep ‘ount count’ dumpe2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09 Mount count: 6 Maximum mount count: 20
hdparm
하드 디스크 매개변수를 보여주거나 바꿀 수 있습니다. root 로 실행시켜야 되고 잘못 쓸 경우 위험할 수 있습니다.
fdisk
보통은 하드 드라이브일, 저장용 디바이스에 대해서 파티션 테이블을 만들고 변경할 수 있게 해 줍니다. root 로 실행해야 됩니다.
주 의
이 명령어는 아주 조심해서 써야 됩니다. 만약에 뭔가가 잘못되면 여러분의 파일 시스템을 망가트릴 수도 있습니다.
fsck, e2fsck, debugfs
파일 시스템 체크, 치료, 디버그용 명령어들 입니다.
fsck : 유닉스 파일 시스템을 체크해 주는 프론트 엔드 (front end) 로서 다른 유틸리티가 이 명령어를 부름니다. 실제로 체크할 파일 시스템 타입은 ext2 가 기본으로 잡혀 있습니다.
e2fsck : ext2 파일 시스템 체커.
debugfs : ext2 파일 시스템 디버거.
경 고
이 명령어들은 root 로 실행시켜야 합니다. 잘못 쓰면 파일 시스템이 손상되거나 망가질 수도 있습니다.
badblocks
저장용 디바이스에 대해 배드 블럭 (미디어의 물리적인 결함) 을 체크해 줍니다. 새 하드 드라이브를 설치하고 포맷할 때나 백업 미디어의 무결성을 테스트 해보려고 할 때 쓸 수 있습니다. 예를 들어 badblocks /dev/fd0 라고 하면 플로피 디스크를 테스트해 줍니다.
badblocks 명령어는 모든 데이타를 다 덮어써버리도록 불릴 수도 있고 읽기 전용 모드로 안전하게 불릴 수도 있습니다. root 사용자가 테스트할 디바이스를 소유하고 있다면, 보통 그런 상황일테지만, root 가 이 명령어를 실행시켜야 합니다.
mkbootdisk
예를 들어 MBR (master boot record) 이 깨진 상황등에서 시스템을 다시 살릴 수 있도록 부팅 디스켓을 만들어 줍니다. mkbootdisk 는 실제로는 Erik Troan 이 만든 Bash 스크립트로 /sbin 디렉토리에 들어 있습니다.
chroot
루트 디렉토리를 바꿔줍니다 (CHange ROOT directory). 명령어들은 보통 기본 루트 디렉토리인 / 를 기준으로 $PATH 에 따라 해석됩니다. 이 명령어는 이 루트 디렉토리를 다른 곳으로 바꾼다음 작업 디렉토리도 그 쪽으로 바꿔줍니다. 보안용으로 아주 유용한데, 예를 들면 시스템 관리자가 텔넷 으로 접속중인 사용자를 보안과 관련된 파일 시스템에 접근시키지 않으려 할 때에 사용할 수 있습니다 (가끔 guest 사용자를 “chroot 감옥” (chroot jail) 에 가둔다라고도 합니다). chroot 후에는 시스템 바이너리에 대한 실행 경로가 더 이상 맞지 않는 것에 주의하기 바랍니다.
chroot /opt 라고 하면 /usr/bin 을 /opt/usr/bin 이라고 해석합니다. 비슷하게, 보통의 상황에서는 / 를 기본 디렉토리로 삼지만 chroot /aaa/bbb /bin/ls 라고 하면 그 후로 실행되는 ls 는 /aaa/bbb 을 기본 디렉토리로 인식합니다. 사용자의 ~/.bashrc 에 alias XX ‘chroot /aaa/bbb ls’ 라는 줄을 넣으면 그 사용자가 “XX” 를 실행 시키는 파일 시스템을 효과적으로 제한할 수 있습니다.
chroot 는 비상용 부트 플로피로 부팅했을 때 편하게 쓸 수 있고 (/dev/fd0 에 chroot 걸기), 시스템이 박살나서 고치려고 할 때 lilo 에 옵션으로 줄 수도 있습니다. 또한 다른 파일 시스템을 통해서 설치를 할 경우나 (rpm 옵션), CDROM 같은 읽기 전용 파일 시스템에서 실행할 때 쓸 수 있습니다. 오직 root 사용자로 실행할 수 있으며, 조심해서 써야 합니다.
경 고
몇 개의 시스템 파일들은 chroot 된 디렉토리에 복사해 놓아야 $PATH 가 그들을 제대로 인식할 수 있습니다.
lockfile
이 유틸리티는 procmail 패키지 중의 하나입니다 (www.procmail.org). 이 명령어는 잠금 파일을 만들어 주는데, 잠금 파일이란 특정 파일이나 디바이스, 리소스에 대해서 접근 제어를 해주는 세마포어 파일입니다. 잠금 파일은 이 특정한 파일, 디바이스, 리소스를 특정 프로세스가 쓰고 있다(“busy”)는 플래그로 쓰여, 다른 프로세스에게 제한된 접근만을 허용하거나 아예 접근을 못하도록 만들어 줍니다.
잠금 파일은 여러 사용자에 의해 시스템 메일 폴더가 동시에 변경되는 것을 막아주고, 모뎀 포트가 사용중이라는 것을 알려주며, 넷스케이프가 캐쉬를 사용중이라는 것을 보여주는데 쓰일 수 있습니다. 스크립트에서 특정 프로세스가 만들어 놓은 잠금 파일이 있는지 확인해서 그 프로세스가 이미 떠 있는지 알아낼 수도 있습니다. 만약에 스크립트에서 이미 존재하는 잠금 파일을 다시 만들려고 한다면 그 스크립트는 멈춰 버릴 수도 있으니 조심하기 바랍니다.
보통의 어플리케이션들은 잠금 파일을 만들고 체크하는 기본 디렉토리를 /var/lock 으로 삼습니다. 다음 스크립트처럼 해서 잠금 파일이 있는지 없는지를 확인할 수 있습니다.
appname=xyzip
“xyzip” 어플리케이션은 “/var/lock/xyzip.lock” 란 잠금 파일을 만듭니다.
if [ -e “/var/lock/$appname.lock ] then …
mknod
블럭 디바이스나 문자 디바이스 파일을 만들어 줍니다 (예를 들면 하드웨어를 새로 설치할 경우에 필요하겠죠?).
tmpwatch
특정 기간동안 접근이 없는 파일을 자동으로 지워줍니다. 보통은 오래된 로그 파일을 지우기 위해 crond 에 걸어 놓고 씁니다.
MAKEDEV
디바이스 파일을 만들어 주는 유틸리티로서, root 로 실행시켜야 합니다. 이 명령어는 /dev 디렉토리에 있습니다.
dump 명령어는 복잡한 파일 시스템 백업 유틸리티로서 보통은 규모가 큰 설치와 네트워크에서 쓰입니다. 디스크 파티션을 있는 그대로 (raw) 읽고 바이너리 형태로 백업 파일을 만들어 냅니다. 백업 되는 파일들은 디스크나 테입 드라이브같은 다양한 저장 미디어로 저장됩니다. restore 명령어는 dump 로 백업된 파일들을 복구시켜 줍니다.
시스템 리소스에 대해서 최대 한계 (upper limit) 를 지정해 줍니다. 보통 -f 옵션을 써서 쉘이 만들 수 있는 파일 크기를 제한 시킵니다 (ulimit -f 1000 이라고 하면 파일 크기를 1 메가로 잡아 줍니다). -t 옵션은 코어덤프 파일의 크기를 제한 시킵니다 (ulimit -c 0 이라고 하면 코어덤프를 생성시키지 않습니다). ulimit 값은 보통, /etc/profile 이나 ~/.bash_profile 에서 지정해 줍니다.
umask
사용자(User) 파일 생성 마스크(MASK)로서 사용자 각자의 기본 파일 속성을 제한해 줍니다. 사용자가 생성하는 모든 파일은 umask 로 지정된 속성의 영향을 받습니다. umask 로 넘겨준 값은 해당 파일 소유권을 꺼버립니다. 예를 들어, umask 022 는 새로 만들어 지는 파일이 최소한 755 소유권을 갖도록 해 줍니다 (777 NAND 022). 사용자는 당연히 나중에 그 파일의 속성을 chmod 로 바꿀 수 있습니다. 보통 umask 값을 설정할 때는 /etc/profile 이나 ~/.bash_profile 에서 합니다.
rdev
루트 디바이스, 스왑 영역, 비디오 모드에 대한 정보를 얻거나 변경. rdev 의 기능은 lilo 로 넘어갔지만 아직 램 디스크를 설정할 때는 유용합니다. 역시 잘못 쓰면 위험한 명령어입니다.
현재의 환경 변수, 혹은 그 값을 바꿔 프로그램이나 스크립트를 실행 시킵니다 (시스템 전체 환경은 건드리지 않습니다). [varname=xxx] 옵션을 주면 스크립트가 실행될 동안에만 환경 변수 varname 의 값을 바꿔줍니다. 아무 옵션도 안주면 현재 세팅되어 있는 모든 환경 변수를 보여줍니다.
참고:Bash 나 본쉘에서 파생된 다른 쉘들에서는 단일 명령어 환경에서 변수를 설정하는 것이 가능합니다.
var1=value1 var2=value2 commandXXX
‘commandXXX’ 의 환경에서만 $var1 과 $var2 를 설정.
작은 정보: 스크립트의 첫번째 줄 (“**#!**” 가 있는 줄) 에 env 를 써서 경로를 모르는 쉘이나 명령어 해석기를 지정해 줄 수도 있습니다.
#! /usr/bin/env perl
print “펄이 어디에 있는지 몰라도\n”; print “이 펄 스크립트는 잘 동작할 것입니다.\n”;
for i in /var/lock/subsys/*; do # –> 표준 for/in 루프이나 “do” 가 같은 줄에 있기 때문에 # –> “;” 를 붙여줘야 됩니다. # 스크립트가 실제로 있는지 확인. [ ! -f $i ] && continue # –> “and list”를 아주 잘 썼습니다. 다음처럼 해도 똑같습니다. # –> if [ ! -f “$i” ]; then continue
# 서브시스템 이름을 알아냅니다.
subsys=${i#/var/lock/subsys/}
# --> 변수 이름 매칭인데 여기서는 파일 이름이 되겠죠.
# --> subsys=\`basename $i\` 와 완전히 똑같은 표현입니다.
# --> 잠금 파일의 이름을 알아내는데, 잠금 파일이 있다면
# --> 해당 프로세스가 실행중이라는 증거입니다.
# --> 앞에서 설명했던 "lockfile" 을 참고하세요.
# 그 서브시스템을 내립니다.
if \[ -f /etc/rc.d/init.d/$subsys.init \]; then
/etc/rc.d/init.d/$subsys.init stop
else
/etc/rc.d/init.d/$subsys stop
# --> 쉘 내장명령인 'stop'을 써서 돌고 있는 작업과 데몬을 중지시킵니다.
fi
sudo mount -o remount,exec /dev sudo vbetool dpms off sudo mount -o remount,noexec /dev
다시 디스플레이를 켜려면
1 2 3
sudo mount -o remount,exec /dev sudo vbetool dpms on sudo mount -o remount,noexec /dev
Network 상태 확인
ss 명령
ss 명령은 Socket Statistics 를 출력해 준다. open 된 소켓에 대한 정보를 표시한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
ss [-a -t -u -l -p -n] [filter]
-a: -t: TCP -u: UDP -l: LISTEN 상태 포트 -n: 호스트/포트/사용자 이름을 숫자로 표시 -p: 프로세스 이름 -r, --resolve: resolve host names -w, --raw : display only RAW sockets -x, --unix : display only Unix domain sockets -4, --ipv4 : display only IP version 4 sockets -6, --ipv6 : display only IP version 6 sockets -m, --memory : show socket memory usage
LISTEN Port 확이
netstat 같이 LISTEN 상태 프로세스를 확인할 수 있다. 다음은 t: tcp 포트, l: LISTEN 상태의 소켓 정보를 출력한다.
$ ss -tl4 State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 511 0.0.0.0:http 0.0.0.0:* LISTEN 0 511 0.0.0.0:https 0.0.0.0:* $ $ ss -tl6 State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 [::]:2020 [::]:* q
lsof
Linux에서 open file을 확인하는데 사용되는 lsof 명령입니다. Unix/Linux의 모든 것은 파일로 이루어져있기때문에 스트림이나 네트워크 파일도 lsof 로 확인할 수 있습니다.
-d, --detach : 명령을 detach mode, 백그라운드로 실행 -e, --env : 환경변수 설정하고 실행 -it [SHELL]: iteractive tty 옵션. 사용할 shell을 지시한다, 보통 bash -u, --user: User ID, UID -w, --workdir: 작업 디렉토리 지정
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 119.2G 0 disk ├─sda1 8:1 0 84.5G 0 part └─sda6 8:6 0 28.9G 0 part / mmcblk0 179:0 0 7.5G 0 disk ├─mmcblk0p2 179:2 0 6.8G 0 part /media/qkboo/ROOT ├─mmcblk0p3 179:3 0 486.1M 0 part └─mmcblk0p1 179:1 0 200M 0 part /media/qkboo/EFI
parted 사용
파티션 및 포맷을 위해 마운트된 파티션을 언마운트 한다. parted 는 상호작용 프롬프트에서 사용하거나 단일 명령어로 사용할 수 있다.
parted 프롬프트 사용
[ext4 파티션 생성]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
sudo parted /dev/sdb (parted) print Number Start End Size File system Name Flags 1 0.00GB 32.0GB 32.0GB
(parted) mklabel gpt Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No? y
(parted) unit GB (parted) mkpart primary 0 1000.0GB #디스크 크기 입력
(parted) print Number Start End Size File system Name Flags 1 0.00GB 32.0GB 32.0GB primary lvm (parted) quit
[fat32 파티션 생성]
USB 스토리지는 아래 같이 나타난다. 다음은 USB 파티션에 fat32 파일시스템을 프롬프트로 생성하고 있다.
1 2 3 4 5
sudo parted /dev/mmcblk0 (parted) mklabel msdos (parted) mkpart primary fat32 1MiB 100% (parted) set 1 boot on (parted) quit
생성한 파티션에 시스템 지원 파일 시스템을 생성해야 한다. 해당 파일 시스템으로 파티션을 포맷한 후에 지정한 디렉토리에 마운트를 해서 사용하면 된다. 지속적인 사용을 위해서 /etc/fstab 에 파티션을 마운트 포인트로 등록하면 재시동 후에도 동일한 폴더에 마운트 된다.
mkfs
mkfs 명령은 파일 시스템에 따랴서 -t 옵션에 파일시스템을 지시하거나 mkfs.[FS] 형식을 명령을 바로 쓰기도 한다.
# Settings apply across all Linux distros running on WSL 2 [wsl2]
# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB memory=4GB
# Sets the VM to use two virtual processors processors=2
# Specify a custom Linux kernel to use with your installed distros. The default kernel used can be found at https://github.com/microsoft/WSL2-Linux-Kernel kernel=C:\\temp\\myCustomKernel
# Sets additional kernel parameters, in this case enabling older Linux base images such as Centos 6 kernelCommandLine = vsyscall=emulate
# Sets amount of swap storage space to 8GB, default is 25% of available RAM swap=8GB
# Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx swapfile=C:\\temp\\wsl-swap.vhdx
# Disable page reporting so WSL retains all allocated memory claimed from Windows and releases none back when free pageReporting=false
# Turn off default connection to bind WSL 2 localhost to Windows localhost localhostforwarding=true
# Automatically mount Windows drive when the distribution is launched [automount]
# Set to true will automount fixed drives (C:/ or D:/) with DrvFs under the root directory set above. Set to false means drives won't be mounted automatically, but need to be mounted manually or with fstab. enabled = true
# Sets the directory where fixed drives will be automatically mounted. This example changes the mount location, so your C-drive would be /c, rather than the default /mnt/c. root = /
# DrvFs-specific options can be specified. options = "metadata,uid=1003,gid=1003,umask=077,fmask=11,case=off"
# Sets the `/etc/fstab` file to be processed when a WSL distribution is launched. mountFsTab = true
# Network host settings that enable the DNS server used by WSL 2. This example changes the hostname, sets generateHosts to false, preventing WSL from the default behavior of auto-generating /etc/hosts, and sets generateResolvConf to false, preventing WSL from auto-generating /etc/resolv.conf, so that you can create your own (ie. nameserver 1.1.1.1). [network] hostname = DemoHost generateHosts = false generateResolvConf = false
# Set whether WSL supports interop process like launching Windows apps and adding path variables. Setting these to false will block the launch of Windows processes and block adding $PATH environment variables. [interop] enabled = false appendWindowsPath = false
# Set the user when launching a distribution with WSL. [user] default = DemoUser
# Set a command to run when a new WSL instance launches. This example starts the Docker container service. [boot] command = service docker start
4. wsl 외부 디스크 마운트 하기
윈도우즈 wsl 에서 리눅스 파티션 혹은 USB 파티션 디스크를 마운트해서 사용하려고 한다.