shell基础
1. 设置环境变量 HISTSIZE , 使其能够保存10000条命令历史。
vim /etc/profile
把 HISTSIZE=1000 改为 HISTSIZE=10000
2. 为什么如果这样设置PS1 (PS1="[\u@\h \W]$ ") 显示的结果和我们预想的不一样,那要如何设置才能恢复原来默认的?
应该是 PS1='[\u@\h \W]$ '
3. 想办法把当前目录下的文件的文件名中的小写字母全部替换为大写字母。
for f in `ls`; do if echo $f |grep -q '[a-z]'; then mv $f `echo $f|tr '[a-z]' '[A-Z]'`;fi; done
4. 使用sort以":"为分隔符,对/etc/passwd文件的第5段排序。
sort -t: -k5 /etc/passwd
5. 使用cut以":"为分隔符,截出/etc/passwd的第三段字符。
cut -d: -f3 /etc/passwd
6. 简述这几个文件的作用: /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和变量写到这个文件中。
7. export 的作用是什么?
export 用来声明变量,可以使声明的变量在子shell中生效
8. linux下自定义变量要符合什么样的规则呢?
(1) 设定变量的格式为“a=b”, 其中a为变量名,b为变量的内容,等号两边不能有空格;
(2)变量名只能由英、数字以及下划线组成,而且不能以数字开头;
(3)当变量内容带有特殊字符(如空格)时,需要加上单引号,变量内容中本身带有单引号的情况则使用双引号;
(4)如果变量内容中需要用到其他命令运行结果则可以使用反引号;
(5)变量内容可以累加其他变量的内容,需要加双引号。
9. 如何把要运行的命令丢到后台跑?又如何把后台跑的进程给调到前台?
要将运行的命令丢到后台,可以先按CTRL+Z让其暂停,然后使用bg命令将其丢到后台运行;或者执行命令时添加&后台标识,格式为“命令+空格+&”。
将后台运行的进程调到前台,可以输入fg快捷键。
10. 列出当前目录下以"test"开头的文件和目录。
ls -d test*
11. 如何把一个命令的输出内容不仅打印到屏幕上而且还可以重定向到一个文件内?
使用tee命令,如 cat /etc/passwd |tee 2.txt
12. 假如有个命令很长,我们如何使用一个简单的字符串代替这个复杂的命令呢?请举例说明。
使用alias 如 alias abc="/usr/local/apache/bin/apachectl -t"
13. 我如何实现这样的功能,把一条命令丢到后台运行,而且把其正确输出和错误输出同时重定向到一个文件内?
vmstat 1 > /tmp/1.log 2>&1 &
14. 如何按照大小(假如按照10M)分隔一个大文件,又如何按照行数(假如10000行)分隔?
split -b 10M bigfile
split -l 10000 bigfile
15. 做实验,搞明白 ; && || 这三个符号的含义。
; 只是用来分割多个命令,各条命令相互独立运行,没有任何关联性。
&& 只有前面的命令成功执行后,后面的命令才会执行。如果前面的命令执行失败,则忽略后面的命令。
|| 多条命令中只要一条命令执行成功,则忽略后面的命令,否则运行后面的命令。
16. 如果只想让某个用户使用某个变量如何做?
vim /home/username/.bashrc 增加一行 export abc=123
然后再 source /home/username/.bashrc
17. 使用哪个命令会把系统当中所有的变量以及当前用户定义的自定义变量列出来?
set