Quiz.
ubuntu@server:~$ date > now1
ubuntu@server:~$ date > now2
ubuntu@server:~$ cat now1
2020. 09. 08. (화) 09:20:37 KST
ubuntu@server:~$ cat now2
2020. 09. 08. (화) 09:20:43 KST
ubuntu@server:~$ _____________________________________
아래 명령어의 실행 결과가 다음과 같이 나올 수 있도록 ____ 부분에 명령어를 완성하세요.
ubuntu@server:~$ cat now3
2020. 09. 08. (화) 09:20:37 KST
2020. 09. 08. (화) 09:20:43 KST
(정답예) $ cat now1 now2 > now3
passwd 파일, group 파일
ubuntu@server:~$ sudo su -
[sudo] ubuntu의 암호: ubuntu
root@server:~# cat /etc/passwd ⇐ 사용자 계정 정보가 저장
root:x:0:0:root:/root:/bin/bash ⇐ root 계정
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin
syslog:x:102:106::/home/syslog:/usr/sbin/nologin
messagebus:x:103:107::/nonexistent:/usr/sbin/nologin
_apt:x:104:65534::/nonexistent:/usr/sbin/nologin
uuidd:x:105:111::/run/uuidd:/usr/sbin/nologin
avahi-autoipd:x:106:112:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/usr/sbin/nologin
usbmux:x:107:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
dnsmasq:x:108:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
rtkit:x:109:114:RealtimeKit,,,:/proc:/usr/sbin/nologin
cups-pk-helper:x:110:116:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin
speech-dispatcher:x:111:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/false
whoopsie:x:112:117::/nonexistent:/bin/false
kernoops:x:113:65534:Kernel Oops Tracking Daemon,,,:/:/usr/sbin/nologin
saned:x:114:119::/var/lib/saned:/usr/sbin/nologin
pulse:x:115:120:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin
avahi:x:116:122:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
colord:x:117:123:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
hplip:x:118:7:HPLIP system user,,,:/var/run/hplip:/bin/false
geoclue:x:119:124::/var/lib/geoclue:/usr/sbin/nologin
gnome-initial-setup:x:120:65534::/run/gnome-initial-setup/:/bin/false
gdm:x:121:125:Gnome Display Manager:/var/lib/gdm3:/bin/false
ubuntu:x:1000:1000:ubuntu,,,:/home/ubuntu:/bin/bash ⇐ ubuntu 계정
vboxadd:x:999:1::/var/run/vboxadd:/bin/false
sshd:x:122:65534::/run/sshd:/usr/sbin/nologin
사용자이름:비밀번호:사용자 ID:사용자 소속 그룹 ID:추가 정보:홈 디렉터리: 기본 셸
~~~~~~~~
x ⇒ shadow 파일로 이전
root@server:~# cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog,ubuntu
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:ubuntu
floppy:x:25:
tape:x:26:
sudo:x:27:ubuntu
audio:x:29:pulse
dip:x:30:ubuntu
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:
sasl:x:45:
plugdev:x:46:ubuntu
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
systemd-journal:x:101:
systemd-network:x:102:
systemd-resolve:x:103:
input:x:104:
crontab:x:105:
syslog:x:106:
messagebus:x:107:
netdev:x:108:
mlocate:x:109:
ssl-cert:x:110:
uuidd:x:111:
avahi-autoipd:x:112:
bluetooth:x:113:
rtkit:x:114:
ssh:x:115:
lpadmin:x:116:ubuntu
whoopsie:x:117:
scanner:x:118:saned
saned:x:119:
pulse:x:120:
pulse-access:x:121:
avahi:x:122:
colord:x:123:
geoclue:x:124:
gdm:x:125:
ubuntu:x:1000:
sambashare:x:126:ubuntu
vboxsf:x:999:
그룹 이름:비밀번호:그룹 ID:보조 그룹 사용자
adduser
root@server:~# adduser --help
adduser [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
[--firstuid ID] [--lastuid ID] [--gecos GECOS] [--ingroup GROUP | --gid ID]
[--disabled-password] [--disabled-login] [--add_extra_groups]
[--encrypt-home] USER
Add a normal user
adduser --system [--home DIR] [--shell SHELL] [--no-create-home] [--uid ID]
[--gecos GECOS] [--group | --ingroup GROUP | --gid ID] [--disabled-password]
[--disabled-login] [--add_extra_groups] USER
Add a system user
adduser --group [--gid ID] GROUP
addgroup [--gid ID] GROUP
Add a user group
addgroup --system [--gid ID] GROUP
Add a system group
adduser USER GROUP
Add an existing user to an existing group
general options:
--quiet | -q don't give process information to stdout
--force-badname allow usernames which do not match the
NAME_REGEX[_SYSTEM] configuration variable
--extrausers uses extra users as the database
--help | -h usage message
--version | -v version number and copyright
--conf | -c FILE use FILE as configuration file
usermod
root@server:~# usermod --help
Usage: usermod [options] LOGIN
Options:
-c, --comment COMMENT new value of the GECOS field
-d, --home HOME_DIR new home directory for the user account
-e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE
-f, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-g, --gid GROUP force use GROUP as new primary group
-G, --groups GROUPS new list of supplementary GROUPS
-a, --append append the user to the supplemental GROUPS
mentioned by the -G option without removing
him/her from other groups
-h, --help display this help message and exit
-l, --login NEW_LOGIN new value of the login name
-L, --lock lock the user account
-m, --move-home move contents of the home directory to the
new location (use only with -d)
-o, --non-unique allow using duplicate (non-unique) UID
-p, --password PASSWORD use encrypted password for the new password
-R, --root CHROOT_DIR directory to chroot into
-s, --shell SHELL new login shell for the user account
-u, --uid UID new UID for the user account
-U, --unlock unlock the user account
-v, --add-subuids FIRST-LAST add range of subordinate uids
-V, --del-subuids FIRST-LAST remove range of subordinate uids
-w, --add-subgids FIRST-LAST add range of subordinate gids
-W, --del-subgids FIRST-LAST remove range of subordinate gids
-Z, --selinux-user SEUSER new SELinux user mapping for the user account
실습5-1 사용자와 그룹관리 실습 (P179)
#1 hanbit1 사용자 계정 추가
root@server:~# adduser hanbit1
'hanbit1' 사용자를 추가 중...
새 그룹 'hanbit1' (1001) 추가 ...
새 사용자 'hanbit1' (1001) 을(를) 그룹 'hanbit1' (으)로 추가 ...
'/home/hanbit1' 홈 디렉터리를 생성하는 중...
'/etc/skel'에서 파일들을 복사하는 중...
새 UNIX 암호 입력: 1234
새 UNIX 암호 재입력: 1234
passwd: 암호를 성공적으로 업데이트했습니다
hanbit1의 사용자의 정보를 바꿉니다
새로운 값을 넣거나, 기본값을 원하시면 엔터를 치세요
이름 [ ]:
방 번호 [ ]:
직장 전화번호 [ ]:
집 전화번호 [ ]:
기타 [ ]:
정보가 올바릅니까? [Y/n]
#2 passwd 파일에 hanbit1 계정 추가를 확인
root@server:~# tail /etc/passwd
avahi:x:116:122:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
colord:x:117:123:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
hplip:x:118:7:HPLIP system user,,,:/var/run/hplip:/bin/false
geoclue:x:119:124::/var/lib/geoclue:/usr/sbin/nologin
gnome-initial-setup:x:120:65534::/run/gnome-initial-setup/:/bin/false
gdm:x:121:125:Gnome Display Manager:/var/lib/gdm3:/bin/false
ubuntu:x:1000:1000:ubuntu,,,:/home/ubuntu:/bin/bash
vboxadd:x:999:1::/var/run/vboxadd:/bin/false
sshd:x:122:65534::/run/sshd:/usr/sbin/nologin
hanbit1:x:1001:1001:,,,:/home/hanbit1:/bin/bash
#3 group 파일에 hanbit1 그룹 추가를 확인
root@server:~# tail /etc/group
pulse:x:120:
pulse-access:x:121:
avahi:x:122:
colord:x:123:
geoclue:x:124:
gdm:x:125:
ubuntu:x:1000:
sambashare:x:126:ubuntu
vboxsf:x:999:
hanbit1:x:1001: ⇐ 별도로 그룹을 지정하지 않으면 자동으로 사용자 이름과 동일한 그룹이 생성
#4 hanbit1 계정을 삭제
root@server:~# userdel -r hanbit1 ⇐ 사용자 홈 디렉터리를 포함해서 삭제
userdel: hanbit1 mail spool (/var/mail/hanbit1) not found
#5 ubuntuGroup 그룹을 생성 후 확인
root@server:~# groupadd ubuntuGroup
root@server:~# tail -3 /etc/group
sambashare:x:126:ubuntu
vboxsf:x:999:
ubuntuGroup:x:1001:
#6 ubuntuGroup 그룹에 속하는 hanbit1, hanbit2 사용자 계정을 생성
root@server:~# adduser --gid 1001 hanbit1
'hanbit1' 사용자를 추가 중...
새 사용자 'hanbit1' (1001) 을(를) 그룹 'ubuntuGroup' (으)로 추가 ...
'/home/hanbit1' 홈 디렉터리를 생성하는 중...
'/etc/skel'에서 파일들을 복사하는 중...
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: 암호를 성공적으로 업데이트했습니다
hanbit1의 사용자의 정보를 바꿉니다
새로운 값을 넣거나, 기본값을 원하시면 엔터를 치세요
이름 []:
방 번호 []:
직장 전화번호 []:
집 전화번호 []:
기타 []:
정보가 올바릅니까? [Y/n]
root@server:~# adduser --gid 1001 hanbit2
'hanbit2' 사용자를 추가 중...
새 사용자 'hanbit2' (1002) 을(를) 그룹 'ubuntuGroup' (으)로 추가 ...
'/home/hanbit2' 홈 디렉터리를 생성하는 중...
'/etc/skel'에서 파일들을 복사하는 중...
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: 암호를 성공적으로 업데이트했습니다
hanbit2의 사용자의 정보를 바꿉니다
새로운 값을 넣거나, 기본값을 원하시면 엔터를 치세요
이름 []:
방 번호 []:
직장 전화번호 []:
집 전화번호 []:
기타 []:
정보가 올바릅니까? [Y/n]
root@server:~# tail -5 /etc/passwd
ubuntu:x:1000:1000:ubuntu,,,:/home/ubuntu:/bin/bash
vboxadd:x:999:1::/var/run/vboxadd:/bin/false
sshd:x:122:65534::/run/sshd:/usr/sbin/nologin
hanbit1:x:1001:1001:,,,:/home/hanbit1:/bin/bash
hanbit2:x:1002:1001:,,,:/home/hanbit2:/bin/bash
#7 사용자 홈 디렉터리를 확인
root@server:~# ls -l /home/hanbit1
합계 12
-rw-r--r-- 1 hanbit1 ubuntuGroup 8980 9월 8 10:30 examples.desktop <--+
root@server:~# ls -l /home/hanbit2 |
합계 12 |
-rw-r--r-- 1 hanbit2 ubuntuGroup 8980 9월 8 10:30 examples.desktop <--+
|
root@server:~# ls -l /etc/skel |
합계 12 | 사용자가 생성될 때마다
-rw-r--r-- 1 root root 8980 4월 16 2018 examples.desktop -------------+ 사용자 홈 디렉터리로 복제
파일 소유권과 허가권 정보
root@server:~# touch mydata.txt
root@server:~# ls -l mydata.txt
-rw-r--r-- 1 root root 0 9월 8 10:39 mydata.txt
파일유형
-
d ⇒ 디렉터리
-
- ⇒ 일반 파일
-
b ⇒ 블럭 디바이스(하드디스크, USB, CD/DVD 등)
-
c ⇒ 문자 디바이스(키보드, 마우스, 프린터 등)
-
l ⇒ 링크
r : 읽기 가능
w : 쓰기 가능
x : 실행 가능
chmod 777 mydata.txt
~~~
⇒ 2진수 → 111 111 111 = rwx rwx rwx ⇒ 소유자, 소유자 그룹, 그 외 모두가 읽고, 쓰고, 실행할 수 있음
symbolic method 방식
chmod "사용자유형" " + or - " "권한" 파일
Symbol |
Function |
Description |
u |
Who |
User (owner) |
g |
Who |
Group |
o |
Who |
Others |
a |
Who |
All |
= |
Operator |
Assign |
+ |
Operator |
Add |
- |
Operator |
Remove |
r |
Permission |
Read |
w |
Permission |
Write |
x |
Permission |
Execute |
chmod u+x mydata.txt ⇒ 소유자에 대해서 실행 권한을 부여
chmod a+rw mydata.txt ⇒ 모든 사용자(소유자, 그룹, 그 외)에 대해 읽고, 쓰는 권한을 부여
실습 5-2 파일 허가권과 소유권 실행 (P187)
#1 파일 생성 후 파일 허가권 및 소유권 확인
root@server:~# vi sample
쿡북 리눅스를 학습 중입니다. ls /var |
root@server:~# ls -l sample
-rw-r--r-- 1 root root 49 9월 8 11:28 sample ⇒ 소유자(root)는 읽고 쓸 수 있고, 나머지는 읽기만 가능
#2 현재 사용자를 확인하고 sample 파일을 실행
root@server:~# whoami
root ⇐ 현재 사용자는 root 인 것을 확인
root@server:~# ./sample
-su: ./sample: 허가 거부 ⇐ 실행 권한이 없기 때문에 오류가 발생
#3 파일에 모든 사용자가 실행할 수 있도록 실행 권한을 부여 후 실행
rw-r--r-- ⇒ rwx r-x r-x
111 101 101 ⇒ 7 5 5
root@server:~# chmod 755 sample ⇐ 실행 권한 부여
root@server:~# ls -l sample ⇐ 실행 권한이 부여된 것을 확인
-rwxr-xr-x 1 root root 49 9월 8 11:28 sample
root@server:~# ./sample ⇐ 라인 단위로 읽어서 쉘에서 실행하고 결과를 출력
./sample: 줄 1: 쿡북: 명령어를 찾을 수 없음
backups cache crash lib local lock log mail metrics opt run snap spool tmp www
#4 파일의 소유자를 ubuntu 사용자로 변경
root@server:~# chown ubuntu sample
root@server:~# ls -l sample
-rwxr-xr-x 1 ubuntu root 49 9월 8 11:28 sample ⇐ 파일의 소유자가 ubuntu로 변경
root@server:~# chown ubuntu.ubuntu sample
root@server:~# ls -l sample
-rwxr-xr-x 1 ubuntu ubuntu 49 9월 8 11:28 sample ⇐ 파일의 소유자와 소유자 그룹이 ubuntu로 변경
#5 ubuntu 사용자로 로그인해서 파일에 접근
root@server:~# su ubuntu ⇐ ubuntu 사용자로 로그인
ubuntu@server:/root$ pwd ⇐ 현재 작업 디렉터리 확인
/root
ubuntu@server:/root$ ls -l /root/sample ⇐ 파일 조회
ls: '/root/sample'에 접근할 수 없습니다: 허가 거부
ubuntu@server:/root$ ls -ld /root
drwx------ 6 root root 4096 9월 8 11:28 /root ⇐ /root 디렉터리는 root 사용자만 읽고 쓰고 실행할 수 있기 때문에
ubuntu 사용자는 /root/sample 파일에 접근할 수 없음
#6 ubuntu 사용자가 파일을 사용할 수 있도록 홈 디렉터리로 이전 후 실행
ubuntu@server:/root$ exit ⇐ root 사용자로 복귀
exit
root@server:~# mv ./sample ~ubuntu ⇐ 파일을 ubuntu 사용자의 홈 디렉터리로 이전
root@server:~# su ubuntu ⇐ ubuntu 사용자로 로그인
ubuntu@server:/root$ cd ⇐ ubuntu 사용자 홈 디렉터리로 이동
ubuntu@server:~$ ls -l sample ⇐ 파일 조회 (실행 권한 확인)
-rwxr-xr-x 1 ubuntu ubuntu 49 9월 8 11:28 sample
ubuntu@server:~$ ./sample ⇐ 실행
./sample: 줄 1: 쿡북: 명령어를 찾을 수 없음
backups cache crash lib local lock log mail metrics opt run snap spool tmp www
#7 다시 소유자와 소유자 그룹을 root로 변경
ubuntu@server:~$ ls -l sample ⇐ 파일 소유자, 소유자 그룹 확인
-rwxr-xr-x 1 ubuntu ubuntu 49 9월 8 11:28 sample
ubuntu@server:~$ chown root.root sample ⇐ 파일 소유자, 소유자 그룹을 root로 변경
chown: 'sample'의 소유자 변경: 명령을 허용하지 않음 → 상위 권한의 사용자로 변경할 수 없음
실습 5-3 하드 링크와 심볼릭 링크 생성
#1 root 로그인 후 작업 디렉터리를 만들고 파일을 생성
ubuntu@server:~$ sudo su
[sudo] ubuntu의 암호: ubuntu
root@server:/home/ubuntu# cd
root@server:~# mkdir linkdir
root@server:~# cd linkdir
root@server:~/linkdir# echo "원본파일" > orginalfile
root@server:~/linkdir# ls
orginalfile
#2 하드 링크 파일과 소프트 링크 파일을 생성하고 내용을 확인
root@server:~/linkdir# ln orginalfile hardlink
root@server:~/linkdir# ln -s orginalfile softlink
root@server:~/linkdir# ls -il ⇐ inode 정보를 함께 출력
합계 8
394643 -rw-r--r-- 2 root root 13 9월 8 13:21 hardlink ⇐ 하드 링크는 원본 파일의 inode를 공유
394643 -rw-r--r-- 2 root root 13 9월 8 13:21 orginalfile
394819 lrwxrwxrwx 1 root root 11 9월 8 13:24 softlink -> orginalfile ⇐ 소프트 링크는 별도의 inode를 만들고
root@server:~/linkdir# cat hardlink 원본 파일을 참조
원본파일
root@server:~/linkdir# cat softlink
원본파일
#3 원본 파일의 경로를 변경한 후 하드 링크 파일과 소프트 링크 파일을 확인
root@server:~/linkdir# mv ./orginalfile ../ ⇐ 원본 파일을 상위 디렉터리로 이전
root@server:~/linkdir# ls -il
합계 4
394643 -rw-r--r-- 2 root root 13 9월 8 13:21 hardlink
394819 lrwxrwxrwx 1 root root 11 9월 8 13:24 softlink -> orginalfile ⇐ orginalfile이 사라져서(링크가 끊겨서)
root@server:~/linkdir# cat hardlink 붉은색으로 표시
원본파일
root@server:~/linkdir# cat softlink
cat: softlink: 그런 파일이나 디렉터리가 없습니다
#4 원본 파일을 원래 위치로 복원하면 소프트 링크도 복원되는 것을 확인
root@server:~/linkdir# mv ../orginalfile ./
root@server:~/linkdir# ls -il
합계 8
394643 -rw-r--r-- 2 root root 13 9월 8 13:21 hardlink
394643 -rw-r--r-- 2 root root 13 9월 8 13:21 orginalfile
394819 lrwxrwxrwx 1 root root 11 9월 8 13:24 softlink -> orginalfile
root@server:~/linkdir# cat hardlink
원본파일
root@server:~/linkdir# cat orginalfile
원본파일
#5 원본 파일의 내용을 변경하면 링크 파일도 변경된 내용이 보이는 것을 확인
root@server:~/linkdir# echo "당근이쥐" >> orginalfile
root@server:~/linkdir# cat hardlink
원본파일
당근이쥐
root@server:~/linkdir# cat softlink
원본파일
당근이쥐
#6 원본 파일을 다른 디렉터리로 옮긴 후 내용을 변경하고 다시 원래 위치로 옮겼을 때 하드 링크와 소프트 링크는 어떻게 내용이 보여질까?
root@server:~/linkdir# mv ./orginalfile ../
root@server:~/linkdir# echo "또 당근이쥐" >> ../orginalfile
root@server:~/linkdir# cat ../orginalfile
원본파일
당근이쥐
또 당근이쥐
root@server:~/linkdir# cat hardlink
원본파일
당근이쥐
또 당근이쥐
root@server:~/linkdir# cat softlink
cat: softlink: 그런 파일이나 디렉터리가 없습니다
root@server:~/linkdir# mv ../orginalfile ./
root@server:~/linkdir# cat orginalfile
원본파일
당근이쥐
또 당근이쥐
root@server:~/linkdir# cat hardlink
원본파일
당근이쥐
또 당근이쥐
root@server:~/linkdir# cat softlink
원본파일
당근이쥐
또 당근이쥐
#7 원본 파일과 동일한 이름의 파일을 생성하는 경우 하드링크와 소프트링크는 어떻게 동작하는가?
root@server:~/linkdir# mv ./orginalfile ../
root@server:~/linkdir# echo "새로운 원본파일" > orginalfile ⇐ 소프트링크가 만들어진 위치에
root@server:~/linkdir# cat hardlink 원본 파일과 동일한 이름의 파일을 생성
원본파일 ⇐ inode를 공유하고 있기 때문에 앞에서 생성한 원본의 내용을 출력
당근이쥐
또 당근이쥐
root@server:~/linkdir# cat softlink ⇐ 동일한 파일을 찾아서 참조하기 때문에 새롭게 생성된 파일의 내용을 출력
새로운 원본파일
root@server:~/linkdir# ps -ef | grep firefox
ubuntu 3443 1 1 13:50 tty2 00:00:05 /usr/lib/firefox/firefox -new-window
ubuntu 3528 3443 0 13:50 tty2 00:00:00 /usr/lib/firefox/firefox -contentproc -childID 1 -isForBrowser -prefsLen 1 -prefMapSize 224116 -parentBuildID 20200831163820 -appdir /usr/lib/firefox/browser 3443 true tab
ubuntu 3565 3443 0 13:50 tty2 00:00:01 /usr/lib/firefox/firefox -contentproc -childID 2 -isForBrowser -prefsLen 6969 -prefMapSize 224116 -parentBuildID 20200831163820 -appdir /usr/lib/firefox/browser 3443 true tab
ubuntu 3582 3443 0 13:50 tty2 00:00:00 /usr/lib/firefox/firefox -contentproc -childID 3 -isForBrowser -prefsLen 6969 -prefMapSize 224116 -parentBuildID 20200831163820 -appdir /usr/lib/firefox/browser 3443 true tab
ubuntu 3627 3443 0 13:50 tty2 00:00:00 /usr/lib/firefox/firefox -contentproc -childID 4 -isForBrowser -prefsLen 8984 -prefMapSize 224116 -parentBuildID 20200831163820 -appdir /usr/lib/firefox/browser 3443 true tab
root 3699 3388 0 13:55 pts/0 00:00:00 grep --color=auto firefox
root@server:~/linkdir# kill -9 3443
root@server:~/linkdir# ps -ef | grep firefox
root 3710 3388 0 13:57 pts/0 00:00:00 grep --color=auto firefox ⇐ firefox와 자식 프로세스가 모두 종료
root@server:~/linkdir# pstree
systemd─┬─MainThread─┬─Privileged Cont───20*[{Privileged Cont}]
│ ├─Web Content───17*[{Web Content}]
│ ├─WebExtensions───19*[{WebExtensions}]
│ └─65*[{MainThread}]
├─ModemManager───2*[{ModemManager}]
├─NetworkManager───2*[{NetworkManager}]
├─3*[VBoxClient───VBoxClient───2*[{VBoxClient}]]
├─VBoxClient───VBoxClient───3*[{VBoxClient}]
├─VBoxService───8*[{VBoxService}]
├─accounts-daemon───2*[{accounts-daemon}]
├─acpid
├─avahi-daemon───avahi-daemon
├─boltd───2*[{boltd}]
├─colord───2*[{colord}]
├─cron
├─cups-browsed───2*[{cups-browsed}]
├─cupsd
├─dbus-daemon
├─gdm3─┬─gdm-session-wor─┬─gdm-wayland-ses─┬─gnome-session-b─┬─gnome-sh+
│ │ │ │ ├─gsd-a11y+
│ │ │ │ ├─gsd-clip+
│ │ │ │ ├─gsd-colo+
│ │ │ │ ├─gsd-date+
│ │ │ │ ├─gsd-hous+
│ │ │ │ ├─gsd-keyb+
│ │ │ │ ├─gsd-medi+
│ │ │ │ ├─gsd-mous+
│ │ │ │ ├─gsd-powe+
│ │ │ │ ├─gsd-prin+
│ │ │ │ ├─gsd-rfki+
│ │ │ │ ├─gsd-scre+
│ │ │ │ ├─gsd-shar+
│ │ │ │ ├─gsd-smar+
│ │ │ │ ├─gsd-soun+
│ │ │ │ ├─gsd-waco+
│ │ │ │ ├─gsd-xset+
│ │ │ │ └─3*[{gnom+
│ │ │ └─2*[{gdm-wayland-ses}]
│ │ └─2*[{gdm-session-wor}]
│ ├─gdm-session-wor─┬─gdm-x-session─┬─Xorg───{Xorg}
│ │ │ ├─gnome-session-b─┬─deja-dup-m+
│ │ │ │ ├─gnome-shel+
│ │ │ │ ├─gnome-soft+
│ │ │ │ ├─gsd-a11y-s+
│ │ │ │ ├─gsd-clipbo+
│ │ │ │ ├─gsd-color─+++
│ │ │ │ ├─gsd-dateti+
│ │ │ │ ├─gsd-disk-u+
│ │ │ │ ├─gsd-housek+
│ │ │ │ ├─gsd-keyboa+
│ │ │ │ ├─gsd-media-+
│ │ │ │ ├─gsd-mouse─+++
│ │ │ │ ├─gsd-power─+++
│ │ │ │ ├─gsd-print-+
│ │ │ │ ├─gsd-rfkill+++
│ │ │ │ ├─gsd-screen+
│ │ │ │ ├─gsd-sharin+
│ │ │ │ ├─gsd-smartc+
│ │ │ │ ├─gsd-sound─+++
│ │ │ │ ├─gsd-wacom─+++
│ │ │ │ ├─gsd-xsetti+
│ │ │ │ ├─nautilus-d+
│ │ │ │ ├─ssh-agent
│ │ │ │ ├─update-not+
│ │ │ │ └─3*[{gnome-+
│ │ │ └─2*[{gdm-x-session}]
│ │ └─2*[{gdm-session-wor}]
│ └─2*[{gdm3}]
├─gnome-keyring-d─┬─ssh-agent
│ └─3*[{gnome-keyring-d}]
├─gsd-printer───2*[{gsd-printer}]
├─2*[ibus-x11───2*[{ibus-x11}]]
├─2*[kerneloops]
├─networkd-dispat───{networkd-dispat}
├─nginx───nginx
├─packagekitd───2*[{packagekitd}]
├─polkitd───2*[{polkitd}]
├─pulseaudio───3*[{pulseaudio}]
├─rsyslogd───3*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─snapd───14*[{snapd}]
├─sshd───sshd───sshd
├─systemd───(sd-pam)
├─systemd─┬─(sd-pam)
│ ├─at-spi-bus-laun─┬─dbus-daemon
│ │ └─3*[{at-spi-bus-laun}]
│ ├─at-spi2-registr───2*[{at-spi2-registr}]
│ ├─dbus-daemon
│ ├─ibus-portal───2*[{ibus-portal}]
│ ├─pulseaudio───3*[{pulseaudio}]
│ └─xdg-permission-───2*[{xdg-permission-}]
├─systemd─┬─(sd-pam)
│ ├─at-spi-bus-laun─┬─dbus-daemon
│ │ └─3*[{at-spi-bus-laun}]
│ ├─at-spi2-registr───2*[{at-spi2-registr}]
│ ├─dbus-daemon
│ ├─dconf-service───2*[{dconf-service}]
│ ├─evolution-addre─┬─evolution-addre───5*[{evolution-addre}]
│ │ └─4*[{evolution-addre}]
│ ├─evolution-calen─┬─evolution-calen───8*[{evolution-calen}]
│ │ └─4*[{evolution-calen}]
│ ├─evolution-sourc───3*[{evolution-sourc}]
│ ├─gnome-shell-cal───5*[{gnome-shell-cal}]
│ ├─gnome-terminal-─┬─bash───sudo───su───bash───su───bash───sud+
│ │ └─3*[{gnome-terminal-}]
│ ├─goa-daemon───3*[{goa-daemon}]
│ ├─goa-identity-se───3*[{goa-identity-se}]
│ ├─gvfs-afc-volume───3*[{gvfs-afc-volume}]
│ ├─gvfs-goa-volume───2*[{gvfs-goa-volume}]
│ ├─gvfs-gphoto2-vo───2*[{gvfs-gphoto2-vo}]
│ ├─gvfs-mtp-volume───2*[{gvfs-mtp-volume}]
│ ├─gvfs-udisks2-vo───2*[{gvfs-udisks2-vo}]
│ ├─gvfsd─┬─gvfsd-trash───2*[{gvfsd-trash}]
│ │ └─2*[{gvfsd}]
│ ├─gvfsd-fuse───5*[{gvfsd-fuse}]
│ ├─ibus-portal───2*[{ibus-portal}]
│ └─xdg-permission-───2*[{xdg-permission-}]
├─systemd-journal
├─systemd-logind
├─systemd-resolve
├─systemd-udevd
├─udisksd───4*[{udisksd}]
├─unattended-upgr───{unattended-upgr}
├─upowerd───2*[{upowerd}]
├─whoopsie───2*[{whoopsie}]
└─wpa_supplicant
실습 5-4 포그라운드 프로세스와 백그라운드 프로세스 (P195)
#1 무한정 반복되는 프로세스를 실행
root@server:~# yes > /dev/null
#2 ps 명령어를 이용해서 yes 프로세스의 실행 상태를 확인
ubuntu@server:~$ ps -ef | grep yes
root 3939 3388 94 14:17 pts/0 00:00:58 yes
ubuntu 3957 3943 0 14:18 pts/1 00:00:00 grep --color=auto yes
#3 포그라운드 프로세스를 종료
ubuntu@server:~$ sudo kill -9 3939
또는
Ctl+C
#4 포그라운드 프로세스를 백그라운드 프로세스로 변경(전이)
root@server:~# yes > /dev/null
^Z
[1]+ 정지됨 yes > /dev/null
root@server:~# bg
[1]+ yes > /dev/null & ⇐ 백그라운드로 실행되는 것을 표시
root@server:~# ps -ef | grep yes
root 3985 3388 69 14:23 pts/0 00:01:27 yes
root 3988 3388 0 14:25 pts/0 00:00:00 grep --color=auto yes
#5 백그라운드 프로세스를 포그라운드 프로세스로 변경(전이)
root@server:~# jobs
[1]+ 실행중 yes > /dev/null & ⇐ Job ID (작업 번호) 확인
root@server:~# fg 1
yes > /dev/null ⇐ 포그라운드로 실행되는 것을 확인
#6 gedit 프로그램을 포그라운드로 실행했을 때와 백그라운드로 실행했을 때 비교
root@server:~# gedit ⇐ 포그라운드로 실행한 것이고, gedit를 종료하기 전까지는 명령어를 추가로 실행할 수 없음
root@server:~# gedit & ⇐ 백그라운드에서 실행하는 것이고, gedit와 별개로 명령어 실행이 가능
[1] 4061
root@server:~# ls ⇐ gedit 실행 상태에서 명령어 실행이 가능
linkdir mydata.txt orginalfile
root@server:~# dpkg -l firefox
희망상태=알수없음(U)/설치(I)/지우기(R)/깨끗이(P)/고정(H)
| 상태=아님(N)/설치(I)/설정(C)/풀림(U)/절반설정(F)/일부설치(H)/트리거대기(W)/
| / 트리거밀림(T)
|/ 오류?=(없음)/다시설치필요(R) (상태, 오류가 대문자=불량)
||/ 이름 버전 Architecture 설명
+++-==============-============-============-=================================
ii firefox 80.0.1+build amd64 Safe and easy web browser from Mo
root@server:~#
실습 6-1 dpkg 명령어로 패키지 설치 (P209)
설치할 파일
http://archive.ubuntu.com/ubuntu/pool/universe/m/mc/mc_4.8.19-1_amd64.deb http://archive.ubuntu.com/ubuntu/pool/universe/n/ncftp/ncftp_3.2.5-2_amd64.deb
#1 패키지 파일을 다운로드
root@server:~# wget http://archive.ubuntu.com/ubuntu/pool/universe/m/mc/mc_4.8.19-1_amd64.deb
--2020-09-08 14:52:01-- http://archive.ubuntu.com/ubuntu/pool/universe/m/mc/mc_4.8.19-1_amd64.deb
Resolving archive.ubuntu.com (archive.ubuntu.com)... 91.189.88.142, 91.189.88.152, 2001:67c:1360:8001::24, ...
접속 archive.ubuntu.com (archive.ubuntu.com)|91.189.88.142|:80... 접속됨.
HTTP request sent, awaiting response... 200 OK
Length: 473768 (463K) [application/x-debian-package]
Saving to: ‘mc_4.8.19-1_amd64.deb’
mc_4.8.19-1_amd64.d 100%[===================>] 462.66K 160KB/s in 2.9s
2020-09-08 14:52:05 (160 KB/s) - ‘mc_4.8.19-1_amd64.deb’ saved [473768/473768]
root@server:~# wget http://archive.ubuntu.com/ubuntu/pool/universe/n/ncftp/ncftp_3.2.5-2_amd64.deb
--2020-09-08 14:54:07-- http://archive.ubuntu.com/ubuntu/pool/universe/n/ncftp/ncftp_3.2.5-2_amd64.deb
Resolving archive.ubuntu.com (archive.ubuntu.com)... 91.189.88.142, 91.189.88.152, 2001:67c:1360:8001::23, ...
접속 archive.ubuntu.com (archive.ubuntu.com)|91.189.88.142|:80... 접속됨.
HTTP request sent, awaiting response... 200 OK
Length: 269736 (263K) [application/x-debian-package]
Saving to: ‘ncftp_3.2.5-2_amd64.deb’
ncftp_3.2.5-2_amd64 100%[===================>] 263.41K 177KB/s in 1.5s
2020-09-08 14:54:09 (177 KB/s) - ‘ncftp_3.2.5-2_amd64.deb’ saved [269736/269736]
root@server:~# ls *.deb
mc_4.8.19-1_amd64.deb ncftp_3.2.5-2_amd64.deb
#2 dpkg 명령어로 ncftp 설치
root@server:~# dpkg -l ncftp ⇐ 이미 설치되어 있는지 확인
dpkg-query: no packages found matching ncftp
root@server:~# dpkg --info ncftp_3.2.5-2_amd64.deb ⇐ 패키지 정보를 확인
new Debian package, version 2.0.
size 269736 bytes: control archive=1319 bytes.
588 bytes, 14 lines control
1194 bytes, 19 lines md5sums
201 bytes, 10 lines * postinst #!/bin/sh
115 bytes, 13 lines * prerm #!/bin/sh
Package: ncftp
Version: 2:3.2.5-2
Architecture: amd64
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Noël Köthe <noel@debian.org>
Installed-Size: 1526
Depends: libc6 (>= 2.15), libncurses5 (>= 6), libtinfo5 (>= 6)
Section: net
Priority: optional
Homepage: http://www.ncftpd.com/ncftp/
Description: User-friendly and well-featured FTP client
Ncftp allows a user to transfer files to and from a remote network
site, and offers additional features that are not found in the standard
interface, ftp. This version has Readline support enabled.
root@server:~# dpkg -i ncftp_3.2.5-2_amd64.deb ⇐ 설치
Selecting previously unselected package ncftp.
(데이터베이스 읽는중 ...현재 167498개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack ncftp_3.2.5-2_amd64.deb ...
Unpacking ncftp (2:3.2.5-2) ...
ncftp (2:3.2.5-2) 설정하는 중입니다 ...
update-alternatives: using /usr/bin/ncftp3 to provide /usr/bin/ncftp (ncftp) in auto mode
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
root@server:~# dpkg -l ncftp ⇐ 설치 확인
희망상태=알수없음(U)/설치(I)/지우기(R)/깨끗이(P)/고정(H)
| 상태=아님(N)/설치(I)/설정(C)/풀림(U)/절반설정(F)/일부설치(H)/트리거대기(W)/
| / 트리거밀림(T)
|/ 오류?=(없음)/다시설치필요(R) (상태, 오류가 대문자=불량)
||/ 이름 버전 Architecture 설명
+++-==============-============-============-=================================
ii ncftp 2:3.2.5-2 amd64 User-friendly and well-featured F
root@server:~#
#3 dpkg 명령어로 ncftp 삭제
root@server:~# dpkg -r ncftp
(데이터베이스 읽는중 ...현재 167517개의 파일과 디렉터리가 설치되어 있습니다.)
Removing ncftp (2:3.2.5-2) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
#4 의존성 문제가 있는 패키지를 설치
root@server:~# dpkg -i mc_4.8.19-1_amd64.deb
Selecting previously unselected package mc.
(데이터베이스 읽는중 ...현재 167498개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack mc_4.8.19-1_amd64.deb ...
Unpacking mc (3:4.8.19-1) ...
dpkg: dependency problems prevent configuration of mc:
mc 패키지는 다음 패키지에 의존: libssh2-1 (>= 1.2.8): 하지만:
libssh2-1 패키지는 설치하지 않았습니다. ⇒ 의존성 문제가 발생하는 패키지를 먼저 설치
mc 패키지는 다음 패키지에 의존: mc-data (= 3:4.8.19-1): 하지만:
mc-data 패키지는 설치하지 않았습니다.
dpkg: error processing package mc (--install):
의존성 문제 - 설정하지 않고 남겨둠
Processing triggers for gnome-menus (3.13.3-11ubuntu1.1) ...
Processing triggers for desktop-file-utils (0.23-1ubuntu3.18.04.2) ...
Processing triggers for mime-support (3.60ubuntu1) ...
처리하는데 오류가 발생했습니다:
mc
root@server:~# mc ⇐ 실행 시 의존성 오류 발생
mc: error while loading shared libraries: libssh2.so.1: cannot open shared object file: No such file or directory
실습 6-2 apt-get 명령어로 mc 패키지 설치하기 (P215)
#1 설치를 완료하지 못 한 mc 패키지를 삭제
root@server:~# dpkg -r mc
(데이터베이스 읽는중 ...현재 167597개의 파일과 디렉터리가 설치되어 있습니다.)
Removing mc (3:4.8.19-1) ...
Processing triggers for gnome-menus (3.13.3-11ubuntu1.1) ...
Processing triggers for desktop-file-utils (0.23-1ubuntu3.18.04.2) ...
Processing triggers for mime-support (3.60ubuntu1) ...
#2 설치할 패키지 정보를 확인
root@server:~# apt-cache show mc
Package: mc
Architecture: amd64
Version: 3:4.8.19-1
Priority: optional
Section: universe/utils
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian MC Packaging Group <pkg-mc-devel@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 1452
Provides: mcedit
Depends: e2fslibs (>= 1.37), libc6 (>= 2.15), libglib2.0-0 (>= 2.35.9), libgpm2 (>= 1.20.4), libslang2 (>= 2.2.4), libssh2-1 (>= 1.2.8), mc-data (= 3:4.8.19-1)
Recommends: mime-support, perl, unzip
Suggests: arj, bzip2, catdvi | texlive-binaries, dbview, djvulibre-bin, file, genisoimage, gv, imagemagick, libaspell-dev, links | w3m | lynx, odt2txt, poppler-utils, python, python-boto, python-tz, xpdf | pdf-viewer, zip
Filename: pool/universe/m/mc/mc_4.8.19-1_amd64.deb
Size: 473768
MD5sum: 042652517a66c5e8f17149e26326564a
SHA1: 439660ea74c3c9fe0b6f448fb91b3b93a10cc0d4
SHA256: 494fe386a93862c523b6c6bab766f21e77717bc6601cb7af59960e67c5162a72
Homepage: https://www.midnight-commander.org
Description-en: Midnight Commander - a powerful file manager
GNU Midnight Commander is a text-mode full-screen file manager. It
uses a two panel interface and a subshell for command execution. It
includes an internal editor with syntax highlighting and an internal
viewer with support for binary files. Also included is Virtual
Filesystem (VFS), that allows files on remote systems (e.g. FTP, SSH
servers) and files inside archives to be manipulated like real files.
Description-md5: 252a5c5aeeb7425db45357d4ab8aa55f
#3 의존성 정보를 확인
root@server:~# apt-cache depends mc
mc
의존: e2fslibs
libext2fs2
의존: libc6
의존: libglib2.0-0
의존: libgpm2
의존: libslang2
의존: libssh2-1
의존: mc-data
추천: mime-support
추천: perl
추천: unzip
unzip:i386
제안: arj
제안: bzip2
bzip2:i386
|제안: catdvi
제안: texlive-binaries
texlive-binaries:i386
제안: dbview
제안: djvulibre-bin
제안: file
file:i386
제안: genisoimage
제안: gv
제안: imagemagick
graphicsmagick-imagemagick-compat
imagemagick:i386
imagemagick-6.q16:i386
imagemagick-6.q16
제안: libaspell-dev
|제안: links
links:i386
|제안: w3m
w3m:i386
제안: lynx
lynx:i386
제안: odt2txt
제안: poppler-utils
poppler-utils:i386
제안: python
제안: python-boto
제안: python-tz
|제안: xpdf
제안: <pdf-viewer>
okular
atril
evince
gv
mupdf
viewpdf.app
xpdf
zathura-pdf-poppler
제안: zip
zip:i386
#4 패키지 설치
root@server:~# apt-get install mc
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
efibootmgr libfwup1 libllvm9
Use 'sudo apt autoremove' to remove them.
다음의 추가 패키지가 설치될 것입니다 :
libssh2-1 mc-data
제안하는 패키지:
arj catdvi | texlive-binaries dbview djvulibre-bin gv libaspell-dev links
| w3m | lynx odt2txt python python-boto python-tz
다음 새 패키지를 설치할 것입니다:
libssh2-1 mc mc-data
0개 업그레이드, 3개 새로 설치, 0개 제거 및 3개 업그레이드 안 함.
1,785 k바이트 아카이브를 받아야 합니다.
이 작업 후 7,541 k바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n]
받기:1 http://kr.archive.ubuntu.com/ubuntu bionic/universe amd64 libssh2-1 amd64 1.8.0-1 [73.2 kB]
받기:2 http://kr.archive.ubuntu.com/ubuntu bionic/universe amd64 mc-data all 3:4.8.19-1 [1,238 kB]
받기:3 http://kr.archive.ubuntu.com/ubuntu bionic/universe amd64 mc amd64 3:4.8.19-1 [474 kB]
내려받기 1,785 k바이트, 소요시간 7초 (250 k바이트/초)
Selecting previously unselected package libssh2-1:amd64.
(데이터베이스 읽는중 ...현재 167507개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../libssh2-1_1.8.0-1_amd64.deb ...
Unpacking libssh2-1:amd64 (1.8.0-1) ...
Selecting previously unselected package mc-data.
Preparing to unpack .../mc-data_3%3a4.8.19-1_all.deb ...
Unpacking mc-data (3:4.8.19-1) ...
Selecting previously unselected package mc.
Preparing to unpack .../mc_3%3a4.8.19-1_amd64.deb ...
Unpacking mc (3:4.8.19-1) ...
mc-data (3:4.8.19-1) 설정하는 중입니다 ...
libssh2-1:amd64 (1.8.0-1) 설정하는 중입니다 ...
mc (3:4.8.19-1) 설정하는 중입니다 ...
update-alternatives: using /usr/bin/mcview to provide /usr/bin/view (view) in auto mode
Processing triggers for gnome-menus (3.13.3-11ubuntu1.1) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Processing triggers for mime-support (3.60ubuntu1) ...
Processing triggers for desktop-file-utils (0.23-1ubuntu3.18.04.2) ...
Processing triggers for libc-bin (2.27-3ubuntu1.2) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
실습 6-4 root 사용자의 비밀번호 분실 시 조치하기
부팅 시 ESC 키를 누릅니다.
E 키를 눌러서 편집 모드로 진입 > init=/bin/bash 를 추가 > F10 키를 눌러서 재시작
쉘에서 변수 사용법
ubuntu@server-b:~$ a=10
ubuntu@server-b:~$ echo $a
10
ubuntu@server-b:~$ b=20
ubuntu@server-b:~$ echo $b
20
ubuntu@server-b:~$ echo $a+$b
10+20
앞에서 했던 작업을 파일로 만들어서 일괄로 실행
ubuntu@server-b:~$ vi vartest.sh
#!/bin/bash a=10 echo $a b=20 echo $b echo $a+$b |
ubuntu@server-b:~$ chmod +x vartest.sh
ubuntu@server-b:~$ ./vartest.sh
10
20
10+20
ubuntu@server-b:~$
변수를 나타내는 $ 기호를 이스케이프시키는 방법과 사용자 입력을 변수로 할당하는 방법
ubuntu@server-b:~$ vi var1.sh
#!/bin/bash myvar="Hi Woo" ⇐ (0) echo $myvar ⇐ (1) echo "$myvar" ⇐ (2) echo '$myvar' ⇐ (3) echo \$myvar ⇐ (4) echo 값 입력: read myvar ⇐ (5) 사용자가 입력한 값이 저장 echo '$myvar' = $myvar exit 0 |
ubuntu@server-b:~$ sh var1.sh
Hi Woo ⇐ (1) $myvar를 변수로 인식해서 (0)에서 정의한 변수의 값이 출력
Hi Woo ⇐ (2)
$myvar ⇐ (3) $myvar를 변수로 인식하지 않고 문자열로 인식 ⇒ 이스케이프되었다
$myvar ⇐ (4)
값 입력:
abcd ⇐ 입력한 값
$myvar = abcd
숫자 연산
ubuntu@server-b:~$ vi numcalc.sh
#!/bin/sh num1=100 num2=$num1+200 echo $num2 num3=`expr $num1 + 200` echo $num3 num4=`expr \( $num1 + 200 \) / 10 \* 2` echo $num4 exit 0 |
ubuntu@server-b:~$ sh numcalc.sh
100+200
300
60
파라미터 변수
ubuntu@server-b:~$ vi paravar.sh
#!/bin/sh echo "실행파일 이름 : <$0>" echo "첫번째 파라미터 : <$1>, 두번째 파라미터 : <$2>" echo "전체 파라미터 : <$*>" exit 0 |
ubuntu@server-b:~$ sh paravar.sh 11111 22222 33333 44444
실행파일 이름 : <paravar.sh>
첫번째 파라미터 : <11111>, 두번째 파라미터 : <22222>
전체 파라미터 : <11111 22222 33333 44444>
쉘 스크립트 작성 및 실행, … 반드시 복습, 예습, 과외, … 해 보세요.
'리눅스(Linux)' 카테고리의 다른 글
[Linux] 리눅스 setuid, setgid (0) | 2023.07.28 |
---|---|
우분투 네트워크간 접속, 포트포워딩 (0) | 2020.10.07 |
[리눅스] SSH 접속, 포트포워딩, mount, umount, 고정IP로 변경, genisoimage (0) | 2020.09.07 |
꿀팁 정보 (0) | 2020.09.06 |
9/3 (목) 실습 환경 구성 (0) | 2020.09.06 |