자주 만나는 에러
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) 명령어
생성 (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
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
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
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,$ s/aa/AA
: 처음부터 끝까지 aa를 AA로 전환
└> -s: Substitude : 커서가 위치한 행에서 첫번째로 나오는 대상문자열을 바꿀문자열로 전환
└> -%: 파일 전체에서 모든 대상문자열을 바꿀문자열로 전환
창분할 모드
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 |
---|---|
시스템이 가지고 있는 설정 값들을 의미하며, 다시 로그인해도 그 값을 유지한다. | 현재 로그인한 터미널에서만 적용되는 변수로, 다시 로그인하면 소멸되고, 현 세션에서만 유효하다. |
/home/ | 설명 |
---|---|
.bash_profile | 개인설정 Master file |
.bashrc | 설정 보조 파일 |
.profile | |
.bash_history | 명령어 history 저장 |
.virmc | vi 기본 설정 |
.bash_logout | logout시 실행내용 |
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
alias la='ls -A'
History
자동 완성 기능
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!
쉘 프롬프트 모양 변경
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] $