shell 基础知识习题及扩展阅读

发布于 2018-01-30  351 次阅读


shell 基础知识习题

设置环境变量 HISTSIZE , 使其能够保存 10000 条命令历史。

[root@am-01:~#] vim /etc/profile+

HISTSIZE=10000

为什么如果这样设置 PS1 (PS1="[\u@\h \W]\$ ")  显示的结果和我们预想的不一样,那要如何设置才能恢复原来默认的?

双引号需要转义,可改为单引号

[root@am-01:~#] vim /etc/profile

PS1='[\u@\h \W]$ '

想办法把当前目录下的文件的文件名中的小写字母全部替换为大写字母。

for f in `ls`; do if echo $f |grep -q '[a-z]'; then mv $f `echo $f|tr '[a-z]' '[A-Z]'`;fi; done

使用 sort 以":"为分隔符,对/etc/passwd 文件的第 5 段排序。

[root@am-01:~/test#] sort -t ":" -k5 /etc/passwd | head

tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

halt:x:7:0:halt:/sbin:/sbin/halt

user4:x:1004:1005::/home/aming111:/sbin/nologin

使用 cut 以":"为分隔符,截出/etc/passwd 的第三段字符。

[root@am-01:~/test#] cat /etc/passwd |head

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

[root@am-01:~/test#] cut -d ":" -f 3 /etc/passwd | head

0

1

2

3

4

5

6

7

8

11

简述这几个文件的作用: /etc/profile, /etc/bashrc, .bashrc, .bash_profile.

/etc/profile :  设置系统全局环境变量和启动程序,当用户登录 Linux 时,该文件被执行,并从/etc/profile.d 目录的配置文件中搜集 shell 的设置。预设的系统全局变量包括 PATH、USER、LOGNAME、MAIL、INPUTRC、HOSTNAME、HISTSIZE、umask 等。

/etc/bashrc : 为每一个运行 bash shell 的用户执行此文件。当 bash shell 被打开时,该文件被读取。默认情况下,这个文件主要预设 umask 以及 PS1 等。

.bash_profile : 定义用户专有的环境变量和启动程序。当用户登录时,该文件仅仅执行一次。 默认情况下,它设置了一些环境变量,执行用户的.bashrc 文件。

.bashrc :该文件包含专用于用户的 shell 的 bash 信息,当用户登录时以及每次打开新的 shell 时,该该文件被读取。可以将用户自定义的 alias 和变量写到这个文件中。

export 的作用是什么?

export 用来声明变量,可以使声明的变量在子 shell 中生效

linux 下自定义变量要符合什么样的规则呢?

(1) 设定变量的格式为“a=b”, 其中 a 为变量名,b 为变量的内容,等号两边不能有空格;

(2)变量名只能由英、数字以及下划线组成,而且不能以数字开头;

(3)当变量内容带有特殊字符(如空格)时,需要加上单引号,变量内容中本身带有单引号的情况则使用双引号;

(4)如果变量内容中需要用到其他命令运行结果则可以使用反引号;

(5)变量内容可以累加其他变量的内容,需要加双引号。

如何把要运行的命令丢到后台跑?又如何把后台跑的进程给调到前台?

要将运行的命令丢到后台,可以先按 CTRL+Z 让其暂停,然后使用 bg 命令将其丢到后台运行;或者执行命令时添加&后台标识,格式为“命令+空格+&”。

将后台运行的进程调到前台,可以输入 fg 快捷键。

列出当前目录下以"test"开头的文件和目录。

ls -d test*

如何把一个命令的输出内容不仅打印到屏幕上而且还可以重定向到一个文件内?

使用 tee 命令,如 cat /etc/passwd |tee 2.txt

假如有个命令很长,我们如何使用一个简单的字符串代替这个复杂的命令呢?请举例说明。

使用 alias  如 alias nginxt="/usr/local/nginx/sbin/nginx -t"

我如何实现这样的功能,把一条命令丢到后台运行,而且把其正确输出和错误输出同时重定向到一个文件内?

vmstat 1  > /tmp/1.log 2>&1 &

如何按照大小(假如按照 10M)分隔一个大文件,又如何按照行数(假如 10000 行)分隔?

split -b 10M bigfile

split -l 10000 bigfile

做实验,搞明白 ; && || 这三个符号的含义。

;只是用来分割多个命令,各条命令相互独立运行,没有任何关联性。

&&   只有前面的命令成功执行后,后面的命令才会执行。如果前面的命令执行失败,则忽略后面的命令。

||   多条命令中只要一条命令执行成功,则忽略后面的命令,否则运行后面的命令。

如果只想让某个用户使用某个变量如何做?

vim  /home/username/.bashrc  增加一行  export  abc=123

然后再 source  /home/username/.bashrc

使用哪个命令会把系统当中所有的变量以及当前用户定义的自定义变量列出来?

set

扩展阅读

Linux 环境变量之“PS1"

http://www.lishiming.net/thread-5364-1-1.html

Linux 支持中文

http://www.lishiming.net/thread-5360-1-1.html

让命令历史永久保存并加时间戳

http://www.lishiming.net/thread-283-1-1.html

linux 下/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc 干啥的

http://www.lishiming.net/thread-909-1-1.html