48、给出一个命令,将sort命令的标准输出重定向到名为phone_list的文件中。假设输入文件名为numbers。
sort numbers > phone_list
49、给出一个命令,将文件 permdemos.c 中所有的 [ 和 { 字符转换为 (,所有的 ] 和 } 字符转换为 )。(提示:参考 tr 手册页)
tr ‘[{] }’ ‘(())’ < permdemos.c
50、给出一个命令,创建一个名为book的文件,该文件包含另外两个文件part1和part2的内容。
cat part1 part2 > book
51、lpr和sort实用程序可以从命令行指定的文件或标准输入接收输入。请说出另外两个以类似方式工作的实用程序。
以下是调整为 Markdown 格式的文本内容:
和
tr
。
grep
可从标准输入接收内容进行字符映射;
tr
可通过管道从标准输入接收数据进行字符串匹配。
grep
52、给出一个在管道中使用grep的命令示例,并说明在该示例中grep是如何作为过滤器工作的。
命令示例:
。在该例中,
$ who | tee who.out | grep root
被用作过滤器,
grep
的标准输出通过管道连接到
tee
的标准输入,
grep
处理输入流数据并产生输出流数据。
grep
53、解释以下错误信息。后续执行ls命令会显示哪些文件名?$ ls abc abd abe abf abg abh $ rm abc ab* rm: cannot remove ‘abc’: No such file or directory
错误信息表明,在执行
命令时,系统尝试删除文件
rm
,但找不到该文件。后续执行
abc
命令会显示
ls
、
abd
、
abe
、
abf
、
abg
,因为
abh
在删除时未找到,而
abc
会删除所有以
rm ab*
开头的文件,除了已提示不存在的
ab
。
abc
54、在对 shell 变量进行实验时,亚历克斯不小心删除了他的 PATH 变量。他认为自己不需要 PATH 变量了。讨论他可能很快会遇到的一些问题,并解释这些问题产生的原因。他怎样才能轻松地将 PATH 变量恢复到原来的值呢?
问题:无法直接使用命令。
原因:
变量存储了命令搜索路径,删除后系统找不到命令所在位置。
PATH
恢复方法:可从登录脚本(如
、
.bashrc
)中重新读取,或重新设置系统默认配置。
.bash_profile
55、假设你的权限允许你写入一个文件,但不允许删除它。给出一个不调用编辑器来清空文件的命令。
可以使用重定向符号 > 来清空文件,命令示例:> 文件名,此操作会将文件内容清空。
56、假设你的权限允许你写入文件,但不允许你删除它。解释一下你如何能够拥有修改一个你无法删除的文件的权限。
在Linux文件权限体系中,文件的 读写 和 删除权限 是分开设置的。
写入权限 :允许用户修改文件内容。 删除文件 :通常需要满足以下条件: 对文件所在目录有 写权限 对文件本身有相应的权限组合
因此,可能出现以下情况:
用户拥有文件的写入权限,但由于缺乏对文件所在目录的写权限或其他必要权限,而 无法删除文件 。
示例:
文件所有者可以通过
设置其他用户对文件的权限:
chmod
只给予 写入权限 不给予 删除相关权限
这样,其他用户 可以修改文件 ,但 不能删除它 。
57、为什么命令名和文件名通常不包含空格?如何创建包含空格的文件名?如何删除它?(这是一个思考练习,不建议实际操作。如果你想进行实验,请在一个只包含实验文件的目录中创建并操作。)
命令名和文件名通常不包含空格的原因
因为空格是特殊字符,在命令行中必须对其进行转义或引号处理,这对新手来说有难度,对有经验的用户也很麻烦。
创建包含空格的文件名
在创建文件时可以直接输入带空格的文件名,例如:
touch "my file"
删除包含空格的文件名
可以使用
命令并对空格进行转义或用引号括起文件名,例如:
rm
rm my file
或者
rm "my file"
58、创建一个名为 answer 的文件并执行命令:$ > answers.0102 < answer cat。解释该命令的作用和原因,并说明更传统的表达方式是什么。
该命令尝试将文件
的内容重定向到文件
answer
中,同时调用
answers.0102
命令,但命令格式有误。正确的重定向应该是:
cat
cat < answer > answers.0102
原命令中重定向顺序混乱,可能无法达到预期效果。更传统的表达方式是:
cat answer > answers.0102
此命令将
文件的内容复制到
answer
文件中。
answers.0102
59、a. 给出一个不调用编辑器清空文件的命令。b. 解释为什么你可能有修改文件的权限但没有删除文件的权限。
a. 可以使用命令
来清空文件。
> 文件名
b. 可能是文件系统或目录设置了特殊的权限规则,例如目录设置了 粘滞位 (sticky bit),在这种情况下,用户对文件有写权限可以修改文件内容,但没有删除文件的权限;或者文件系统的访问控制列表(ACL)进行了特殊配置,允许用户修改文件但禁止删除。
60、创建一个名为answer的文件,并执行命令 $ > answers.0102 < answer cat。解释该命令的作用和原因,以及更常规的表达方式是什么。
该命令尝试将名为
文件的内容重定向到名为
answer
文件中,并使用
answers.0102
命令处理。但命令格式有误,正确顺序应该是:
cat
cat < answer > answers.0102
更常规的表达方式是使用管道和重定向,即:
cat answer > answers.0102
此命令将
文件内容输出到
answer
文件。
answers.0102
61、列出你可以使用 Nautilus 做的四件事。
搜索文件;2. 打开文件;3. 连接到 FTP 服务器;4. 复制文件到桌面。
62、什么是终端模拟器?在图形用户界面(GUI)中,有了它可以做哪些没有它就做不了的事情?
终端模拟器是一个呈现命令行界面(CLI)的窗口,它作为基于文本(字符)的终端发挥作用,并显示在图形环境中。在GUI中,有了终端模拟器可以运行通常在终端或控制台运行的基于字符的程序,还能从该窗口启动图形程序,通过在屏幕上的shell提示符下输入命令,让shell解释命令并启动相应操作,如执行程序、调用编译器、Linux实用程序或其他标准程序等。
63、Nautilus的三个常见控制栏是什么?每个控制栏上有哪些工具?
控制栏说明
以下是三个常见的控制栏及其功能描述:
主工具栏
包含导航工具图标,例如:
后退 前进 向上 停止 重新加载 主页 计算机 搜索
位置栏
可显示视图窗格中目录的名称 支持图标和文本两种格式 包含放大选择器和视图下拉列表
状态栏
未选择项目时 :显示视图窗格中的项目数量和本地系统目录所在设备的可用空间 选择项目时 :显示所选项目的名称和大小
64、讨论在文本模式下使用鹦鹉螺文件浏览器的位置栏。
在文本模式下,文本框会显示所显示目录的绝对路径名。若要让鹦鹉螺显示另一个目录,可输入该目录的路径名并按回车键。
位置栏还包含放大选择器和视图下拉列表。
要更改视图窗格中显示内容的放大倍数,可点击放大镜图标两侧的加减号; 右键点击放大百分比可恢复默认放大倍数; 左键点击放大百分比可显示放大倍数的下拉列表; 点击右侧放大镜图标右侧的按钮,可选择以图标、列表或紧凑格式查看文件。
65、如何使用 Nautilus 连接到 mirrors.kernel.org/fedora 的 FTP 服务器?
在菜单栏选择“连接到服务器”(也可从主菜单“位置”进入),在“服务类型”下拉列表中选择
,在“服务器”文本框中输入
FTP
(不输入
mirrors.kernel.org/fedora
),填写可选信息后点击“连接”。若服务器需要认证,在 Nautilus 弹出的窗口中输入用户名和密码。
ftp://
66、在目录层级中找到一个小文件。你如何将这个文件复制到桌面?
首先,打开显示主文件夹的文件浏览器窗口。在窗口中找到该小文件并选中它,可以通过单击一次选中一个对象,若要选择多个对象,可按住
键同时单击每个对象;也可以通过高亮第一个对象,按住
CONTROL
键并单击最后一个对象来选择一组相邻对象,或者用鼠标指针拖动一个框框住一组对象。
SHIFT
选中文件后,右键单击并选择“复制”。然后,将鼠标指针移到桌面的空白处,右键单击并选择“粘贴”,这样就把选中的小文件从主文件夹复制到了桌面。
67、讨论X窗口系统设置的客户端/服务器环境。X服务器如何工作?列出三个X客户端。当你在本地系统登录时,客户端和服务器分别在哪里?这种设置有什么优势?
X窗口系统启动会话时会设置客户端/服务器环境。X服务器负责显示桌面和窗口,监控键盘和鼠标操作(事件),并将这些事件传递给相应的客户端。三个X客户端的例子包括 `xterm`、`Compiz` 和 `gnome-calculator`。
在本地系统登录时,客户端和服务器通常运行在同一台机器上。这种设置的优势在于将显示的物理控制(服务器)与需要访问显示的进程(客户端)分离,使得可以在一台计算机上运行服务器,在另一台计算机上运行客户端。例如,科学家可以在另一栋楼或另一个国家的超级计算机上运行和操作程序,并在个人工作站或笔记本电脑上查看结果。
68、解释以下意外结果:执行
whereis date
得到
date: /bin/date ...
,执行
echo $PATH
得到
.:/usr/local/bin:/usr/bin:/bin
,接着执行
cat > date
并输入
echo "This is my own version of date."
来创建一个自定义的
date
脚本,之后执行
date
却输出了
Sat May 24 11:45:49 PDT 2008
,而不是自定义脚本的内容。
whereis date
date: /bin/date ...
echo $PATH
.:/usr/local/bin:/usr/bin:/bin
cat > date
echo "This is my own version of date."
date
date
Sat May 24 11:45:49 PDT 2008
工具搜索标准目录,找到的
whereis
是系统自带的
/bin/date
命令。设置的
date
中当前目录
PATH
虽在最前,但执行
.
时运行的仍是系统自带的
date
,而非当前目录下新创建的自定义
/bin/date
脚本,可能是因为系统缓存或其他原因使系统未使用当前目录下的脚本。
date
69、PATH变量的用途是什么?a. 设置PATH变量,使shell按以下顺序搜索目录:• /usr/local/bin • /usr/bin • /bin • /usr/kerberos/bin • 主目录下的bin目录 • 工作目录 b. 如果/usr/bin中有一个名为doit的文件,主目录下的~/bin中也有一个同名文件,哪个文件会被执行?(假设你对两个文件都有执行权限。) c. 如果PATH变量未设置为搜索工作目录,如何执行位于该目录的程序? d. 可以使用哪个命令将目录/usr/games添加到PATH目录列表的末尾?
PATH变量用于控制shell搜索可执行程序的目录顺序。
a.
```bash
$ export PATH=/usr/local/bin:/usr/bin:/bin:/usr/kerberos/bin:~/bin:.
b.
中的
/usr/bin
文件会被执行,因为 shell 按
doit
中目录的顺序搜索,
PATH
排在
/usr/bin
前面。
~/bin
c. 在程序名前加上
,如
./
。
./program
d.
$ PATH=$PATH:/usr/games
70、假设你已经进行了如下赋值:$person=jenny,请给出以下每个命令的输出:a. echo $person b. echo ‘$person’ c. echo “$person”
a. jenny;b. $person;c. jenny
71、以下 shell 脚本会将条目添加到你主目录下名为 journal – file 的文件中。该脚本可帮助你记录电话交谈和会议情况。$ cat journal# journal: add journal entries to the file# $HOME/journal – filefile=$HOME/journal – filedate >> $fileecho -n “Enter name of person or group: “read nameecho “$name” >> $fileecho >> $filecat >> $fileecho “—————————————————-” >> $fileecho >> $filea. 要能够执行该脚本,你需要对其做什么?b. 为什么脚本第一次从终端接受输入时使用 read 内置命令,而第二次使用 cat 实用程序?
a. 要执行该脚本,需要给脚本添加可执行权限,使用命令
,然后可以使用
chmod +x journal
来执行。
./journal
b. 第一次使用
内置命令是为了读取用户输入的单一行信息(人名或组名)并存储到变量中;第二次使用
read
实用程序是为了让用户输入多行内容,直到用户手动结束输入(如按 Ctrl + D),并将这些多行内容追加到文件中。
cat
72、假设 /home/jenny/grants/biblios 和 /home/jenny/biblios 目录存在。给出珍妮执行每组命令后的工作目录,并解释每种情况下发生了什么。a. $ pwd /home/jenny/grants $ CDPATH=$(pwd) $ cd $ cd biblios b. $ pwd /home/jenny/grants $ CDPATH=$(pwd) $ cd $HOME/biblios
a. 首先,`$ pwd` 显示当前工作目录为 `/home/jenny/grants`。
`$ CDPATH=$(pwd)` 将 `CDPATH` 设置为当前工作目录 `/home/jenny/grants`。
`$ cd` 命令无参数,会将工作目录切换到用户主目录。
`$ cd biblios` 会先在当前目录找 `biblios` 目录,没找到就会依据 `CDPATH` 去 `/home/jenny/grants` 找,所以最终工作目录是 `/home/jenny/grants/biblios`。
b. 先显示当前工作目录为 `/home/jenny/grants`,接着设置 `CDPATH` 为 `/home/jenny/grants`,
`$ cd $HOME/biblios` 直接将工作目录切换到 `/home/jenny/biblios`。
73、说出两种识别登录 shell 的 PID 号的方法。
可以使用
命令直接显示当前 shell 的 PID 号; 也可以使用
echo $$
命令,从其输出中找到当前 shell 对应的 PID 号。
ps
74、给出以下命令:$ sleep 30 | cat /etc/passwd 。sleep 命令有输出吗?cat 命令的输入从哪里来?在 shell 显示下一个提示符之前必须发生什么?
`sleep` 命令没有输出;
`cat` 命令从文件 `/etc/passwd` 获取输入;
在 shell 显示另一个提示符之前,`sleep` 命令需等待 30 秒,且 `cat` 命令需完成对 `/etc/passwd` 文件的读取和输出操作。
75、编写一个 shell 脚本,输出正在执行它的 shell 的名称。
在 shell 脚本中,可以使用
来输出正在执行脚本的 shell 的名称。以下是一个简单示例脚本:
echo $SHELL
#!/bin/bash
# 输出正在执行脚本的 shell 名称
echo $SHELL
将上述内容保存为一个文件,例如
,然后给该文件添加执行权限:
check_shell.sh
chmod +x check_shell.sh
最后运行以下命令即可看到输出结果:
./check_shell.sh
76、解释以下shell脚本的行为:
cat quote_demo
twoliner="This is line 1.This is line 2."
echo "$twoliner"
echo $twoliner
a. 此脚本中每个echo命令分别接收多少个参数?请解释。
b. 重新定义IFS shell变量,使第二个echo的输出与第一个相同。
a. 第一个
命令看到1个参数。因为使用双引号引用变量
echo
,shell会将其视为一个整体输出,作为一个参数传递给
$twoliner
。第二个
echo
命令看到多个参数。由于未使用双引号,shell会根据IFS(内部字段分隔符)对变量值进行分词,这里默认的IFS包含空格、制表符和换行符,所以
echo
和
"This is line 1."
会被视为多个参数。
"This is line 2."
b. 可以将IFS设置为空,命令为:
IFS=''
这样第二个
的输出就会和第一个相同。
echo
77、将上一个命令的退出状态添加到你的命令提示符中,使其行为类似于以下示例:$ [0] ls xxx ls: xxx: 没有那个文件或目录 $ [1]
要实现将上一个命令的退出状态添加到命令提示符中,可以通过修改环境变量
来实现。在你的 shell 配置文件(如
PS1
或
~/.bashrc
)中添加以下内容:
~/.bash_profile
PS1='[$?] $ '
然后重新加载配置文件:
source ~/.bashrc
这样,每次命令执行后,命令提示符就会显示上一个命令的退出状态。
78、dirname实用工具将其参数视为路径名,并将路径前缀(即除最后一个组件之外的所有内容)写入标准输出,例如:$ dirname a/b/c/d 输出 a/b/c。请判断该描述是否正确。
该描述准确说明了
实用工具的功能,它会提取路径名中除最后一个部分外的前缀部分并输出到标准输出。
dirname
79、给出命令 $ sleep 30 | cat /etc/passwd。sleep 有输出吗?cat 从哪里获取输入?在 shell 显示另一个提示符之前必须发生什么?
没有输出;
sleep
从文件
cat
获取输入; 在 shell 显示另一个提示符之前:
/etc/passwd
命令需等待 30 秒结束;
sleep
命令完成对
cat
文件的读取和输出。
/etc/passwd
80、解释以下 shell 脚本的行为:
cat quote_demo; twoliner="This is line 1. This is line 2."; echo "$twoliner"; echo $twoliner
。此脚本中每个 echo 命令分别接收多少个参数?请解释。
cat quote_demo; twoliner="This is line 1. This is line 2."; echo "$twoliner"; echo $twoliner
第一个
命令看到 1 个参数,因为使用双引号引用变量,会将变量的内容作为一个整体传递给
echo
命令。
echo
第二个
命令看到 2 个参数,因为没有使用双引号引用变量,shell 会根据内部字段分隔符(IFS)对变量内容进行分词,这里空格会导致内容被分为两个参数。
echo
81、将
basename
实用工具实现为一个 bash 函数,该工具会将其路径名参数的最后一个组件写入标准输出。例如,给定路径名
a/b/c/d
,
basename
会将
d
写入标准输出。
basename
a/b/c/d
basename
d
以下是实现
功能的 bash 函数示例:
basename
basename() {
path=$1
echo "${path##*/}"
}
你可以在 bash 脚本中使用这个函数,例如:
#!/bin/bash
basename() {
path=$1
echo "${path##*/}"
}
result=$(basename "a/b/c/d")
echo $result
上述代码定义了一个名为
的函数,它接受一个路径名作为参数,并使用
basename
提取路径名的最后一个组件,最后将其输出。
${path##*/}
82、解释客户端/服务器模型,并给出Linux系统中利用该模型的三个服务示例。
在客户端/服务器模型中,客户端使用如 FTP 等协议请求服务,服务器提供客户端所请求的服务。与文件共享模型不同,客户端/服务器关系中的服务器是一个数据库,仅提供客户端需要或请求的信息片段。该模型主导了 UNIX 和 Linux 系统网络。
Linux 系统中利用该模型的三个服务示例为:
– FTP
– NFS
– DNS
83、GNU开发了一款免费的国际象棋软件。如何通过互联网找到并下载它的副本?
可以访问该软件的官网 www.gnu.org/software/chess/chess.html ,将其下载到工作目录。
84、单用户模式和多用户模式有何不同?
在单用户模式下,只有系统控制台可用,可在挂载文件系统前备份文件和使用
检查文件系统完整性;而多用户模式下,多个用户可同时登录系统,还能执行许多管理任务,如添加用户和打印机。
fsck
85、你会如何传达以下每条消息?a. 系统将于明天晚上6点进行定期维护而关机。b. 系统将在5分钟后关机。c. 珍妮的任务严重拖慢了系统速度,她应该推迟这些任务。d. 亚历克斯的妻子刚生了一个女婴。
a. 可以使用消息的一天(Message of the day)功能,编辑
文件,让用户每次登录时能看到该信息;也可以使用电子邮件(Email),将消息发送给用户。 b. 应该使用墙(wall)工具,立即向所有登录的用户传达该紧急消息。 c. 使用写(write)工具,直接与珍妮交流,让她停止或推迟正在运行的程序。 d. 可以使用电子邮件(Email),将这个不太紧急的信息传达给用户;也可以扮演类似本地小报纸的角色,让用户知晓该消息。
/etc/motd
86、如何在不向用户提供超级用户密码的情况下,允许该用户执行特权命令?
可以通过以下几种方式:
使用 sudo
sudo 可根据每个用户和每个命令,有选择地为用户提供有限时间的超级用户权限。
sudo 由
文件控制,该文件必须由 root 设置。
/etc/sudoers
创建 setuid 文件
普通用户执行由 root 拥有且具有 setuid 权限的文件时,程序将拥有完整的 root 权限。
程序运行结束后,用户权限恢复原状。
使用 consolehelper
若 PAM 设置为信任所有控制台用户或仅要求用户密码而非 root 密码,登录系统控制台但非以 root 身份登录的用户可运行通常只有 root 才能运行的系统程序。
87、假设你以超级用户身份工作。如何杀死进程1648?如何杀死所有运行kmail的进程?
要杀死进程1648,可使用
命令,先尝试发送终止信号,即执行:
kill
kill -TERM 1648
若该策略不起作用,再使用:
kill -KILL 1648
要杀死所有运行
的进程,先使用以下命令找出所有
kmail
进程的 PID:
kmail
ps -ef
然后针对每个 PID 使用上述
命令;也可以使用以下命令直接杀死所有名为
kill
的进程:
kmail
pkill kmail
同样先尝试:
pkill -TERM kmail
若无效则使用:
pkill -KILL kmail