[네이버클라우드캠프] - 2일차 (파일 생성, vi editor, 홈 디렉터리와 환경설정)

holy one·2023년 4월 25일
0

리눅스 2일차 수업 목차

  1. 파일 다루기
  2. vi
  3. bash

1. 파일 다루기

자주 만나는 에러

1. Permission Denied
j15@ace:~$ mkdir /re
mkdir: `/re' 디렉토리를 만들 수 없습니다: 허가 거부

2. No such file or Directory
j15@ace:~$ /cd /er
-bash: /cd: 그런 파일이나 디렉터리가 없습니다

3. Command not found
j15@ace:~$ kk
kk: 명령을 찾을 수 없습니다

자주 사용하는 옵션

-i : interactive = 대화형 모드로, 명령마다 사용자에게 확인
-f : force = 강제 모드로, 강제로 명령어 실행
-r : recursive = 재귀적 작업 모드로, 하위 디렉터까지 포함하여 명령 실행

mkdri ~/d2 || cd ~/d2 : or 명령어 : 둘중 한개 성공 = 성공
mkdri ~/d2 && cd ~/d2 : and 명령어 : 둘중 한개 실패 = 실패

리다이렉션(Redirection) 명령어

  • '>' : redirection : 기존의 파일을 덮어쓰거나, 새로운 파일을 생성하는 데 사용
  • '>>' : append : 기존의 파일 끝에 새로운 데이터를 추가하는 데 사용

생성 (touch,vi,cat)

1. 
j15@ace:~/d2$ touch il						- 빈 파일 생성
j15@ace:~/d2$ l
합계 28
-rw-rw-r-- 1 j15 j15  193  4월 25 12:09 a1
-rw-rw-r-- 1 j15 j15  111  4월 25 12:12 a2
-rw-r--r-- 1 j15 j15  111  4월 25 12:12 a4
-rw-r--r-- 1 j15 j15  267  4월 25 12:15 a7
drwxrwxr-x 2 j15 j15 4096  4월 25 12:19 d200/
-rw-rw-r-- 1 j15 j15    0  4월 25 12:20 il
-rw-r--r-- 1 j15 j15  267  4월 25 12:15 legal
-rw-r--r-- 1 j15 j15  111  4월 25 12:10 magic

2.
j15@ace:~/d2$ touch -t 199709161515 q1 
j15@ace:~/d2$ l
합계 4
drwxrwxr-x 2 j15 j15 4096  4월 25 19:51 d200
-rw-rw-r-- 1 j15 j15    0  9월 16  1997 q1 	- 파일 명을 임의의 시간으로 변경

3.
j15@ace:~/d2$ who > a1					- who 내용을 a1 파일로 저장
j15@ace:~/d2$ cat a1
j40      pts/0        2023-04-25 09:25 (10.0.2.2)
j        pts/1        2023-04-25 09:25 (10.0.2.2)
,,,
j7       pts/36       2023-04-25 09:46 (10.0.2.2)

4.
j15@ace:~/d2$ mkdir d{1..100}				- 여러 개 한번에 생성
j15@ace:~/d2$ ls
A500   d11  d17  d22  d28  d33  d39  d44  d5   d55  d60  d66  d71  d77  d82  d88  d93  d99
AA300  d12  d18  d23  d29  d34  d4   d45  d50  d56  d61  d67  d72  d78  d83  d89  d94
a2     d13  d19  d24  d3   d35  d40  d46  d51  d57  d62  d68  d73  d79  d84  d9   d95
d1     d14  d2   d25  d30  d36  d41  d47  d52  d58  d63  d69  d74  d8   d85  d90  d96
d10    d15  d20  d26  d31  d37  d42  d48  d53  d59  d64  d7   d75  d80  d86  d91  d97
d100   d16  d21  d27  d32  d38  d43  d49  d54  d6   d65  d70  d76  d81  d87  d92  d98

5.
j15@ace:~/d2$ cat a4
k

j

jj

t

j15@ace:~/d2$ cat -n a4
     1  k
     2
     3  j
     4
     5  jj
     6
     7  t
     8
j15@ace:~/d2$ cat -b a4		- -n과 -b의 차이확인
     1  k

     2  j

     3  jj

     4  t


j15@ace:~/d2$ nl a4		- b랑 같은 의미
     1  k

     2  j

     3  jj

     4  t

복사 (cp)

1.
j15@ace:~/d2$ mkdir d20 && cd d20 	- 디렉터리 만들고 성공하면 이동
j15@ace:~/d2/d20$


2.
j15@ace:~/d2$ cp /etc/bashrc		- 목적지가 생략되어 error
cp: '/etc/bashrc' 다음에 대상 파일 명령이 누락됨
Try 'cp --help' for more information.

3.
j15@ace:~/d2$ cp /etc/magic .		- 현재 위치로 파일 복사
j15@ace:~/d2$ l
합계 12
-rw-rw-r-- 1 j15 j15 193  4월 25 12:09 a1
-rw-rw-r-- 1 j15 j15  33  4월 25 12:09 a2
-rw-r--r-- 1 j15 j15 111  4월 25 12:10 magic

이름바꾸기, 이동 (rename, mv)

1.
j15@ace:~/d2$ mkdir a5
j15@ace:~/d2$ ls
AA300  a2  a5
j15@ace:~/d2$ mv a5 A500					- 파일 이름 바꾸기
j15@ace:~/d2$ ls
A500  AA300  a2

2. 
j15@ace:~/d2$ mkdir d20 && cd d20
j15@ace:~/d2/d20$ pwd
/home/j15/d2/d20

j15@ace:~/d2/d20$ cp /etc/*.conf .
j15@ace:~/d2/d20$ ls
adduser.conf          gai.conf        mke2fs.conf       resolv.conf        ucf.conf
ca-certificates.conf  hdparm.conf     multipath.conf    rsyslog.conf       usb_modeswitch.conf
debconf.conf          host.conf       nftables.conf     sensors3.conf      warnquota.conf
deluser.conf          ld.so.conf      nsswitch.conf     sudo.conf          xattr.conf
e2scrub.conf          libaudit.conf   overlayroot.conf  sudo_logsrvd.conf
fuse.conf             logrotate.conf  pam.conf          sysctl.conf

j15@ace:~/d2/d20$ rename s/\.conf/\.777/g *.conf	- 끝 이름 777로 변경하는 코드
j15@ace:~/d2/d20$ ls
adduser.777          gai.777        mke2fs.777       resolv.777        ucf.777
ca-certificates.777  hdparm.777     multipath.777    rsyslog.777       usb_modeswitch.777
de.777.777           host.777       nftables.777     sensors3.777      warnquota.777
deluser.777          ld.so.777      nsswitch.777     sudo.777          xattr.777
e2scrub.777          libaudit.777   overlayroot.777  sudo_logsrvd.777
fuse.777             logrotate.777  pam.777          sysctl.777

삭제(rm,rmdir)

1.
j15@ace:/tmp$ rm -rf a1
rm: 'a1'를 지울 수 없음: 명령을 허용하지 않음

2.
j15@ace:~/d2/d20$ cp /etc/* .
cp: -r not specified; omitting directory '/etc/ModemManager'
,,,
hdparm.777                     manpath.config  rmt               xattr.conf
hdparm.conf                    mecabrc         rpc               zsh_command_not_found
j15@ace:~/d2/d20$ rm -f [^jtbc]*	- 강제로 jtbc를 제외하고 삭제
j15@ace:~/d2/d20$ ls | grep ^jtbc
없음

cp,mv 사용시 주의할 점

j15@ace:~/d2$ alias l='ls -AlF'
j15@ace:~/d2$ l		- d2 디렉토리에 존재하는 파일 무
합계 0
  1. 존재하지 않을 경우
j15@ace:~/d2$ cal > a1
j15@ace:~/d2$ date > a2
j15@ace:~/d2$ l
합계 8
-rw-rw-r-- 1 j15 j15 193  4월 25 12:09 a1
-rw-rw-r-- 1 j15 j15  33  4월 25 12:09 a2
j15@ace:~/d2$ cp /etc/magic . 
j15@ace:~/d2$ l
합계 12
-rw-rw-r-- 1 j15 j15 193  4월 25 12:09 a1
-rw-rw-r-- 1 j15 j15  33  4월 25 12:09 a2
-rw-r--r-- 1 j15 j15 111  4월 25 12:10 magic
j15@ace:~/d2$
j15@ace:~/d2$ mkdir d200		- 파일이 없는 경우 생성 디렉토리 명으로 저장
j15@ace:~/d2$ l
합계 16
-rw-rw-r-- 1 j15 j15  193  4월 25 12:09 a1
-rw-rw-r-- 1 j15 j15   33  4월 25 12:09 a2
drwxrwxr-x 2 j15 j15 4096  4월 25 12:11 d200/
-rw-r--r-- 1 j15 j15  111  4월 25 12:10 magic
j15@ace:~/d2$
j15@ace:~/d2$ cp /etc/magic a4		- 파일이 없는 경우 a4란지정 파일 명으로 저장
j15@ace:~/d2$ l
합계 20
-rw-rw-r-- 1 j15 j15  193  4월 25 12:09 a1
-rw-rw-r-- 1 j15 j15   33  4월 25 12:09 a2
-rw-r--r-- 1 j15 j15  111  4월 25 12:12 a4
drwxrwxr-x 2 j15 j15 4096  4월 25 12:11 d200/
-rw-r--r-- 1 j15 j15  111  4월 25 12:10 magic
  1. 파일이 같은 이름으로 존재할 경우
j15@ace:~/d2$ cp /etc/magic a2
j15@ace:~/d2$ l
합계 20
-rw-rw-r-- 1 j15 j15  193  4월 25 12:09 a1
-rw-rw-r-- 1 j15 j15  111  4월 25 12:12 a2	- 파일의 이름이 존재했을 경우 용량의 크기로 덮어쓰기 되었음을 확인
-rw-r--r-- 1 j15 j15  111  4월 25 12:12 a4
drwxrwxr-x 2 j15 j15 4096  4월 25 12:11 d200/
-rw-r--r-- 1 j15 j15  111  4월 25 12:10 magic

j15@ace:~/d2$ cp /etc/magic a1 -i
cp: 'a1'를 덮어쓸까요? n				- 대화형 모드 실행된 모습 
j15@ace:~/d2$ l
합계 20
-rw-rw-r-- 1 j15 j15  193  4월 25 12:09 a1	- 대화형 모드에서 실행 취소를 하였기에 변동 x
-rw-rw-r-- 1 j15 j15  111  4월 25 12:12 a2
-rw-r--r-- 1 j15 j15  111  4월 25 12:12 a4
drwxrwxr-x 2 j15 j15 4096  4월 25 12:11 d200/
-rw-r--r-- 1 j15 j15  111  4월 25 12:10 magic

j15@ace:~/d2$ cp /etc/magic d200/
j15@ace:~/d2$ ls -l d200/
합계 4
-rw-r--r-- 1 j15 j15 111  4월 25 19:51 magic
j15@ace:~/d2$ cp /etc/magic d200/a5
j15@ace:~/d2$ ls -l d200/
합계 8
-rw-r--r-- 1 j15 j15 111  4월 25 19:51 a5	- magic 파일과 같은 용량임을 확인 그렇기에 따로 공존 가능
-rw-r--r-- 1 j15 j15 111  4월 25 19:51 magic

j15@ace:~/d2$ cp /etc/magic d200/		- 이름 지정하지 않으면 복사본 이름으로 저장됨
j15@ace:~/d2$ cp /etc/magic d200/a9		- 지정하면 명령에 따라 저장
j15@ace:~/d2$ l d200/
합계 8
-rw-r--r-- 1 j15 j15 111  4월 25 12:19 a9
-rw-r--r-- 1 j15 j15 111  4월 25 12:18 magic
  • arch (Architecture)
    현재 시스템의 아키텍처 정보를 출력하는 명령어로, 해당 시스템에 맞는 패키지를 설치하거나 컴파일할 때 유용하게 활용
j15@ace:~$ arch		- 시스템 아키텍처 정보 출력
x86_64

j15@ace:~$ uname -r			- 시스템 커널 버전 정보 출력
5.15.0-56-generic
  • alias
    사용자가 명령어를 다른 이름으로 바꿔서 사용할 수 있는 쉘 내부 명령어
j15@ace:~/d2$ alias h='history'
j15@ace:~/d2$ h
    1  whoami
    2  who
    3  cat -n who

2. vi Editor

vi 에디터는 윈도우에서 메모장과같은 unix 계열의 범용 에디터로, 작업의 기준점이 되기에 현재 커서의 위치가 중요하다.

윈도우 cmd 실습

D:\dd>tree
DATADRIVE1 볼륨에 대한 폴더 경로의 목록입니다.
볼륨 일련 번호는 6E92-664F입니다.
D:.
├─d1
├─d3
├─d4
└─d5

D:\dd\d3>copy con b.bat			- bat 파일 코드
echo hello
mspaint		-그림판
calc		-계산기
notepad		-메모장
^Z
        1개 파일이 복사되었습니다.

Vim 기본 설정 파일

j15@ace:~/d2$ vi .vimrc

>강사님 코드 
	 1 se nu ai ci si ts=4 sw=4 ruler title showmatch
  	 2 syntax on
 	 3 hi comment ctermfg=red

  	 4 ab P printf(" ");
  	 5 ab J System.out.println(" ");

 .  ~/.profile



>책 내용
      1 se nu ai ci si
      2 se ts=4 sw=4
      3 se ruler title showmatch
      4 syntax on
      5 hi comment ctermfg=red

~


j15@ace:~/d2$ . ~/.virmc		- 변경 코드 현 위치에 실행

vi 4가지 모드

  1. 입력모드
    -i : 현재 커서 앞부터 입력 / -a : 현재 커서 뒤부터 입력
    -I : 현재 line 처음부터 / -A : 현재 line 마지막부터
    -CC : 현재 line 삭제 후 insert / -CW : 단어삭제 + insert

  1. 실행
    -x: 현재 커서 위치의 문자를 삭제
    -dd: 현재 커서 위치의 줄을 삭제
    -yy: 현재 커서 위치의 줄을 복사
    -p: 현재 커서 위치 다음에 복사한 내용을 붙여넣기
    -u: 이전 명령을 취소
    -Ctrl-r: 취소한 명령을 다시 실행
    -:w: 현재 파일을 저장
    -:wq: 현재 파일을 저장하고 종료
    -:q!: 변경사항을 저장하지 않고 강제로 종료
    -:shift+8: 같은 단어 검색

:1,$ s/aa/AA: 처음부터 끝까지 aa를 AA로 전환
└> -s: Substitude : 커서가 위치한 행에서 첫번째로 나오는 대상문자열을 바꿀문자열로 전환
└> -%: 파일 전체에서 모든 대상문자열을 바꿀문자열로 전환


  1. visual mode
    -se nu/nonu : 번호 설정/ 해제
    -:% s/##// : 주석 제거 명령어
    -ctrl + V : 블록 지정
    -Alt + V : 옆줄 블록 지정
    -set mouse= a(마우스 설정) / r (마우스 설정 해제)
    -set all한 모습

  1. 일반 mode
    -ESC

창분할 모드

  • :vs [명령어] = 세로로 분리
  • :sp [명령어] = 가로로 분리
  • 창 전환 = ctrl + WW

3. 홈 디렉터리와 환경설정

SHELL이란?

사용자들이 내리는 명령어들을 해석하여 기계어로 번역한 다음 운영체제인 kenel에게 전달해주는 역할 (사용자가 입력한 명령어가 잘못되었거나 해석할수 없을 시 kenel에 전달되는게 아니라 shell차원에서 미리 예약된 메세지를 보내는게 특징)

SHELL 관련 명령어

1.
j15@ace:~/d2$ echo $SHELL				- 현제 쉘
/bin/bash
2.
j15@ace:~/d2$ echo " 김호일" >> a4
j15@ace:~/d2$ nl a4						- 실행 명령어를 순차적으로 보여줌
     1  2023. 04. 25. (화) 10:00:58 KST
     2        4월 2023
     3  일 월 화 수 목 금 토
     4                     1
     5   2  3  4  5  6  7  8
     6   9 10 11 12 13 14 15
     7  16 17 18 19 20 21 22
     8  23 24 25 26 27 28 29
     9  30
    10   김호일		-붙여넣기가 완료된 모습
     
3.
j15@ace:~/d2$ alias h='history'
j15@ace:~/d2$ h
    1  whoami
    2  who
    3  cat -n who

4.
j15@ace:~/d2$ echo "이전 명령어 다시 실행"
이전 명령어 다시 실행
j15@ace:~/d2$ !!		- 이전 사용한 명령어 재실행
echo "이전 명령어 다시 실행"
이전 명령어 다시 실행

j15@ace:~/d2$ "이전 명령어 다시 실행"	- ESC + .
-bash: 이전 명령어 다시 실행: command not found

j15@ace:~/d2$ "이전 명령어 다시 실행"	- Alt + .
-bash: 이전 명령어 다시 실행: command not found
j15@ace:~/d2$

=>  Alt + ., ESC + . 는 이전 사용한 명령어 마지막 단어 재사용!

5.
j15@ace:~/d2$ env | nl 
     1  SHELL		=/bin/bash
     2  PWD			=/home/j15/d2
     3  LOGNAME		=j15
     4  XDG_SESSION_TYPE=tty
     5  MOTD_SHOWN	=pam
     6  HOME		=/home/j15
     7  LANG		=ko_KR.UTF-8
		변수			값	

SHELL 환경변수와 파일

지역변수 = set환경변수 = env
시스템이 가지고 있는 설정 값들을 의미하며, 다시 로그인해도 그 값을 유지한다.현재 로그인한 터미널에서만 적용되는 변수로, 다시 로그인하면 소멸되고, 현 세션에서만 유효하다.
  • RockyLinux(RedHat 계열) 환경
/home/설명
.bash_profile개인설정 Master file
.bashrc설정 보조 파일
.profile
.bash_history명령어 history 저장
.virmcvi 기본 설정
.bash_logoutlogout시 실행내용

j15@ace:~/d2$ y=2000
j15@ace:~/d2$ set | grep 2000	- 지역변수
HISTFILESIZE=2000
y=2000

j15@ace:~/d2$ echo $y		- 다시 로그인 시 생략
2000

j15@ace:~/d2$ env | grep 2000		- 실행 실패!

j15@ace:~/d2$ function my()
> {
> echo "케이크"
> }

j15@ace:~/d2$ my					- 함수 실행
케이크


j15@ace:~/d2$ set | grep my
_=my
            local mycur="${cur#*[:]}";
                _allowed_groups "$mycur";
                COMPREPLY=($(compgen -g -- "$mycur"));
                local mycur="${cur#*:}";
                    _allowed_groups "$mycur";
                    COMPREPLY=($(compgen -g -- "$mycur"));
my ()
j15@ace:~/d2$ env | grep my			- 실행 실패!
없음

Alias

  • SHELL과 관련된 명령어에 대한 별칭을 정하는 명령어
    alias la='ls -A'

History

  • 가장 최근 명령 1000개를 BASH에서 부터 받아 저장하는 명령어
  • Logout 하면 History Memory에서 .bash_history로 저장
    => 명령 코드 복사하기

자동 완성 기능

  • Tab키로 명령어나 경로를 쉽게 작업가능

p41 shell script 실습

j15@ace:~$ vi k.sh				
  1 #!/bin/bash
  2
  3 echo
  4 echo -n 이름은:
  5 read A
  6
  7 echo -n 나이는 :
  8 read B
  9 echo 이름 :$A, 나이 : $B
 10
 11 echo "현재 시스템 사용자 목록"
 12 who | sort | nl
 13
 14 echo Good-Bye!
 15 echo
 16

j15@ace:~$ bash k.sh

이름은:호일
나이는 :27
이름 :호일, 나이 : 27
현재 시스템 사용자 목록
     1  j        pts/1        2023-04-25 09:25 (10.0.2.2)
     2  j        pts/2        2023-04-25 09:25 (10.0.2.2)
     3  j        pts/3        2023-04-25 09:26 (10.0.2.2)
,,,
    62  j8       pts/24       2023-04-25 17:28 (10.0.2.2)
    63  j8       pts/64       2023-04-25 15:46 (10.0.2.2)
    64  j9       pts/19       2023-04-25 17:40 (10.0.2.2)
    65  j9       pts/48       2023-04-25 17:28 (10.0.2.2)
Good-Bye!

j15@ace:~$ ./k.sh					
-bash: ./k.sh: 허가 거부

j15@ace:~$ chmod 755 k.sh				- 권한 모드 변경 
j15@ace:~$ ./k.sh

이름은:김호일
나이는 :27
이름 :김호일, 나이 : 27
현재 시스템 사용자 목록
     1  j        pts/1        2023-04-25 09:25 (10.0.2.2)
     2  j        pts/2        2023-04-25 09:25 (10.0.2.2)
     3  j        pts/3        2023-04-25 09:26 (10.0.2.2)
,,,
    62  j8       pts/24       2023-04-25 17:28 (10.0.2.2)
    63  j8       pts/64       2023-04-25 15:46 (10.0.2.2)
    64  j9       pts/19       2023-04-25 17:40 (10.0.2.2)
    65  j9       pts/48       2023-04-25 17:28 (10.0.2.2)
Good-Bye!

쉘 프롬프트 모양 변경

  • PS1 이라는 쉘변수 = 우리가 사용하는 쉘변수의 모양을 결정
  • w : 대문자는 현재디렉토리만 표시 / 소문자는전체 절대경로를 모두 표시
j15@ace:~/d2$ PS1='[\! \d \t \u \w] \\$'	- 쉘 프롬프트 변경 코드

[743	 Tue 	Apr 25 17:24:51 	j15 	~/d2] $ - 변경 완료
명령어   날짜	시간  				user   경로
넘버													

[743 Tue Apr 25 17:24:51 j15 ~/d2] $cd /usr/local/src/ - 경로 변경

[744 Tue Apr 25 17:25:50 j15 /usr/local/src] $PS1='[\! \d \t \u \W] \\$'
			  				
[745 Tue Apr 25 17:26:04 j15 src] $			-  경로가 바뀐점 확인

[745 Tue Apr 25 17:26:57 j15 src] $PS1='[\! 케이크, 초콜릿 \u \w] \\$'			- 문자열 입력 가능
[746 케이크, 초콜릿] $

[747 케이크, 초콜릿 j15 /usr/local/src] $		
profile
☁️ 좋아요!

0개의 댓글