第3章:基本存取命令列与终端机介绍

前言

从上一章节中,我们已经将实验与教学的环境给建置起来了,在这一章节中,将会演示使用「workstation」之虚拟主机来存取终端机的方法以及基本的Bash shell之介绍。

开启workstation虚拟主机

首先,先打开VirtualBox,接着选取「workstation」後,按下启动的按钮,就可以把这台虚拟机器给启动了,相关的操作画面如下图所示:

启动虚拟机器图示

登入到本地端主机

接着会显示登入画面,如下图所示:

登入画面

从上面的登入画面可以得知,使用者为:rockylinux,点击下去之後,要输入密码,密码为:rocky,输入完密码按下「enter」键之後,就可以登入到桌面环境了,相关的操作图示如下所示:

输入密码

Bash shell基本介绍

Bash全名叫做「GNU Bourne-Again Shell」,将这个Bash之shell呼叫出来的方式如下:登入进去到桌面之後,可以执行一个终端机,在Rocky Linux这个Linux发行版本底下预设执行shell为Bash,可以点桌面上方的「Activities」,并会得到下面的图示:

桌面图示

接着选择画面左边的黑色图示,从下面数来第二个,这个图示就是开启终端机的图示,点击下去之後,就会打开终端机,并启动互动式模式的Bash shell了,相关的操作如下图所示:

终端机缩图图示

终端机

从上述的操作,就可以把一个终端机给呼叫出来了,接着会有一个文字,如下所示:

[rockylinux@workstation ~]$

从上面这一行的文字来看,rockylinux指的是登入的使用者名称,而中间用小老鼠隔开,後面指的是这台主机的名称,像以这台主机为例,就叫做workstation,而~则是目前停在的目录,这在Bash shell的世界中,这个代表的是当前使用者的家目录路径,而$是这个结尾的意思,後面开始的地方就是我们可以输入指令的地方了。

登出本地端的电脑主机

成功登入了桌面环境以及打开了终端机之後,我们也可以进行登出本地端的主机,由於我们有安装桌面环境的缘故,因此当输入了「exit」指令时,只会把当前所开启的终端机给关闭,桌面环境所执行的shell还是在登入的状态,若要回到原来前面小节中,一开始在使用者的登入状态的话,需要关闭终端机之後,按下右上角的电源键之图示并选择使用者名称选项,点下去之後,有一个「log out」选项,按下去之後,才会回到先前一开始使用者登入图示的画面,相关的图示如下图所示:

exit

click logout option

桌面环境操作介绍

回到桌面环境,这是一个叫做GNOME之桌面环境,这个桌面环境也是一种广为流行的桌面环境,有了桌面环境就可以有图示之外,还可以选择图形化的应用程序出来,像是前面小节中所提到的终端机就是桌面图形化程序的其中一种,而我们可以照着下图所示,点击左边的最後一个选项,叫做「show applications」,就会把所有在这台主机上所安装的图形化应用程序都列出来,有点类似像Windows作业系统上的应用程序集,相关的操作如下图所示:

show applications

show applications list

使用Bash shell执行基本的命令

利用上面小节中所提到的终端机开启的方法,将终端机打开之後,输入「whoami」之指令,可以得到下面的文字:

[rockylinux@localhost ~]$ whoami
rockylinux
[rockylinux@localhost ~]$

上述的指令是查看当前使用者名称,接着,输入「date」则可以跳出当前的时间的字串,相关的输出如下所示:

[rockylinux@localhost ~]$ date
Sun Sep 19 21:01:12 CST 2021
[rockylinux@localhost ~]$

如果要显示目前的时间并以「时:分」之格式来表示的话,输出的结果如下所示:

[rockylinux@localhost ~]$ date +%R
21:02
[rockylinux@localhost ~]$
[rockylinux@localhost ~]$

而「+%R」是一个格式化日期字串之参数,显示出来就是我们上面所要格式的结果,表示的时分字串是以24小时制,而使用「+%x」之格式化选项,则是会输出:「月/日/年」之格式化日期字串。

[rockylinux@localhost ~]$ date +%x
09/19/2021

有关於「date」指令所用到的日期之格式化字串选项还有很多,如「%F」、「+%Y」、「+%m」以及「+%d」等,要看一个指令的用法或是相观的说明将会在後面的章节中提到,这个章节只要会基本的操作指令输入即可。

接着再介绍一个指令叫做「passwd」,这个指令是用来修改当前的使用者密码的,当我们执行这个指令下去的时候,就会得到下面的输出文字:

[rockylinux@localhost ~]$ passwd
Changing password for user rockylinux.
Current password:

接着就会要求输入当前使用者的密码,当成功的输入当前这个使用者密码之後,就会要求输入新的密码,接着就会得到下列的文字:

[rockylinux@localhost ~]$ passwd
Changing password for user rockylinux.
Current password:
New password:

当输入新的密码之後,则会输入下列的文字:

[rockylinux@localhost ~]$ passwd
Changing password for user rockylinux.
Current password:
New password:
Retype new password:

从上面的输出文字来看,会再要求再输入一次密码,当两次输入的密码都相同之後,则当前的使用者修改密就算成功了,整个成功的修改密码过程之输出文字如下所示:

[rockylinux@localhost ~]$ passwd
Changing password for user rockylinux.
Current password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

有时候,当设定新的密码太简单的话,则会出现下列的错误:

[rockylinux@localhost ~]$ passwd
Changing password for user rockylinux.
Current password:
New password:
BAD PASSWORD: The password is shorter than 8 characters
passwd: Authentication token manipulation error

从上面的输出文字得知,就是密码设定的长度太短,没有到8个字元,因此不允许修改此过短的密码,但是若要设定这个密码也是可以的,可以用root使用者,或是当前使用者有使用「sudo」权限的话,也可以做到,这部分在後面的章节会再提到。

所有的使用者与相对应的密码都会存在档案里面,存在的路径为:「/etc/passwd」这个路径底下,可以用「cat」这个指令将此密码档案给印出来到终端机上面,相关的输出文字如下所示:

[rockylinux@localhost ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
geoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pipewire:x:996:992:PipeWire System Daemon:/var/run/pipewire:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
libstoragemgmt:x:995:989:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
clevis:x:994:988:Clevis Decryption Framework unprivileged user:/var/cache/clevis:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
unbound:x:993:987:Unbound DNS resolver:/etc/unbound:/sbin/nologin
gluster:x:992:986:GlusterFS daemons:/run/gluster:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
setroubleshoot:x:991:984::/var/lib/setroubleshoot:/sbin/nologin
saslauth:x:990:76:Saslauthd user:/run/saslauthd:/sbin/nologin
dnsmasq:x:983:983:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
sssd:x:982:982:User for sssd:/:/sbin/nologin
cockpit-ws:x:981:980:User for cockpit web service:/nonexisting:/sbin/nologin
cockpit-wsinstance:x:980:979:User for cockpit-ws instances:/nonexisting:/sbin/nologin
chrony:x:979:978::/var/lib/chrony:/sbin/nologin
flatpak:x:978:977:User for flatpak system helper:/:/sbin/nologin
colord:x:977:976:User for colord:/var/lib/colord:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:976:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
rockylinux:x:1000:1000:rockylinux:/home/rockylinux:/bin/bash
[rockylinux@localhost ~]$

从上述的密码档案来看,内容除了记录使用者的资讯之外,还有使用者对应的家目录路径、使用者id等资讯,此档案的资讯解读在後面的章节也会提到,有监於用cat /etc/passwd这个指令会把密码档案所有内容都印出来,若要此档案内容的前几行要怎麽做?这时我们可以使用「head」这个指令来做到,相关指令输出的结果如下:

[rockylinux@localhost ~]$ head /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

从上述的指令来看,head预设会印出指定档案之前10行内容出来,若要印出更少行或更多行,则可以使用「-n」选项做到,例如:「head -n 5 /etc/passwd」,接着就会得到下列的输出结果:

[rockylinux@localhost ~]$ head -n 5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

有印出档案前几行的内容,当然也有印出档案内容後面几行的内容之指令,那就是「tail」,使用这个tail指令与head指令相仿,什麽参数都没有加上去的话,则印出档案内容中最後10行的内容,若要指定印出最後几行,则可以使用「-n」之参数做到。

指令参数有时候很多,不是人可以记得起来的,这时可以使用TAB按键来做到,以tail这个指令来说,可以这样做:

[rockylinux@localhost ~]$ tail
.bash_history  .bashrc        Desktop/       .esd_auth      .mozilla/      .pki/          Videos/
.bash_logout   .cache/        Documents/     .ICEauthority  Music/         Public/
.bash_profile  .config/       Downloads/     .local/        Pictures/      Templates/

从上述输出的文字,当指输入tail指令并按下TAB键时,则会跳出所有路径选项,因为要接上档案的路径,或是打上一个「-」并按下TAB则会再跳出「-」,接着按两下TAB键,则会跳出所有可能的长选项供使用者所使用,相关的输出指令如下所示:

[rockylinux@localhost ~]$ tail --
--bytes=                --lines=                --silent                --zero-terminated
--follow                --max-unchanged-stats=  --sleep-interval=
--follow=               --pid=                  --verbose
--help                  --retry                 --version

假设要印出/etc/passwd档案里面之前5行则可以使用长选项之「--lines」或是短选项的「-n」来做到,相关输出文字如下所示:

[rockylinux@localhost ~]$ tail --lines=5 /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:976:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
rockylinux:x:1000:1000:rockylinux:/home/rockylinux:/bin/bash
[rockylinux@localhost ~]$ tail -n 5 /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:976:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
rockylinux:x:1000:1000:rockylinux:/home/rockylinux:/bin/bash

TAB按键是一个很实用的按键,尤其当使用不知道指令有什麽选项参数可以选用的时候,可以透过这按键将所有情况的选项列出,供使用者做选择。

当打了很多指令之後,需要将之前打过的指令历史列出,则可以使用「history」来做到,相关输出的文字如下所示:

[rockylinux@localhost ~]$ history
    1  ls /home/
    2  ip a show
    3  sudo reboot
    4  whoami
    5  date
    6  date +%R
    7  date +%X
    8  date +%x
    9  date +%d
   10  date +%F
   11  who
   12  date +%F
   13  date +%f
   14  date +%Y
   15  date +%M
   16  date +%m
   17  date +%d
   18  passwd
   19  cat /etc/passwd
   20  head /etc/passwd
   21  head -n 5 /etc/passwd
   22  tail /etc/passwd
   23  tail --lines=1 /etc/passwd
   24  tail --lines=5 /etc/passwd
   25  tail -n 5 /etc/passwd
   26  history

当我们要用上面列出来之第25行指令再执行一次时,可以使用「!25」来做到,相关输出如下所示:

[rockylinux@localhost ~]$ !25
tail -n 5 /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
gnome-initial-setup:x:976:975::/run/gnome-initial-setup/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
rockylinux:x:1000:1000:rockylinux:/home/rockylinux:/bin/bash

编辑指令

当指令一多的时候,难免会有打错的可能,为了要更方便的编辑指令,以下介绍几个实用的组合键可以做到编辑指令的方法:

  1. 「ctrl」键加上「A」键,则是移到指令的最前面,而这个组合键也等同於「home」键。
  2. 「ctrl」键加上「E」键,则是移到指令的最後面,而这个组合键等同於「end」键。
  3. 「ctrl」键加上「U」键,则是将指令的游标(cursor)之前的字串全部清除。
  4. 「ctrl」键加上「K」键,则是将指令的游标(cursor)之後的字串全部清除。
  5. 「ctrl」键加上键盘左方向键,则是快速的将游标往左移动。
  6. 「ctrl」键加上键盘右方向键,则是快速的将游标往右移动。
  7. 「ctrl」键加上「R」键,则是可以在执行过的历史清单中搜寻指令。

课後练习

  1. 请使用head指令印出/etc/passwd档案中之前8行出来。
  2. 请使用tail指令印出/etc/passwd档案中最後15行出来。
  3. 请使用date指令印出带有「年-月-日」之日期格式字串结果出来,假设今天是2021年9月19日,则印出「2021-09-19」。

<<:  Day 4 - 资料绑定与模板语法

>>:  [Day 14] 回测分析

Day 6 一样的风格,不一样的体验 - 澳洲跟印度 气象局官网分析

看完了印度整体的网页规划,这个时候我会做一点竞品分析,不免俗的先去看看其他人怎麽做这个产品,毕竟踩在...

Day 9 情报收集 - Information Gathering (netmask)

今天要介绍netmask,是可以让我们自由转换各种不同表示类型的网路地址以及子网遮罩,在划分子网路的...

30天零负担轻松学会制作APP介面及设计【DAY 07】

大家好,我是YIYI,今天要开始用Whimsical画架构图了~ 进入Whimsical 先透过【D...

[Day04]稽核员守则与伦理

耶!上完课、通过考试之後,是不是就可以出去稽核客户了咧? 是不是可以执行稽核活动,然後就可以稽他!稽...

【Day 09】 实作 - 透过 AWS 服务 - AppFlow 把 Google Analytics 资料存放至 AWS 中 ( 2 )

大家好~昨天我们建立好 Google Analytics 与 AWS 连线,现在我们就可以透过 AW...