쉘 명령어

xeomina·2022년 5월 17일
0

Linux

목록 보기
12/16

쉘 명령어

경로

# cd dirA
# cd ~
# pwd
# cd ~kosa					#일반 사용자 kosa 홈
[root@localhost kosa]# 

# cd ~root
# pwd
  • cd - : 직전 디렉토리로 이동
# cd dirB
# ls ~+					#현재 디렉토리 list
# ls ~-					#직전 디렉토리(/root) list

image-20220407152232891

# cd /usr/bin
# cd -
# cd -

image-20220407152408457

파일 이름 대체 메타문자

  • * : 와일드카드
# ls fi*
file  file1  fileB  fileF

# ls *B
fileB
  • ? : 대체
# ls f???B
fileB

# ls dir?
dirA:
fileX  fileY  fileZ

dirB:
fileX  fileY  fileZ

dirC:
dirCC  fileAA  fileD  fileX  fileY  fileZ  touch_file

dirY:
dirZ
  • [AC] : A와 C

    [A-C] : A부터 C

# ls file[AB]
fileB

# ls dir[AC]
dirA:
fileX  fileY  fileZ

dirC:
dirCC  fileAA  fileD  fileX  fileY  fileZ  touch_file

# ls dir[A-C]				
dirA:
fileX  fileY  fileZ

dirB:
fileX  fileY  fileZ

dirC:
dirCC  fileAA  fileD  fileX  fileY  fileZ  touch_file
[root@localhost ~]# 

인용부호 메타문자

변수선언

  • '' / " "
# echo $USER
root

# echo '$USER'
$USER

# echo "$USER"
root

# echo "\$USER"
$USER
  • ` : 실행
# echo date
date

# echo `date`
Thu Apr 7 15:40:06 KST 2022

# echo "The current time is `date`"
The current time is Thu Apr  7 15:40:25 KST 2022

표준 스트림(standard stream)

표준 입력 재지정

  • stdin; 0

    • 0 생략 가능
  • 키보드

# cat 0< /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

표준 출력 재지정

  • stdout; 1
  • 콘솔(console), 터미널(terminal)
  • ps : 실행중인 프로세스의 목록 출력
# ps 1> process_list

# cat process_list
  PID TTY          TIME CMD
 2289 pts/0    00:00:00 bash
 2316 pts/0    00:00:00 ps

# echo "---My Proccess List---" > process_list

# ps >> process_list

# cat process_list
---My Proccess List---
  PID TTY          TIME CMD
 2289 pts/0    00:00:00 bash
 2336 pts/0    00:00:00 ps

표준 에러 재지정

  • stderr; 2
  • 콘솔(console), 터미널(terminal)
# su - kosa

$ echo "TEST" > /tmp/test.txt
$ find /tmp -type f -exec grep TEST {} \; -print
  • Permission denied 에러 !!
    • TEST
      /tmp/test.txt 만 빼고
  • 2> /dev/null : null에 에러 버리고 나머지 출력
$ find /tmp -type f -exec grep TEST {} \; -print 2> /dev/null
TEST
/tmp/test.txt
  • 1> test 2>&1 : test에 에러 입력
$ find /tmp -type f -exec grep TEST {} \; -print 1> test 2>&1

$ more test

파이프 문자

  • | :앞 명령어의 출력(stdout)을 다음 명령어의 입력(stdin)으로 연결
  • ps -ef : 실행중인 모든 프로세스의 정보를 출력
# ls -l /etc | wc -l		#라인 수
# ps -ef | more
# ps -ef | grep bash
# cat /etc/ssh/sshd_config | grep -n "22"
# grep -n "22" /etc/ssh/sshd_config

history 명령어

  • 명령어 이력 출력
# history
# history > history.txt

# history 5
# history | head -3
# history | tail -3

# ls
# !!			# 마지막 명령 다시 수행
# !10			# 10번째 명령 다시 수행

사용자 초기화 파일

  • 변수 선언
# MyName="Minha"
# echo $MyName
Minha Seo
# exit
# echo $MyName				#MyName 변수 삭제됨
  • 세션 끊어지면 변수 삭제됨
  • /etc/profile 에 변수 저장
# vi /etc/profile
MyName="Minha"	

# exit
# source /etc/profile		#/etc/profile 실행
# echo $MyName
  • bash_profile와 bashrc도 마찬가지
$ vi .bash_profile
MyName=Minha

$ source .bash_profile		#bash_profile 실행
$ echo $MyName
Minha
$ vi .bashrc
MyName=Minha

$ source .bashrc		
$ echo $MyName
Minha

프로세스 확인

# ps
# ps -f
# ps -ef
# ps -ef | more
# ps -ef | grep bash
  • pstree : 프로세스를 트리구조로 보여줌
# pstree

image-20220407171855423

  • 프로세스 ID 확인
$ pgrep -x bash				#ID
$ pgrep -n sh
$ pgrep -u 1000
$ pgrep -l bash				#이름 + ID
$ pgrep  -lt pts/1			#터미널 접속 정보

image-20220407173320263

kill 명령어

# sleep 1000 &
[1] 3548				#sleep 프로세스 ID

# pgrep -l sleep
3548 sleep				#sleep 프로세스 ID

# kill 3548				#ID로 kill
[1]+  Terminated              sleep 1000

# pgrep -l sleep		#kill됨
# sleep 2000 &
3553 sleep

# pgrep -l sleep
3553 sleep

# pkill sleep			#이름으로 kill
[1]+  Terminated              sleep 2000

# pgrep -l sleep		#kill됨

작업 관리

  • sleep 60 : foreground 실행
    • 60초 동안 아무 명령 x
  • sleep 60 & : background 실행
    • 다른 명령어 실행 가능
  • fg %1 : foreground 실행
# sleep 60 &
[1] 3584

# jobs
[1]+  Running                 sleep 60 &

# fg %1
sleep 60
  • bg %1 : background 실행
# sleep 60
^Z
[1]+  Stopped                 sleep 60

# bg %1
[1]+ sleep 60 &

# jobs
[1]+  Running                 sleep 60 

0개의 댓글