11.3 系统环境变量与个人环境变量的配置文件
上面讲了很多系统变量,那么在Linux系统中,这些变量存在哪里呢?为什么用户一登录shell就自动有了这些变量呢?我们先来看看下面几个文件。
/etc/profile:这个文件预设了几个重要的变量,例如PATH、USER、LOGNAME、MAIL、INPUTRC、HOSTNAME、HISTSIZE、umask等。
/etc/bashrc:这个文件主要预设umask以及PS1。这个PS1就是我们在输入命令时前面的那串字符。例如,阿铭的Linux系统的PS1就是[root@localhost~]#,我们不妨看一下PS1的值,如下所示:
# echo $PS1 [u@h W]$
其中,u指用户,h指主机名,W指当前目录,$指字符#(如果是普通用户,则显示为$)。
除了以上两个系统级别的配置文件外,每个用户的主目录下还有以下几个隐藏文件。
bash_profile:该文件定义了用户的个人化路径与环境变量的文件名称。每个用户都可使用该文件输入专属于自己的shell信息,当用户登录时,该文件仅仅执行一次。
bashrc:该文件包含专属于自己的shell的bash信息,当登录或每次打开新的shell时,该文件会被读取。例如,你可以将用户自定义的别名或者自定义变量写到这个文件中。
bash_history:该文件用于记录命令历史。
bash_logout:当退出shell时,会执行该文件。你可以将一些清理的工作放到这个文件中。
11.4 Linux shell中的特殊符号
在学习Linux的过程中,也许你已经接触过某个特殊符号,例如*,它是一个通配符,代表零个或多个字符或数字。下面阿铭就介绍一下常用的特殊字符。
11.4.1 *代表零个或多个任意字符
这个字符前面已经介绍过,这里再次提到,它的用法如下:
# ls /tmp/4_6/test* /tmp/4_6/test1 /tmp/4_6/test111 /tmp/4_6/test4 /tmp/4_6/test5
11.4.2 ?只代表一个任意的字符
这个字符的用法如下:
# touch /tmp/4_6/testa # ls -d /tmp/4_6/test? /tmp/4_6/test1 /tmp/4_6/test4 /tmp/4_6/test5 /tmp/4_6/testa
不管是数字还是字母,只要是一个字符,都能匹配出来。
11.4.3 注释符号#
这个符号在Linux中表示注释说明,即#后面的内容都会被忽略。用法如下:
# abc=123 #aaaaa # echo $abc 123
11.4.4 脱义字符
这个字符会将后面的特殊符号(如*)还原为普通字符。用法如下:
# ls -d test* ls: cannot access 'test*': No such file or directory
11.4.5 再说管道符|
这个字符前面曾多次出现过,它的作用是将前面命令的输出作为后面命令的输入。这里提到的后面的命令,并不是所有的命令都可以的,一般针对文档操作的命令比较常用。
例如cat、less、head、tail、grep、cut、sort、wc、uniq、tee、tr、split、sed、awk等,其中grep、sed和awk是正则表达式必须掌握的工具,在后面会详细介绍。管道符的用法如下:
# cat testb.txt |wc -l 0
在上例中,wc -l用来计算一个文档有多少行。管道的作用在于将左边命令的输出内容作为右边命令的输入。
11.4.6 特殊符号$
符号$可以用作变量前面的标识符,还可以和!结合起来使用。示例命令如下:
# cd .. # ls testb.txt testb.txt # ls !$ ls testb.txt testb.txt
!$表示上条命令中的最后一个变量,本例中上条命令最后是testb.txt,那么在当前命令下输入!$则代表testb.txt。
11.4.7 特殊符号;
通常,我们都是在一行中输入一个命令,然后回车就运行了。如果想在一行中运行两个或两个以上的命令,需要在命令之间加符号;。示例命令如下:
# mkdir testdir ; touch test1.txt ; touch test2.txt; ls -d test* test1.txt test2.txt testb.txt testdir
11.4.8 特殊符号~
符号~表示用户的家目录,root用户的家目录是/root ,普通用户则是/home/username。示例命令如下:
# cd ~ # pwd /root # su aming $ cd ~ $ pwd /home/aming
11.4.9 特殊符号&
如果想把一条命令放到后台执行,则需要加上符号&,它通常用于命令运行时间较长的情况。比如,可以用在sleep后,如下所示:
# sleep 30 & [1] 3808 # jobs [1]+ 运行中 sleep 30 &
11.4.10 重定向符号>、>>、2>和2>>
前面讲过重定向符号>和>>,它们分别表示取代和追加的意思。当我们运行一个命令报错时,报错信息会输出到当前屏幕。
如果想重定向到一个文本,则要用重定向符号2>或者2>>,它们分别表示错误重定向和错误追加重定向。示例命令如下:
# ls aaaa ls: cannot access 'aaaa': No such file or directory # ls aaaa 2> /tmp/error # cat /tmp/error ls: cannot access 'aaaa': No such file or directory # ls aaaa 2>> /tmp/error # cat /tmp/error ls: cannot access 'aaaa': No such file or directory ls: cannot access 'aaaa': No such file or directory
11.4.11 中括号[]
中括号内为字符组合,代表字符组合中的任意一个,可以是一个范围(1-3,a-z),用法如下:
# cd /tmp/10 # ls -d test* test1.txt test2.txt testb.txt testdir # ls -d test[1-3].txt test1.txt test2.txt # ls -d test[12b].txt test1.txt test2.txt testb.txt # ls -d test[1-9].txt test1.txt test2.txt # ls -d test[1-9a-z].txt test1.txt test2.txt testb.txt
11.4.12 特殊符号&&和||
前面提到了分号可作为多条命令间的分隔符,其实还有两个可以用于多条命令中间的特殊符号,那就是&&和||。下面阿铭列出以下几种情况:
command1 ; command2
command1 && command2
command1 || command2
使用;时,不管command1是否执行成功,都会执行command2。
使用&&时,只有command1执行成功后,command2才会执行,否则command2不执行。
使用||时,command1执行成功后则command2不执行,否则执行command2,即command1和command2中总有一条命令会执行。接下来,阿铭要通过做试验来说明&&与||这两个特殊符号的作用:
# rm -rf test* # touch test1 test3 # ls test2 && touch test2 ls: cannot access 'test2': No such file or directory # ls test2 ls: cannot access 'test2': No such file or directory
本例中,只有当ls test2成功执行后,才会执行touch test2。因为test2不存在, ls test2没有执行成功,所以&&后面的touch test2并没有执行。
# ls test2 || touch test2 ls: cannot access 'test2': No such file or directory # ls test* test1 test2 test3
本例中,若ls test2执行不成功,则会执行touch test2。因为test2不存在,所以ls test2没有执行成功,转而执行||后面的touch test2,所以增加了test2这个文件。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !