1.别名,内部命令,哈希表,外部命令,运行命令时的优先级别,以pwd为例

1**.首先比较别名和内部命令的优先级**

  • 运行alias enable='pwd',enable是一个内部命令,现在我们把pwd的别名命名为enable,如果出现内部命令列表,那么说明内部命令的优先级是高于别名,如果显示的是当前路径,说明别名的优先级高于别名。

2.然后比较内部命令和外部命令,哈希表的优先级

  • 首先运行命令pwd,然后通过type命令查看命令类型,如果出现的是一个哈希索引,那说明哈希表的优先级高,如果显示pwd是一条内部命令,那么说明内部命令优先级最高,如果出现时一条绝对路径,说明外部命令的优先级最高。

通过这样我们能够看到内部命令的优先级别是高于外部命令和哈希表的。


3.现在我们来比较哈希表和外部命令的优先级

  • 通过echo $PATH查看环境变量。

  • 运行enable -n pwd禁用内部命令pwd,运行type pwd查看命令类型,显示的是一条路径,/usr/bin/pwd

  • 运行pwd 命令,然后运行type pwd 可以看到显示的是命令在哈希表中,并指向命令的绝对路径。

  • 这样似乎能证明哈希表的优先级是高于外部命令的,但是这样并不能一定确定。我们先取消pwd的enable别名,然后把内部命令pwd 通过enable -n pwd 禁用掉行hash -r 清空哈希表,再执行pwd,会发生什么呢?

  • 我们发现此时通过type命令得到的仍然是一条路径,那么我们需要别的方法测试。

  • 因为tty是一条外部命令,我们可以用tty进行测试,运行type tty得到tty的类型,同样是一条路径 /usr/bin/tty。

  • 先执行一遍pwd,我们希望这条命令能够将pwd加载到哈希表。

  • 我们可以复制tty命令到/usr/local/bin下,并命名为pwd,命令是sudo cp /usr/bin/tty /usr/local/bin/pwd。

  • 执行pwd命令,因为之前将tty复制到/usr/local/bin下,并命名为pwd,因此在绝对路径上tty是高于pwd的,如果哈希表的优先级高于外部命令,那么执行的结果就应该是pwd执行的结果,如果外部命令的优先级高于哈希表,那么执行结果就应该是tty的执行结果。

  • 这样我们可以看到执行结果是pwd的执行结果而不是tty的执行结果,这样说明哈希表的优先级是高于外部命令的。这时我们需要把禁用的pwd命令通过 enable pwd 命令恢复过来,然后通过rm -f /usr/local/bin/pwd删除刚刚复制过去的tty命令。


  • 我们通过hash -r 清空一下哈希表,再运行pwd,看看会发生什么呢?

4.通过上面的实验,我们可以得到别名,内部命令,外部命令,哈希表的优先级顺序由高到低依次是别名,内部命令,哈希表,外部命令,前提是哈希表中装有外部命令的哈希索引


2.安装一些以后可能需要的软件包

1.安装man的中文包

  • 1.采用网路安装的方法* 首先要在网络上下载man中文压缩包,命令如下: weget http://manpages-zh.googlecode.com/files/manpages-zh-1.5.1.tar.gz 然后解压,命令如下: tar zxvf manpages-zh-1.5.1.tar.gz 然后用cd命令打开: cd manpages-zh-1.5.1.tar.gz 然后运行make命令安装: make install 如果没有安装gcc编译器,需要先安装gcc,我们采用本地yum源的方法,命令如下: sudo yum install gcc 然后再运行make install 即可完成安装。但这时运行man,发现没有中文包,因为,我们没有添加中文包的路径到man命令。这时需要修改配置文件: vim /usr/bin/zhman 然后追加下面的代码 ``` #!/bin/bash #name=zhman export LANG=zh_CN man -M /usr/local/zhman/share/man/zh_CN $1
			 如果希望所有用户都能执行man命令,就需要修改权限为,所有人可执行如下
			 `chmod 777 /usr/bin/zhman`
* 2.采用本地光盘安装
       光盘安装需要一张下载有man软件包的光盘,并把它挂载,命令如下:
			`mount /dev/cdrom media`
			然后安装软件包命令如下:
			`rpm -ivh /media/man-pages-zh-CN-1.5.2-4.el7.noarch.rpm`
			然后和上面一样,添加中文包路径,修改权限即可。

			
			
			
* 3采用yum源安装,命令如下:
      `yum install manpages-zh`
			如果找不到中文包,可以用下面的命令搜索一下:
			`yum list |grep man.*zh`
			如果还没有,可以用下面的命令更新本地yum源:
			`yum -y update`
			然后执行下面的安装命令
			`sudo yum install 加中文包名`。
			
**2.安装tree**
* 1.采用yum安装
      `sudo yum -y install tree`
	2.通过网络安装方法和安装man一样。
	
# 3.一些基本命令的操作
*  显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
	  ` ls -d /etc/[a-Z][a-Z]*`
* 显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录                        
      ` ls -d /etc/rc[0-6]*`
*  显示/etc目录下,所有以.d结尾的文件或目录
      ` ls -d /etc/*.d`
* 显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
     ` ls -d /etc/[m,n,r,p]*.conf`
* 只显示/root下的隐藏文件和目录
    `  ls -d .* /root`
* 只显示/etc下的非隐藏目录
  `    ls -d /etc/*/`
* 显示/etc目录下所有以k开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
  `    ls -d /etc/k*[0-9]*[[:lower:]]`
* 显示/proc目录下名字由任意三位数字组成的文件或目录
  `    ls -d /proc/*[0-9]*[0-9]*[0-9]*`
* 显示/var/log目录下文件名包含符号及数字的文件或目录
 `     ls -d /var/log/*[[:punct]]*[0-9]*`
* 显示/usr/share/man目录下所有以m开头,以一个数字和x结尾的文件或目录
  `    ls -d /usr/share/man/m*[0-9]*`
* 显示/etc目录下,所有以一个大写字母开头,以两个数字结尾的文件或目录
  `    ls -d /etc/[[:upper:]]*[0-9][0-9]`
* 显示/etc目录下,文件名至少包含一个小写字母和一个数字并以.conf结尾的文件或目录
  `    ls -d /etc/*[[:lower:]]*[0-9].conf`
* 只显示用户家目录下的非隐藏目录
  `    ls -d ~/*/`
*  定义别名命令baketc,将/etc/目录下所有文件,备份到/testdir独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见
  `     alias baketc='mkdir -p /testdir/backup$(date +%F);cp -av /etc/*/testdir/backup$(date +%F)'`
* 创建/testdir/rootdir目录,并复制/root下所有文件到该目录内,要求保留原有权限
   `   alias opp='mkdir -p /testdir/rootdir;cp -ar /root/* /testdir/rootdir'`
*  如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5, /testdir/dir5/dir6, /testdir/dir5/dir7
    `   mkdir -p /test/{3,4} 5/{6,7}`
* 使用一条命令创建/testdir/dir8/x, /testdir/dir8/y, /testdir/dir8/x/a, /testdir/dir8/x/b,               /testdir/dir8/x/c, /testdir/dir8/y/a, /testdir/dir8/y/b
  `    mkdir -p /testdir/dir8/{x/{a,b,c},y/{a,b}}`
*  使用一条命令创建 /testdir/dir9/x, /testdir/dir10/y, /testdir/dir9/x/a, /testdir/dir10/y/b
`       mkdir -p /testdir/dir{11,12,13}`
* 使用一条命令创建/testdir/dir11, /testdir/dir12, /testdir/dir13, /testdir/dir12/dir14, /testdir/dir13/dir15
      `mkdir -p /testdir/{11,12/14,13/15}`