Linux命令与脚本实用技巧

内容分享2个月前发布
0 0 0

139、使用grep命令和/usr/share/hunspell/en_US.dic文件,找出包含以下单词之一的所有行:org、kay或tuna。


$ grep -E "org|kay|tuna" /usr/share/hunspell/en_US.dic

140、找出一个正则表达式,使其能匹配 “Include” 行中的单词,而不匹配 “Exclude” 行中的单词。Include 行:arcane, capper, zoology;Exclude 行:air, coper, zoloc

arc|cap|zoo

141、找出一个正则表达式,使其能匹配“Include”行中的单词,而不匹配“Exclude”行中的单词。Include行:0th/pt, 3th/tc, 9th/pt;Exclude行:0/nm, 3/nm, 9/nm。

[0-9]th.+

142、用户做了什么?

用户执行了

top

命令查看系统和各进程的内存与 CPU 消耗信息,可能还使用了

id


last

等命令查看用户信息和用户登录时间。

143、编写一个简单的脚本,检查是否恰好传入了两个参数。如果是,则按逆序打印这些参数。


#!/bin/bash
if [ $# -ne 2 ]; then
    echo "Error"
else
    echo "$2 $1"
fi

144、在代码中使用 == 和 -eq 有何不同?

使用

==

进行的是字符串比较,即当两个变量的字符完全匹配时,条件为真;而

-eq

用于数字比较,判断两个数值是否相等。字符串比较在测试数字时可能会导致意外结果,例如

1+1 == 2

结果为

false

,而使用数字比较则可正确判断数值关系。

145、编写一个简短的脚本,该脚本接受一个参数。如果传入了参数,检查该参数是否与当前目录的名称匹配。如果匹配,打印yes;否则,打印no。


#!/bin/bash
if [ "$1" == "$(basename $PWD)" ]; then
    echo "yes"
else
    echo "no"
fi

146、用户在 shell 中输入以下内容:$ PATH=~/scripts $ ls 命令 ‘ls’ 位于 ‘/bin/ls’,但因 ‘/bin’ 不在 PATH 环境变量中而无法找到该命令,显示 ‘ls: command not found’。用户做了什么?

用户用目录

~/scripts

覆盖了

PATH

的内容,由于

'ls'

命令不在

PATH

中,所以无法找到该命令。此更改仅影响当前会话,注销并重新登录会恢复更改。

147、用户在 shell 中输入:$ PATH=~/scripts $ ls ,命令 ‘ls’ 位于 ‘/bin/ls’ ,但因 ‘/bin’ 不在 PATH 环境变量中而无法找到该命令,显示 ‘ls: command not found’ 。什么命令可以将 PATH 的当前值与新目录 ~/scripts 合并?

PATH=$PATH:~/scripts

148、考虑以下脚本。注意它使用 elif 来检查第二个条件:#!/bin/bash fruit1 = Apples fruit2 = Oranges if [ $1 -lt $# ] then echo “This is like comparing $fruit1 and $fruit2!” elif [ $1 -gt $2 ] then echo ‘$fruit1 win!’ else echo “Fruit2 win!” done。修复脚本中的错误。

以下是修正后的脚本:


#!/bin/bash
fruit1=Apples
fruit2=Oranges
if [ $1 -lt $# ]; then
    echo "This is like comparing $fruit1 and $fruit2!"
elif [ $1 -gt $2 ]; then
    echo "$fruit1 win!"
else
    echo "$fruit2 win!"
fi

原脚本存在以下错误:

赋值语句等号两边不能有空格,应将

fruit1 = Apples


fruit2 = Oranges

改为

fruit1=Apples


fruit2=Oranges

elif

语句中

[$1 -gt $2 ]

方括号两边需要有空格,应改为

[ $1 -gt $2 ]

echo '$fruit1 win!'

单引号会使变量无法被替换,应改为双引号

echo "$fruit1 win!"

echo "Fruit2 win!"

这里应使用变量

$fruit2

,改为

echo "$fruit2 win!"

脚本结尾的

done

用于循环结构,这里是

if - elif - else

结构,应使用

fi

结尾。

149、阅读以下 script1.sh 的内容:#!/bin/bash

if [ $# -lt 1 ]

then

echo “This script requires at least 1 argument.”

exit 1

fi

echo $1 | grep “^[A-Z]*$” > /dev/null

if [ $? -ne 0 ]

then

echo “no cake for you!”

exit 2

fi

echo “here’s your cake!”

exit 0

以下命令的输出是什么?

◦./script1.sh

◦echo $?

◦./script1.sh cake

◦echo $?

◦./script1.sh CAKE

◦echo $?

– 命令

./script1.sh

的输出:This script requires at least 1 argument.

– 命令

echo $?

的输出:1

– 命令

./script1.sh cake

的输出:no cake for you!

– 命令

echo $?

的输出:2

– 命令

./script1.sh CAKE

的输出:here’s your cake!

– 命令

echo $?

的输出:0

150、阅读文件 script2.sh 的内容:for filename in $1/*.txt; do cp $filename $filename.bak; done 请描述你所理解的此脚本的用途。

该脚本会为第一个参数所指定子目录下所有以 .txt 结尾的文件创建备份副本。

151、创建一个脚本,该脚本可以接受用户输入的任意数量的参数,并仅打印那些大于 10 的数字参数。


#!/bin/bash
for i in $@
do
    echo $i | grep "^[0-9]*$" > /dev/null
    if [ $? -eq 0 ]
    then
        if [ $i -gt 10 ]
        then
            echo -n "$i "
        fi
    fi
done
echo ""

152、阅读以下 script1.sh 脚本内容:#!/bin/bash

if [ $# -lt 1 ]

then

echo “This script requires at least 1 argument.”

exit 1

fi

echo $1 | grep “^[A-Z]*$” > /dev/null

if [ $? -ne 0 ]

then

echo “no cake for you!”

exit 2

fi

echo “here’s your cake!”

exit 0

请问以下命令的输出是什么?

◦ 命令:./script1.sh

◦ 命令:echo $?

◦ 命令:./script1.sh cake

◦ 命令:echo $?

◦ 命令:./script1.sh CAKE

◦ 命令:echo $?

* 命令:

./script1.sh

,输出:This script requires at least 1 argument.

* 命令:

echo $?

,输出:1

* 命令:

./script1.sh cake

,输出:no cake for you!

* 命令:

echo $?

,输出:2

* 命令:

./script1.sh CAKE

,输出:here’s your cake!

* 命令:

echo $?

,输出:0

153、创建一个脚本,该脚本可以接收用户输入的任意数量的参数,并仅打印那些大于 10 的数字参数。


#!/bin/bash
for i in $@
do
    echo $i | grep "^[0-9]*$" > /dev/null
    if [ $? -eq 0 ]
    then
        if [ $i -gt 10 ]
        then
            echo -n "$i "
        fi
    fi
done
echo ""

154、哪个项目构成了所有 Linux 发行版的通用组件?CentOS、Red Hat、Ubuntu、Linux 内核、CoreOS

Linux 内核

155、苹果的 macOS 底层使用的是哪个操作系统?OS X、OSX、Darwin、MacOS

Darwin

156、Linux发行版与Linux内核有何不同?选项1:内核是发行版的一部分,发行版有围绕内核的应用程序,使内核更实用;选项2:内核就是Linux发行版;选项3:所有使用相同内核的发行版都是一样的。

选项1

157、操作系统的哪个组件允许访问硬件?驱动程序、shell、服务、应用程序

驱动程序

158、如果你可以访问命令行,请检索你的 Linux 系统当前的内核版本。

使用命令 uname -r ,示例输出为 4.15.0 – 47 – generic

159、使用搜索引擎,找出并确定可使用的公共云服务提供商,例如亚马逊网络服务(AWS)、谷歌云、Rackspace 等。选择其中一个,查看有哪些操作系统可供部署。

以 AWS 为例,可部署许多 Linux 发行版,如 Debian、Red Hat、SUSE 或 Ubuntu,还有 Windows。

160、苹果的OS X系统底层使用的是哪个操作系统的内核?选项:OS X、OSX、Darwin、MacOS

Darwin

161、Linux发行版与Linux内核有何不同?

内核是发行版的一部分,发行版包含应用程序,围绕内核使其变得可用。

162、以下哪个是Linux中的桌面环境?Mint、Elementary、Zorin、Wayland


Mint



Elementary



Zorin

可作为 Linux 桌面环境


Wayland

是显示服务器协议,而非传统桌面环境

163、描述以下术语:处理器(Processor)、中央处理器(CPU)、图形处理器(GPU)


处理器(Processor)

:一个通用术语,适用于任何类型的处理器,常被错误地用作 CPU 的同义词。


中央处理器(CPU)

:即 Central Processing Unit,是为通用计算任务提供支持的处理单元。


图形处理器(GPU)

:即 Graphical Processing Unit,是为支持与图形呈现相关活动而优化的处理单元。

164、如果你主要运行视频编辑应用程序(一项计算密集型活动),你认为哪些组件和特性对系统可用性影响最大:CPU 核心数、CPU 速度、可用系统内存、存储系统、GPU、视频显示器、以上都不是

CPU 核心数、CPU 速度、可用系统内存、存储系统

165、系统中第三个SATA驱动器的第三个分区在/dev中的设备文件名应该是什么:sd3p3、sdcp3、sdc3、以上都不是

sdc3

166、在系统上运行 lsblk 命令,识别设备的类型和数量、每个设备的分区结构、每个分区的文件系统类型和挂载点。


## 设备信息

- **设备的类型和数量**:有一个设备,为 `mmcblk0`,按惯例它是一张 SD 存储卡。
- **每个设备的分区结构**:有两个分区,分别是 `mmcblk0p1` 和 `mmcblk0p2`。
- **每个分区的文件系统类型和挂载点**:
  - 分区 1 使用 `vfat` 文件系统,用于启动系统,挂载点为 `/boot`。
  - 分区 2 使用 `ext4` 文件系统,作为主文件系统,挂载点为 `/`。

167、在系统上运行 lsblk 命令,识别设备类型及数量。

有一个设备:mmcblk0,mmcblk 是 SD 存储卡。

168、在系统上运行lsblk命令,识别每个设备的分区结构。

有两个分区:mmcblk0p1和mmcblk0p2。

169、在系统上运行 lsblk -f 命令,识别每个分区的文件系统类型和挂载点

分区 1 使用

vfat

文件系统,用于引导系统,挂载点为

/boot

分区 2 使用

ext4

文件系统,作为主文件系统,挂载点为

/

170、如果你主要运行视频编辑应用程序(一项计算密集型活动),你认为哪些组件和特性对系统可用性影响最大:CPU核心数、CPU速度、可用系统内存、存储系统、GPU、视频显示器、以上都不是

CPU核心数、CPU速度、可用系统内存、存储系统

171、在你的系统上运行 lsblk 命令。识别以下参数:设备的类型和数量;每个设备的分区结构;每个分区的文件系统类型和挂载点。


## 设备信息

- **设备的类型和数量**:有一个设备,为 `mmcblk0`,按惯例这是一个 SD 存储卡。
- **每个设备的分区结构**:有两个分区,分别是 `mmcblk0p1` 和 `mmcblk0p2`。
- **每个分区的文件系统类型和挂载点**:
  - 分区 1 使用 `vfat` 文件系统,用于启动系统,挂载点为 `/boot`。
  - 分区 2 使用 `ext4` 文件系统,作为主文件系统,挂载点为 `/`。

172、使用 which 命令找出以下程序的位置并完成表格:程序、which 命令、可执行文件路径(输出)、用户是否需要 root 权限:swapon、kill、cut、usermod、cron、ps

程序 which 命令 可执行文件路径(输出) 用户是否需要 root 权限
swapon which swapon /sbin/swapon
kill which kill /bin/kill
cut which cut /usr/bin/cut
usermod which usermod /usr/sbin/usermod
cron which cron /usr/sbin/cron
ps which ps /bin/ps

173、以下文件在哪里可以找到?文件包括:/etc、~、.bashrc、bash.bashrc、passwd、.profile、resolv.conf、sysctl.conf

/etc

:系统目录

~

:用户主目录

.bashrc

:用户主目录

bash.bashrc

:/etc目录

passwd

:/etc目录

.profile

:用户主目录

resolv.conf

:/etc目录

sysctl.conf

:/etc目录

174、解释在 /boot 中找到的内核文件 vmlinuz – 4.15.0 – 50 – generic 数字元素的含义:数字元素 4、15、0、50 分别代表什么?

4:内核版本;15:主修订号;0:次修订号;50:补丁号

175、硬盘的设备文件是根据它们使用的控制器来表示的 —— 我们看到使用 SCSI(小型计算机系统接口)和 SATA(串行高级技术附件)的驱动器用 /dev/sd* 表示,那么旧的 IDE(集成驱动电子设备)驱动器和现代的 NVMe(非易失性内存快速通道)驱动器分别是如何表示的?

旧的 IDE 驱动器用

/dev/hd*

表示,现代的 NVMe 驱动器用

/dev/nvme*

表示。

176、查看文件 /proc/meminfo。将此文件的内容与 free 命令的输出进行比较,并确定 /proc/meminfo 中的哪些键对应 free 输出中的以下字段:total、free、shared、buff/cache、available

total

对应

MemTotal

/

SwapTotal

free

对应

MemFree

/

SwapFree

shared

对应

Shmem

buff/cache

对应

Buffers


Cached


SReclaimable

available

对应

MemAvailable

177、旧的 IDE(集成驱动器电子)硬盘是如何表示的?

/dev/hd*

178、现代NVMe(非易失性内存快速传输)驱动器是如何表示的?

/dev/nvme*

179、查看文件 /proc/meminfo。将此文件内容与 free 命令的输出进行比较,确定 /proc/meminfo 中的哪些键对应 free 输出中的以下字段:total、free、shared、buff/cache、available

total

对应

MemTotal

/

SwapTotal

free

对应

MemFree

/

SwapFree

shared

对应

Shmem

buff/cache

对应

Buffers


Cached


SReclaimable

available

对应

MemAvailable

180、使用 which 命令找出以下程序的位置并完成表格:程序、which 命令、二进制文件路径(输出)、用户是否需要 root 权限?涉及的程序有 swapon、kill、cut、usermod、cron、ps

程序

which

命令

二进制文件路径(输出) 用户是否需要

root

权限?

swapon

which swapon

/sbin/swapon

kill

which kill

/bin/kill

cut

which cut

/usr/bin/cut

usermod

which usermod

/usr/sbin/usermod

cron

which cron

/usr/sbin/cron

ps

which ps

/bin/ps

181、以下文件在哪里可以找到?文件有 /etc、~/.bashrc、bash.bashrc、passwd、.profile、resolv.conf、sysctl.conf


- `/etc` 是系统配置文件目录
- `~/.bashrc` 通常在用户主目录下
- `bash.bashrc` 在系统全局范围,用于交互式 bash shell
- `passwd` 在 `/etc` 目录
- `.profile` 在用户主目录
- `resolv.conf` 在 `/etc` 目录,是解析器配置文件
- `sysctl.conf` 在 `/etc` 目录,用于设置内核系统变量

182、解释在 /boot 中找到的内核文件 vmlinuz – 4.15.0 – 50 – generic 的数字元素 4、15、0、50 的含义分别是什么

4 代表内核版本;15 代表主修订号;0 代表次修订号;50 代表补丁号。

183、现代NVMe(非易失性内存快速传输)驱动器是如何表示的?

/dev/nvme*

184、查看文件 /proc/meminfo。将此文件的内容与 free 命令的输出进行比较,并确定 /proc/meminfo 中的哪些键对应 free 输出中的以下字段:total、free、shared、buff/cache、available

total

对应

MemTotal / SwapTotal

free

对应

MemFree / SwapFree

shared

对应

Shmem

buff/cache

对应

Buffers


Cached


SReclaimable

available

对应

MemAvailable

185、查看文件 /proc/meminfo。将该文件的内容与 free 命令的输出进行比较,确定 /proc/meminfo 中的哪些键对应 free 输出中的以下字段:total、free、shared、buff/cache、available

total

对应

MemTotal

/

SwapTotal

free

对应

MemFree

/

SwapFree

shared

对应

Shmem

buff/cache

对应

Buffers


Cached


SReclaimable

available

对应

MemAvailable

186、哪些进程是由用户carol启动的?

只有一个:top。

187、哪个进程是最先运行的?你如何判断?

最先运行的进程是

systemd


判断依据:


– 它的 PID 为 1。

– 进程的 PID 是按顺序分配的正整数。

– PID 为 1 表明它是最早启动的进程。

188、完成表格,指明内存、交换空间、进程ID(PID)这些信息在top命令输出的摘要区和任务区是否可以找到

信息类别 摘要区 任务区
内存
交换空间
PID

189、完成表格,指明以下信息在 top 输出的哪个区域可以找到:关于 CPU 时间和命令的信息,摘要区域还是任务区域

CPU 时间:任务区域;命令:任务区域

190、读取以下二进制日志应使用什么命令?/var/log/wtmp /var/log/btmp /run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal

/var/log/wtmp

使用

last

命令;

/var/log/btmp

使用

lastb

命令;

/run/log/journal/2a7d9730cd3142f4b15e20d6be631836/system.journal

使用

journalctl

命令。

191、要显示内核环形缓冲区,你会使用哪两个命令?


dmesg;dmesg配合grep或less使用,如`dmesg | grep boot`、`dmesg | less`

192、指出以下日志消息所属的位置:2023年7月10日13:37:39,debian系统上的dbus进程(进程ID为303)记录系统成功激活了’org.freedesktop.nm_dispatcher’服务,候选位置为/var/log/auth.log、/var/log/kern.log、/var/log/syslog、/var/log/messages

/var/log/syslog

193、指出日志消息“Jul 10 11:23:58 debian kernel: [ 1.923349] usbhid: USB HID core driver”所属的日志文件,可选项有 /var/log/auth.log、/var/log/kern.log、/var/log/syslog、/var/log/messages。

/var/log/kern.log

194、指出日志消息“Jul 10 14:02:53 debian sudo: pam_unix(sudo:session): session opened for user root by carol(uid=0)”所属的日志文件,候选文件有 /var/log/auth.log、/var/log/kern.log、/var/log/syslog、/var/log/messages。

以下是调整为 Markdown 格式的内容:


/var/log/auth.log

因为该文件存储认证相关信息,此日志记录了用户认证后打开会话的信息。

© 版权声明

相关文章

暂无评论

none
暂无评论...