본문 바로가기

CentOS/Study

[리눅스]12.18 교육 정리 2

반응형

4교시 11:50 ~ 13:30>
편집기 종류>
- vi 편집기(Visual Editor)

vi 편집기는 유닉스 계열에서 가장 많이 사용되는 텍스트 편집기이다. 1976년 빌 조이(Bill Joy)가 개발하였다. vi 편집기는 한 화면을 편집하는 비쥬얼 에디터(Visual Editor)이다.

- vim(vi improved)

브람 무레나르(Bram Moolenaar)가 vi 편집기와 호환되면서 독자적으로 다양한 기능 추가하여 만든 편집기이다. 편집시에 다양한 색상을 이용하여 가시성을 높였으며, 패턴 검색시에 하이라이트 기능을 제공하여 빠른 검색이 가능하게 해준다.

- emacs 편집기(Editor Macros)
리처드 스톨만이 개발한 고성능 문서 편집기이다. 매크로 기능이 있는 텍스트 교정 및 편집기이다. 초기 리처드 스톨만에 의해 개발 되었고, 이후에 제임스 고슬링(James Gosling)이 LISP(LISt Processor) 언어에 의한 환경 설정 및 에디터 기능을 확장시킬 수 있는 기능을 포함하여 '고슬링 이맥스'라는 이름으로 배포하였다.
- pico(Pine Composer)
워싱턴 대학의 Aboil Kasar가 개발한 유닉스 기반의 텍스트 에디터로 pine 이메일 클라이언트 프로그램에 통합되어서 배포되었다. pico의 기본 인터페이스는 윈도우의 메모장(Notepad)와 유사하여 매우 단순한다.
- nano
pico의 복제 버전이다. nano는 pico의 기능 이외에도 마우스 지원, 자동 들여쓰기, 정규 표현식 검색, 구문 강조 등의 기능을 추가로 제공한다.

[root@server1 test]# ls -lh $(which vi)
-rwxr-xr-x. 1 root root 1.2M Jun 19  2020 /usr/bin/vi
[root@server1 test]# ls -lh $(which vim)
-rwxr-xr-x. 1 root root 3.0M Jun 19  2020 /usr/bin/vim
[root@server1 test]#

vi>
- 방향 이동
      k(↑)
h(←)  j(↓)  l(→)

- Insert
- i : 현재 커서 위치로부터 입력한다.
- I : 현재 커서가 있는 행의 처음부터 입력한다. 

- Append
- a : 현재 커서 위치 이후부터 입력한다.
- A : 현재 커서가 있는 행의 마지막부터 입력한다.

- Open Line 
- o : 현재 커서가 있는 아래행부터 입력한다.
- O : 현재 커서가 있는 위행부터 입력한다.

- Delete
- x: 현재 커서 한 글자 삭제
- dw: 현재 커서 앞의 한 단어 삭제
- db     : 현재 커서 뒤로 한 단어 삭제
- d0/d^: 현재 커서부터 라인의 처음까지 삭제
- d$: 현재 커서부터 라인의 마지막까지 삭제
- dd: 현재 라인 삭제
- 3dd: 현재 커서 라인을 포함해서 아래로 3개 라인 삭제
- :1,3d: 1번째 라인부터 3번째 라인까지 삭제
- dG: 현재 커서 라인부터 문서 마지막까지 삭제
- d1G: 현재 커서 라인부터 문서 처음까지 삭제

- Undo
- u: 바로 이전에 상태로 되돌림
- U: 라인전체에 대해 이전 상태로 되돌림

- Move
- 1G: 문서의 첫 번째 라인으로 이동 ( gg )
- G: 문서의 마지막 라인으로 이동

5교시 14:30 ~ 15:30>
- Copy / Yank & Paste
- yy: 현재 라인 복사(Yank)
- 3yy: 현재 커서 라인 포함해서 하위의 3개의 라인 복사
- :1,3 co 5: 첫 번째 라인부터 3번째 라인까지 복사하여 5번째 라인 아래에 붙이기
- :1,3 m 5: 첫 번째 라인부터 3번째 라인까지 5번째 라인 아래에 이동하기
- p : 현재 커서 아래에 붙이기
- P: 현재 커서 위에 붙이기

- Serch
- /New: 현재 커서 라인부터 찾으려는 문자열(예: New) 검색
- ?New: 문서의 마지막 라인부터 찾을려는 문자열(예: New) 검색
- n: n(Next), 정방향다음번째 검색
- N: N(Next), 역방향으로 다음번째 검색
- / 정방향 검색 
- ? 역방향 검색

-Save & Quit
- :w/* w(write), 현재 파일에 저장 하기 */
- :w filename/* 다른 이름으로 저장 하기 */ 
- :w!(root use)  /* 현재 파일에 강제적으로 저장 하기 */
- :w! file       /* 현재까지의 변경사항을 file로 저장 */
- :3,10w file    /* 3번째 라인부터 10번째 라인까지 file로 저장 */
- :q             /* q(quit), 편집기 종료 */ 
- :q!            /* 저장 안하고 편집기 종료 */
- :wq/* 저장하고 편집기 종료 */
- :wq!(root Use)/* 현재 파일에 강제적으로 저장하고 편집기 종료 */
- :r file        /* file의 내용을 현재 커서 위치에서 읽어 들임 */
- :!CMD          /* vi 편집기를 빠져나가지 않은 상태에서 쉘 명령어를 수행 */

- vi 환경설정
- : set all       (Last Line Mode)
- : set number    (: set nu)
- : set nonumber  (: set nonu)
- : set tabstop=10/* 탭간격 조정 */
- : set nu/* 라인 번호 달기 */
- : set noshowmode/* 상태표시행에 모드를 표시하거나 표시하지 않거나를 설정 */
- : set directory=/tmp /* 지정된 기능 변경 */

- 쉘
쉘은 PATH 변수에 정의된 모든 디렉토리를 참고 하여 명령어를 찾아 실행한다.
쉘은 파이프, 입/출력 리다이렉션, 백그라운드 프로세싱(Background Processing)을 설정한다.
쉘은 명령어의 모임인 별칭(alias), 쉘 함수(Function) 등을 찾아 실행시킨다.
쉘은 TERM 변수를 사용하여 서로 다른 터미널 환경을 초기화 한다.
쉘은 명령어 자동 완성 기능을 사용하여 입력한 명령어를 기록한다.
쉘은 사용자 환경 정의 파일을 가지고 사용자의 환경을 초기화 한다.

- 파일 기술자(File Description)
[root@server1 ~]# ps
    PID TTY          TIME CMD
   1573 pts/0    00:00:01 bash
  25021 pts/0    00:00:00 bash
  49904 pts/0    00:00:00 ps
[root@server1 ~]# cd /proc/1573/fd
[root@server1 fd]# ls -l
total 0
lrwx------. 1 root root 64 Dec 18 09:38 0 -> /dev/pts/0
lrwx------. 1 root root 64 Dec 18 09:38 1 -> /dev/pts/0
lrwx------. 1 root root 64 Dec 18 09:38 2 -> /dev/pts/0
lrwx------. 1 root root 64 Dec 18 15:22 255 -> /dev/pts/0
lr-x------. 1 root root 64 Dec 18 09:38 3 -> '/var/lib/sss/mc/passwd (deleted)'
lrwx------. 1 root root 64 Dec 18 09:38 4 -> 'socket:[37456]'
[root@server1 fd]# cd /proc/25021/fd
[root@server1 fd]# ls -l
total 0
lrwx------. 1 root g1 64 Dec 18 12:08 0 -> /dev/pts/0
lrwx------. 1 root g1 64 Dec 18 15:24 1 -> /dev/pts/0
lrwx------. 1 root g1 64 Dec 18 15:24 2 -> /dev/pts/0
lrwx------. 1 root g1 64 Dec 18 15:24 255 -> /dev/pts/0
lr-x------. 1 root g1 64 Dec 18 15:24 3 -> /var/lib/sss/mc/passwd
lrwx------. 1 root g1 64 Dec 18 15:24 4 -> 'socket:[122480]'
[root@server1 fd]#


0 : stdin : Standard Input, 표준입력, 특별히 입력이 지정되지 않은 경우 키보드에서 입력을 받는다.
1 : stdout : Standard Ouput, 표준출력, 특별히 출력이 지정되지 않은 경우 정상적인 출력 결과를 모니터로 출력된다.
2 : stderr : Standard Error, 표준에러, 특별히 출력이 지정되지 않은 경우 에러의 출력 결과를 모니터로 출력된다.

6교시 15:40 ~ 16:40>
표준입력(0, stdin) -----> SHELL(bash) -----> 표준출력(1, stdout)
(EX: keyboard)              |               (EX: Screen)
    |
    V
       표준에러(2, stderr)
       (EX: Screen)
- 출력 리다이렉션    
CMD   >  filename /* 표준출력, 덮어쓰기 기능 */
CMD  1>  filename /* 표준출력, 덮어쓰기 기능 */
CMD   >> filename/* 표준출력, 이어쓰기 기능 */
CMD  1>> filename/* 표준출력, 이어쓰기 기능 */

[root@server1 test]# echo 111 > file1
[root@server1 test]# cat file1
111
[root@server1 test]# cat < file1
111
[root@server1 test]# echo 555 > file1
[root@server1 test]# cat file1
555
[root@server1 test]# echo 666 >> file1
[root@server1 test]# cat file1
555
666
[root@server1 test]#

<terminal01>
[root@server1 test]# while true
> do
> echo "=====$(date)=====" >> /test/file1
> echo
> sleep 1
> done

<terminal02>
[root@server1 test]# tail -f file1
=====Sat Dec 18 16:19:55 KST 2021=====
=====Sat Dec 18 16:19:56 KST 2021=====
=====Sat Dec 18 16:19:57 KST 2021=====
=====Sat Dec 18 16:19:58 KST 2021=====
=====Sat Dec 18 16:19:59 KST 2021=====
=====Sat Dec 18 16:20:00 KST 2021=====
=====Sat Dec 18 16:20:01 KST 2021=====
=====Sat Dec 18 16:20:02 KST 2021=====
=====Sat Dec 18 16:20:03 KST 2021=====

7교시 16:50 ~ 17:50>
에러 리다이렉션>
[root@server1 test]# ls /nodir
ls: cannot access '/nodir': No such file or directory
[root@server1 test]# echo $?
2
[root@server1 test]#

[root@server1 test]# ls /nodir 2> err
[root@server1 test]# cat err
ls: cannot access '/nodir': No such file or directory
[root@server1 test]#

[root@server1 test]# ls /var /nodir > list 2>&1
[root@server1 test]# cat list
ls: cannot access '/nodir': No such file or directory
/var:
account
adm
cache
crash
db
empty
ftp
games
gopher
kerberos
lib
local
lock
log
mail
nis
opt
preserve
run
spool
tmp
yp
[root@server1 test]#

>file 2>&1 : 표준출력 및 표준오류을 리다이렉션하여 동일한 파일을 덮어씀
>>file 2>&1     : 표준출력 및 표준오류을 리다이렉션하여 동일한 파일에 첨부

Pipe>
<terminal01>
[root@server1 test]# while true
> do
> echo
> echo "date" | tee -a file.log
> sleep 1
> echo
> done

date


date

<terminal02>
[root@server1 test]# tail -f file.log
date
date
date

tlog

[TERM1] 첫번째 윈도우
# tty
/dev/pts/1
--> TERM3 에서 입력하는 내용과 출력하는 내용이 그대로 화면에 출력 된다.
Bash
[TERM2] 두번째 윈도우
# tty
/dev/pts/2
Bash
[TERM3] 세번째 윈도우
# script -a /dev/null | tee /dev/pts/1 | tee /dev/pts/2 
# ls 
# date 
# cal 
# exit

8교시 18:00 ~ 18:30>
bash 기능>
[root@server1 test]# set -o
allexport            off
braceexpand          on
emacs                on/* 기본적인 편집기 선언 */
errexit              off
errtrace             off
functrace            off
hashall              on
histexpand           on
history              on
ignoreeof            off/* 로그아웃 방지 기능 선언 */
interactive-comments on
keyword              off
monitor              on
noclobber            off/* 덮어쓰기 방지 기능 선언 */
noexec               off
noglob               off
nolog                off
notify               off
nounset              off
onecmd               off
physical             off
pipefail             off
posix                off
privileged           off
verbose              off
vi                   off/* 기본적인 편집기 선언 */
xtrace               off
[root@server1 test]#

ctrl + d (eof) 방지>
[root@server1 test]# set -o ignoreeof
[root@server1 test]# set -o | grep eof
ignoreeof       on
[root@server1 test]#
[root@server1 test]# Use "exit" to leave the shell.

덮어쓰기 방지>
[root@server1 test]# echo 1111 > file10
[root@server1 test]# echo 2222 >> file10
[root@server1 test]# echo 3333 > file10
[root@server1 test]# set -o | grep nocl
noclobber       off
[root@server1 test]# set -o noclobber
[root@server1 test]# set -o | grep nocl
noclobber       on
[root@server1 test]# echo 4444 > file10
bash: file10: cannot overwrite existing file
[root@server1 test]#

지역변수 선언 및 확인>
<terminal01>
[root@server1 test]# var=5
[root@server1 test]# echo $var
5
[root@server1 test]#

<terminal02>
[root@server1 ~]# echo $var

[root@server1 ~]#

지역변수 덮어쓰기>
[root@server1 test]# var=5
[root@server1 test]# echo $var
5
[root@server1 test]# var=hello
[root@server1 test]# echo $var
hello
[root@server1 test]#

환경변수 선언 및 확인>
[root@server1 test]
[root@server1 test]# bash
[root@server1 test]# echo $var
hello
[root@server1 test]# bash
[root@server1 test]# echo $var
hello
[root@server1 test]# var=centos
[root@server1 test]# echo $var
centos
[root@server1 test]# exit
exit
[root@server1 test]# echo $var
hello
[root@server1 test]#

환경변수 해제>
[root@server1 test]# echo $var
hello
[root@server1 test]# unset $var
[root@server1 test]#

환경 변수는 자신이 선언한 쉘의 서브쉘에서 적용되는 것이다. 상위의 쉘에는 적용되지 않는다.>

env와 set의 차이점>
- set : 모든 변수에 대해 출력 (지역변수 + 환경변수)
- env : 환경변수만 출력

[root@server1 test]# var1=centos
[root@server1 test]# set | grep ^var
var1=centos
[root@server1 test]# env | grep ^var

[root@server1 test]#

반응형

'CentOS > Study' 카테고리의 다른 글

[리눅스]01. 15 교육 정리  (0) 2022.01.16
[리눅스]01. 08 교육 정리  (0) 2022.01.08
[리눅스]12.18 교육 정리 1  (0) 2021.12.19
[리눅스]12.04 교육 정리  (0) 2021.12.04
[리눅스]11.27 교육 정리  (0) 2021.11.28