- 받았던 연습문제 풀이.
-> 디렉터리의 하드 링크 기본값이 2인 것은. 와 .. 때문
-> 상대경로 작성 시 현재 디렉터리에 있다는 것을 확실하게 하기 위해서 ' ./ '를 표기하는 것도 좋다.
-> rm -r 옵션은 디렉터리를 삭제할 수 있게 하는 옵션.
-> rm 명령어는 기본 옵션으로 -i가 적용되어 있다 : 삭제 시 대화 형식으로 물어본다.
-> whereis는 실행 파일, 매뉴얼 파일, 소스코드 파일의 위치 3종, which는 실행파일 위치만 출력
- 리눅스에서의 문서 편집
-> 초반에 잠깐 쓴 gedit은 대다수의 서버 OS, 즉 코어 버전에서 사용하기엔 어렵다. 리소스도 많이 먹고, 코어 버전에서는 명령어로 운영하기 때문.
-> 그래서 사용하는 것이 VI Editor. 대충 키보드로만 조작할 수 있는 메모장이라고 생각하면 된다.
-> 기능이 더 다양한 emacs라는 것도 있지만 사용법이 어렵고 복잡해서 논외.
vi [파일명]
-> 이미 존재하는 파일이면 그 파일을 열고, 없는 파일이면 빈 파일을 연다.
-> 실수로 빈 파일에 들어갔으면 그대로 나오면 사라진다.
-> 그냥 vi만 입력하면 이름없는 빈 파일을 연다
- 모드형과 비모드형
모드형 : 입력/명령 모드가 구분된다.
-> 같은 키를 눌러도 모드에 따라 다르게 작동
비모드형 : 입력/명령 모드가 구분되어 있지 않다.
-> 비교 : 메모장은 비모드형이다. vi 편집기는 모드형이다.
입력 모드에서 명령 모드로 : ESC
- 입력 모드로 진입하는 키
i(insert) : 커서 앞에 입력하는 모드로
a(append) : 커서 뒤에 입력하는 모드로
o : 다음 행에 새로운 행을 만들어 입력하는 모드로(대충 Enter 치고 쓰는 것)
I : 커서가 있는 행의 맨 앞에 입력하는 모드로
A : 커서가 있는 행의 맨 뒤에 입력하는 모드로
O : 커서가 있는 행의 위에 새로운 행을 만들어 입력하는 모드로
- 명령 모드에서, 일명 '마지막 행 모드'
/[문자열] : 정방향 검색
?[문자열] : 역방향 검색
' : '
-> :q - 변경한 것이 없을 때 에디터 종료. :q! 로 강제 종료할 수 있지만, 수정 사항은 저장되지 않는다.
-> :wq - 변경 사항을 저장하고 에디터 종료
-> : wq! - 변경 사항을 저장하고 에디터 강제 종료
-> :w - 변경 사항 저장
-> :set nu : 행 번호 보이기
명령 모드에서
^ : 커서를 행의 처음으로 이동. ' 0 '도 같은 기능
$ : 커서를 행의 마지막으로 이동
- : 위 행의 처음으로 이동
+ : 다음 행의 처음으로 이동
화면 이동하기(명령 모드에서) : 여기에서 ^는 Ctrl를 의미
^d : 반 화면 아래로
^u : 반 화면 위로
^f : 한 화면 아래로
^b : 한 화면 뒤로(위로)
^y : 한 행 위로
^e : 한 행 아래로
:set nu 설정 후 확인해보면 이해하기 쉽다.
특정 행으로 바로 이동하기
:set nu 설정 후 확인해보면 이해하기 쉽다.
[행 번호] G - 해당 행으로 이동
-> :[행 번호] 로도 가능
G - 파일의 마지막 행으로 이동
-> :$ 로도 가능
- 내용 수정하기
r[문자] : 커서에 있는 문자를 변경(문자 단위)
cw[문자열] : 커서 위치부터 단어의 끝까지 입력 문자열로 변경
-> *cw[문자열] : 커서 위치부터 *개의 단어 수정
cc : 행의 내용 모두 수정
C : 커서 위치부터 행의 끝까지 수정
x : 커서 위치의 문자 삭제
-> *x : *글자 삭제
dd : 현재 행 삭제(정확히는 잘라두는 것. p로 붙일 수 있다)
-> *dd : *행 삭제
u : 명령 취소(되돌리기)
-> U : 해당 행에서 한 모든 명령 취소
yy : 커서가 위치한 행 복사
-> *yy : *행 복사
p : 현재 행 아래쪽에 붙인다
-> P : 현재 행 위쪽에 붙인다
:e! - 마지막으로 저장한 이후의 수정 내용을 모두 날리고 새로 작업
복사/잘라내기 등의 내용은 버퍼에 저장된다.
-> 버퍼는 1개만 저장됨.
-> 복사를 여러 번 했으면 마지막 복사 내용만 저장되어 있다.
여러 개를 복사해야 할 때 사용하는 것이 네임드 버퍼
-> 위에서 언급한 버퍼는 언네임드 버퍼
-> 버퍼에 고유한 이름을 붙여 각기 다른 버퍼에 저장
-> 버퍼 이름은 알파벳과 숫자
"[버퍼 이름]yy 로 네임드 버퍼 복사 사용
ex : "ayy -> a라는 버퍼에 복사 내용 저장
"[버퍼 이름]p 로 네임드 버퍼 붙여 넣기 사용
마지막 행 모드에서 복붙잘
-> 범위 지정 가능
' : ' 입력으로 마지막 행 모드 진입
1, $ -> 첫 행에서 마지막 행까지 범위 지정
= 1, %
1,. -> 첫 행부터 커서가 있는 행까지
.,$ -> 커서가 있는 행부터 마지막까지
n,m -> n행부터 m행까지
:2,4y -> 2행에서 4행까지 복사
:2,4d -> 2행에서 4행까지 잘라내기
그냥 :y 는 작동 안 됨. 범위 지정할 경우에만 사용
- 검색하기
:, /, ? 로 마지막 행 모드로 진입
: 는 편집할 때 사용
/[문자열] 로 아래 방향으로 검색
?[문자열] 로 역방향으로 검색
-> n으로 다음 검색으로 넘어갈 수 있다
-> N으로 이전 검색으로 돌아갈 수 있다
-> 검색 기본 방향 기준으로 다음/이전 검색으로 이동하는 것.
-> / 로 검색 시 '다음 검색'은 아래로 내려가고, '이전 검색'은 위로 올라간다.
-> ? 로 검색 시 '다음 검색'은 위로 올라가고, '이전 검색'은 아래로 내려간다.
- 마지막 행 모드에서 치환 : 범위 지정
:r [파일] -> 지정 파일을 읽어 들여 현재 커서 위치에 삽입. 경로명으로도 파일 지정 가능
:e [파일] -> 지정 파일로 전환(전환 전에 저장할 것)
:n -> vi 시작 시 여러 파일을 지정할 수 있는데, 다음 파일로 넘어간다.
vi에서 쉘 명령어 실행하기
:! [명령어] -> vi 작업을 잠시 중단하고 쉘 명령어 실행. 돌아오려면 enter
:sh -> vi를 잠시 빠져나가서 쉘 명령 실행. 돌아오려면 exit 입력
기타 명령 키는 쓱 훑는 정도만
- vi의 환경 설정 방법
-> 매번 환경 세팅하기 번거롭다. 홈 디렉터리에 .exrc 파일로 저장
-> 여기에 환경 설정 명령어를 적어놓으면 vi를 열 때마다 설정된다
-> set nu만 기억하면 된다
같은 기능이라면 여러 가지가 있어도 하나만 알아놓으면 된다.
- 쉘 사용하기
응용 프로그램과 쉘, 커널의 3단계
그 중 응용 프로그램은 그냥 터미널이라고 생각하면 되고, 커널은 실제로 하드웨어를 컨트롤.
그런데 App-Kernel이 직통으로 소통할 수는 없으니, 그 사이에 있는 것이 쉘.
쉘의 기능 3가지 : 명령어 해석기, 프로그래밍, 사용자 환경 설정
프로그래밍은 쉘 스크립트 때 진행(bash script)
명령어 해석기
-> 사용자와 커널 사이에서 명령을 해석하며 전달하는 인터프리터/번역기 기능
계정 정보가 저장되어 있는 파일(/etc/passwd)의 계정 정보 행을 보면, 마지막 필드에 nologin으로 되어 있으면 로그인 불가 계정
-> 대다수의 시스템 계정
정책과 (해시값으로) 패스워드가 저장된 파일 /etc/shadow
로그인 프로세스
centos8 부팅 -> ID 요청/응답 -> 비밀번호 요청/응답 -> CentOS가 해시 알고리즘에 입력받은 비밀번호를 넣어 저장된 해시값과 동일하게 나오면 로그인 승인 -> 로그인 쉘 실행
여러 가지 쉘 중 CentOS의 기본 쉘은 배시 쉘
본, C, 콘, 배시 쉘 등 -> 자격증 시험 아니면 굳이 알 필요 X
배시 쉘의 기본 프롬프트 $
user1:x:1000:1000:user1:/home/user1:/bin/bash
마지막 필드 /bin/bash로 기본 쉘을 알 수 있다.
chsh : 기본 셸 바꾸기
-l : /etc/shells 파일에 지정된 쉘 출력
-s shell : 지정한 쉘로 로그인 쉘 변경
바꿀 수 있는 쉘의 종류는 /etc/shells 파일에 저장되어 있다.
쉘 내장 명령 : 별도의 설치 필요 없음. 내장 명령을 가지고 있다. 별도의 실행 파일 없다.
echo
echo -n : 개행 문자 무시
쉘 특수 문자 사용하기
*, ?, |, . , [], ~, ' ', " ", `
* -> 임의의 문자열을 나타내는 특수문자. 0개 이상의 문자로 대체
? -> 길이가 1인 임의의 한 문자
[ ] -> 대괄호 안에 포함된 문자 중 하나를 나타냄.
-> [123] : 1, 2, 3 중 하나
-> [1-3] : 1~3 중 하나
~ -> 사용자 홈 디렉터리
- -> 작업했던 이전 디렉터리
: 와 | -> 명령과 명령을 연결
전자는 연결된 명령을 왼쪽부터 차례로 실행
후자는 왼쪽 명령의 실행 결과를 오른쪽의 입력으로 전달
' ' -> 문자를 감싸서 문자열로 만들고, 모든 특수 문자의 기능 없앰
" " -> 상동. 하지만 $, ` `, \를 제외한 나머지 특수 문자의 기능 없앰
\ -> 특수문자 앞에 사용. 해당 특수문자의 효과를 없애고 일반 문자처럼 처리
<, >, >> -> 입출력의 방향을 바꾸는 특수문자. [명령어] > [파일명] 이러면 명령어의 실행 결과를 파일에 저장
uname : 장치명 출력 명령어
- 입출력 Redirection
명령의 결과를 표준 출력 장치인 모니터가 아니라, 파일에 리다이렉션
표준 출력 Redirection
명령 1> 파일 이름 or 명령 > 파일이름 <- 덮어 씌우기
명령 1>> 파일 이름 or 명령 >> 파일이름 <- 기존 내용 다음 행에 추가
set -o noclobber : 덮어 씌우지 못하게 설정. 반대로 풀려면 +o
cat > 파일명 : 이 명령어를 입력하면 입력 모드로 들어간다. 내용을 입력 후 Ctrl + d를 누르면 입력했던 내용들이 파일에 저장된다. 직접 입력한 내용을 파일에 저장하기.
표준 오류 Redirection
명령 2> 파일 이름 <- 명령으로 인한 오류 메시지를 파일에 덮어 씌움
명령 2>> 파일 이름 or 명령 <- 명령으로 인한 오류 메시지를 파일의 기존 내용 다음 행에 입력
응용
ls ./abc > ls.out 2>ls.err <- 에러가 발생하지 않으면 출력 내용을 ls.out에 저장하고, 에러가 발생하면 ls.err에 저장
ls /abc 2> /dev/null <- 오류 내용을 null 인터페이스(쓰레기통)로 보낸다.
ls ./abc > ls.out 2>&1 <- 출력 내용을 ls.out에 저장하되, 에러도 ls.out에 저장. &1이 앞의 파일을 의미하는 것.
앰퍼센드(&)
입력 Redirection
명령어 0< 파일명 or 명령어 < 파일명 <- 파일 내용을 명령어의 입력으로
-> 항상 쓰던 'cat 파일명'과 같다.
Redirection 실습
1. 특수문자 *를 사용해 ch4 디렉터리의 모든 파일을 /root/test 디렉터리로 복사
-> cp ../linux_ex/ch4/* .
2. uname -n은 호스트 이름을 출력하는 명령어다.
특수문자 ` `(백쿼터)를 사용해 This system name is ***와 같이 출력되도록 명령 실행
-> echo "This system name is `uname -n`"
3. 2번에서 실행한 결과를 출력 리다이렉션으로 un.out 파일에 저장
-> echo "This system name is `uname -n`" > un.out
4. 현재 디렉터리의 파일 목록을 출력 리다이렉션으로 ls.out 파일에 저장
-> ls > ls.out
5. un.out, ls.out 파일의 내용을 모두 출력 리다이렉션을 사용해 u.dat 파일에 추가.
-> cat un.out ls.out >> u.dat
IT 시스템에서는 값을 그대로 사용할 수 없다. 변수에 담아서 호출해야 한다.
리눅스의 변수로는
1. 환경 변수(전역 변수)
-> 모든 사용자/쉘에서 사용 가능한 변수
2. 쉘 변수(지역 변수)
-> 특정 사용자/쉘에만 국한된 변수
set : 쉘 변수와 환경변수 모두 출력
env : 환경변수 출력
환경변수는 통상적으로 대문자 사용
history : 저장된 히스토리 출력
그냥 변수=값 입력하면 그건 지역변수. 다른 사용자가 사용 못함.
export [-n] [쉘 변수] : -n을 붙이면 환경 변수를 쉘 변수로 바꾸는 것. 안 붙이면 쉘 변수를 환경 변수로 바꾸는 것
unset [변수명] : 지정 변수 해제
환경변수 설정 후 다른 사용자로 가보니 적용 안되어 있다.
-> 사용자마다 환경 변수가 저장된 파일이 사용자 홈 디렉터리에 있다.
-> 전체 사용자에게 적용되는 환경변수가 포함된 파일이 따로 있다.
환경변수가 포함된 파일이 2가지라는 것.
export로 만든 환경 변수는 후자의 파일에 없는 것.
-> export 명령은 현재 로그인한 사용자 계정에 국한된다.
-> 쉘을 변경할 경우에 대비한 것.
사용자 전환 시
su user1 : 기존 사용자의 환경 그대로 사용자명만 user1으로 바뀐다.
su -user1 : 환경 정보를 완전히 user1으로 적용, user1으로 로그인
그렇다면
1. su user1 -> export SOME : 찾아보면 적용되긴 했다. 하지만 로그아웃하면 초기화된다.
2. su - user1 -> export SOME : 작동 안 됨. 애초에 SOME을 모름.
홈 디렉터리의 .bashrc, .bash_profile을 보면 로그아웃 초기화에 대비해 환경변수를 세팅하는 과정이 섞여있다.
5교시 다시 듣기(쉘)
'교육' 카테고리의 다른 글
[26일 차] 21.08.25 : Linux Server 5 (0) | 2021.08.25 |
---|---|
[25일 차] 21.08.24 : Linux Server 4 (0) | 2021.08.24 |
[23일 차] 21.08.20 : Linux Server 2 (0) | 2021.08.21 |
[22일 차] 21.08.19 : Windows Server 11, Linux Server 1 (0) | 2021.08.19 |
[21일 차] 21.08.19 : Windows Server 10 (0) | 2021.08.18 |
댓글