Linux Command Summary 4

IkSun·2023년 4월 18일

리눅스실습

목록 보기
13/14

4_셸 사용법

### 기본 셸 변경하기

chsh -l					# /etc/shells 파일에 지정된 셸을 출력한다. (list)
chsh -s /bin/sh user1 	# 바꾸려는 셸의 절대 경로를 지정해 로그인 셸을 바꾼다. (shell)

### 출력 명령

echo $SHELL				# current shell 확인
printf $SHELL			# current shell 확인

특수 문자

### 특수 문자 *,?,[]

ls -l h*d				# h 로 시작하고 d 로 끝나는 모든 파일의 상세 정보 출력
ls  dir?				# dir뒤에 한 문자가 붙은 이름을 가진 디렉토리의 파일 목록 확인
ls  [a-f]*				# a-f 중 하나

### 특수 문자 ~ 와 -

cp *.txt ~/ch3			# .txt 로 끝나는 모든 파일을 홈 디렉토리 아래ch3 디렉토리로 복사
cd  -					# 이전 디렉토리 이동

### 특수문자 ; 과 |

date;  cal;  ls			# 연속 실행
ls  -l  /etc  | more	# (파이프) 왼쪽 명령의 실행결과를 오른쪽 명령의 입력으로 전달

### 특수문자 ' ' ," ",``, \

echo $SHELL				# 변수 내용 출력 (문자열을 묶지 않으면 “”에 묶인 것과 동일하게 작동)
echo '$SHELL'			# 그대로 출력 (echo \$SHELL 와 동일한 결과)
echo "$SHELL"			# 변수 내용 출력
echo "\$SHELL"			# $ 무력화
echo  `date`			# date명령 수행(` `안에는 명령어가 들어가야함)

### 특수문자 >, <, >>

ls -al > test			# >	명령 실행결과를 test 파일에 저장(기존내용 없앰)
ls -al >> test			# >> 명령 실행결과를 test 파일 끝에 덧붙임
ls -al 2> test			# 2> 오류 메세지를 test파일에 저장
ls hi 2>> test			# 2>>  오류 메세지를 test파일의 끝에 덧붙임.

# 2>/dev/null(표준에러를 /dev/null로 redirection 한다 (에러메시지를 null로) 을 사용하면 원하지 않는 
# 오류 메세지를 생략시킬수 있다.

cat test   				# cat 명령이 파일을 읽어서 출력하는 기능은 <를 생략한 것
cat < test				# < 파일로부터 입력받음

입출력 방향 변경

# 출력 리다이렉션은  1> 기호로도 사용 가능하다.( 여기서 1은 출력을 담당하는 파일의 file descriptor ) 
# 입력 리다이렉션은  0< 기호로도 사용 가능하다.( 여기서 0은 입력을 담당하는 파일의 file descriptor )

# <, >, >>의 좌측 값을 설정하지 않으면 기본값이 사용된다.
# <의 좌측 기본값은 0, >와 >>의 좌측 기본값은 1이다.

# File descriptor : 쉽게 말하자면, 유닉스 기반 시스템에서 모든 것은 파일이다. 유닉스 기반 시스템에서 프로세스가 특정 파일에 
# 접근할때 File descriptor 라는 개념을 사용한다.



## Wildcard: 파일/디렉토리를 선택할 때 이름의 패턴을 지정할 때 쓰임

?: 임의의 한 문자.
# ex) a?c: aac, abc, adc, …

*: 임의의 여러 문자(0개도 가능) 
# ex) a*c: ac, aac, abbbbc, abdec, …

[ ]: 안의 문자 중 아무거나 하나 일치. -로 범위 설정이 가능하다. 주의: 쉼표로 구분하지 않는다. 쉼표가 들어가면 쉼표 문자를 매치한다
# ex1) a[123]b: a1b, a2b, a3b
# ex2) a[1,2]b: a1b, a2b, a,b, … (a,b라는 이름의 파일이 매치됨)
# ex3) a[0-3]b: a0b, a1b, a2b, a3b
# ex4) a[가-힣]b: a가b, a눅b, a릻b, …
# ex5) a[a-z0-9]b: aab, abb, acb, a0b, a1b, a2b, …
        
{ }: 안의 문자열 중 아무거나 하나 일치. 쉼표로 구분한다.
# ex) a{12,13}b: a12b, a13b
    
[! ]: [ ]의 반대. 안에 든 문자들은 매치하지 않는다.
# ex1) a[!a-z]b: a0b, a1b, …
# ex2) a[!a-z0-9]b: a가b, a,b, a.b, …

배시셸 환경 설정

### 셸 변수와 환경 변수
set								# shell 변수, 환경변수 확인
env								# 환경 변수만 확인
AVAR=test; export AVAR			# shell 변수를 환경변수로 지정
export AVAR			  
export AVAR=test		
export -n AVAR        			# 환경변수를 shell 변수로 바꾸기
								# SHELL 변수와 환경 변수는 입력값을 default로 문자열로 받아들임. 
                            
echo $AVAR	          			# 변수 출력 (printf ”%s\n” $AVAR)
unset $AVAR						# 변수 삭제

앨리어스와 히스토리

### 앨리어스

alias							# 현재 alias로 지정되어 있는 것들을 보여줌
alias A명령어=‘B명령어’			# 별칭 지정 명령어 - ‘B명령어’ 를 A명령어로 호출가능함.
alias ls=’ls -iF’				# ’ls -iF’를 ls로 명령어를 교체
alias -p                   	    # 현재 설정된 alias 목록 출력
unalias ls						# 교체한 명령어 ls 해제

alias  home=’cd;pwd;ls’			# ’cd;pwd;ls’를  home로 명령어를 교체
alias  home
unalias home					# 교체한 명령어 home 해제

### 히스토리

history							# 입력한 명령어 history가 모두 출력
history -w						# 명령어 버퍼의 내용을 ~/.bash_history에 저장
history -c						# 명령어 버퍼의 내용을 삭제
history -r						# ~/.bash_history의 내용을 명령어 버퍼로 복사

!!								# 마지막 명령 반복
!3								# 3번째 명령 실행(history 내역에서)
!-3								# 현재 명령에서 뒤로 3번째 명령 수행
!ech							# ech로 시작하는 명령어 중 가장 최근 명령어 실행

gcc -o aa main.c				# main.c의 목적 파일을 aa라는 이름으로 생성
^aa^bb							# 마지막 명령의 aa를 bb로 대체하여 다시 실행

set -o vi						# 명령어 편집기로 vi 사용 설정
 - [ESC] + v		 			# 명령어를 vi editor로 수정할 수있음.
   								# :wq 로 저장 후 vi editor를 벗어 날 때 vi로 편집한 명령어가 수행됨.

# 명령어가 매우 길때 방향 키를 이용하여 수정하기 힘들때 vi의 편집기능으로 명령어를 수정하는 것이 매우 효율적이다. 
# 만약 매번 터미널에서 set -o vi 명령을 입력하는 것이 귀찮다면,
# .bash_profile에 set -o vi 를 입력 후 source 명령으로 실행한다.

프롬프트

### 프롬프트

echo $PS1						# PS1(프롬프트의 값)을 출력
PS1=’Unix ]# 프롬프트를 Unix]로 대체
PS1=[$LOGNAME]# 프롬프트를 [사용자]로 바꿈
PS1=$PWD [\!]PS1=`uname –n` \! $ “

			\u				# 현재 사용자 이름 ($LOGNAME 과 동일)
			\h				# 호스트 이름 (`uname –n` 명령과 동일)
			\w				# 현재 작업 디렉토리 full path 표시 (홈디렉토리는 ~로 표시)
			\W				# 현재 작업 디렉토리만 표시
			\t				# 24시간 형식으로 나타낸 시각(HH:MM:SS)
			\A				# 24시간 형식으로 나타낸 시각(HH:MM)
			\e				# ASCII 이스케이프 문자. 터미널 창에 고급 옵션을 전달
			\[				# 출력하지 않을 문자열의 시작 표시, 컬러표시
			\]				# 출력하지 않을 문자열의 끝 표시, 컬러표시
            \!				# 히스토리 번호
            
export PS1='\[\e[35;2m\][\u@\h \W]\$ \[\e[0;0m\]'

과제

1. 로그인 셸을 대시셸로 변경하려고 chsh 명령을 실행하였는데 다음과 같은 오류가 발생했다. 원인은 무엇인가?

$ chsh –s dash user1
  1. 시스템에 대시셸이 없다
  2. 대시셸의 이름은 dsh다.
  3. chsh –s user1 dash로 실행해야 한다.
  4. 바꾸려는 셸을 절대 경로로 지정한다.

정답 : 4

2. 현재 디렉터리에 파일이 다음과 같이 있을 때 ls a?.exe 명령을 실행하였다. 이 명령의 실행 결과에서 제외되는 파일은 어는 것인가?

  1. a.exe
  2. a1.exe
  3. a2.exe
  4. aa.exe

정답 : 1

3. 현재 디렉터리에서 숫자로 시작하는 파일을 모두 찾아 상세 정보를 출력하는 리눅스 명령어는?

정답 : ls -la [0-9]*

4. 사용자 계정의 로그인 셸을 저장하고 있는 파일은 무엇인가?

정답 : /etc/passwd

5. 현재 a.txt 파일의 내용이 다음과 같다. 이 상태에서 아래 명령을 수행하면 a.txt 파일의 내용은 어떻게 되는가?

 $ ls /tmp >> a.txt 
  1. 아무 변화없이 기존 내용이 유지된다.
  2. 기존 내용은 삭제되고, /tmp 디렉터리의 내용이 저장된다.
  3. 파일 내용이 모두 삭제되고 빈 파일이 된다.
  4. 기존 내용은 남아있고, /tmp 디렉터리의 내용이 추가된다

정답 : 4

7. 현재 디렉터리에 있는 모든 파일의 상세 정보는 ls.out 파일에, 오류 메시지는 ls.err 파일 에 저장하시오.

정답 : ls -la > ls.out 2> ls.err

8. 특정 셸 변수의 값은 echo 명령으로 출력할 수 있다. 전체 환경 변수를 출력하는 env 명령의 결과에서 특정 환경 변수(예 : SHELL)만 골라서 출력하려면 어떻게 해야 하는지 설명하시오.

정답 : env | grep SHELL

9. 가장 최근에 사용한 cp 명령을 재실행하시오.

정답 : !cp

10. ls 명령 실행시 숨김 파일도 모두 출력되도록 앨리어스 설정하시오.

정답 : alias s='ls -la'

profile
공부한 것 기록용

0개의 댓글