본문 바로가기

클라우드/리눅스(우분투)

[리눅스] 사용자 및 그룹관리 & 파일 소유권 & 프로세스 & 패키지 관리 & 쉘스크립트

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>





쉘 스크립트 작성 및 실행, … 반드시 복습, 예습, 과외, … 해 보세요.