2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
bash的基础特性:命令的执行状态结果
bash通过状态返回值来输出此结果:
成功:0
失败:1~255
命令执行完成之后,其状态返回值保存于bash的特殊变量$?中:
~]# echo $?
示例:
[root@cuikedong /]# ls /
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
[root@cuikedong /]# echo $?
0
注:显示值为“0”命令执行成功
[root@cuikedong /]# lss /
-bash: lss: 未找到命令
[root@cuikedong /]# echo $?
127
注:显示值为“127”命令执行失败
命令正常执行时,有的还会有命令返回值:
根据命令其功能不同,结果各不相同:
bash的基础特性之:命令行展开
~:自动展开为用户的家目录,或指定的用户的家目录:
{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径:
例如:/tmp/{a,b}相当于/tmp/a /tmp/b
示例:
创建/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a,/tmp/x/y1/b?
解答:
[root@cuikedong /]# mkdir -pv /tmp/x/{y1/{a,b},y2}
mkdir: 已创建目录 “/tmp/x”
mkdir: 已创建目录 “/tmp/x/y1”
mkdir: 已创建目录 “/tmp/x/y1/a”
mkdir: 已创建目录 “/tmp/x/y1/b”
mkdir: 已创建目录 “/tmp/x/y2”
[root@cuikedong /]# tree /tmp
/tmp
└── x
├── y1
│ ├── a
│ └── b
└── y2
[root@cuikedong /]#
创建a_c,a_d,b_c,b_d:
解答:
[root@cuikedong /]# mkdir -v /tmp/{a,b}_{c,d}
mkdir: 已创建目录 “/tmp/a_c”
mkdir: 已创建目录 “/tmp/a_d”
mkdir: 已创建目录 “/tmp/b_c”
mkdir: 已创建目录 “/tmp/b_d”
[root@cuikedong /]# ls -l /tmp
总用量 0
drwxr-xr-x. 2 root root 6 12月 10 15:06 a_c
drwxr-xr-x. 2 root root 6 12月 10 15:06 a_d
drwxr-xr-x. 2 root root 6 12月 10 15:06 b_c
drwxr-xr-x. 2 root root 6 12月 10 15:06 b_d
3、请使用命令行展开功能来完成以下练习:
(1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
解答:
[root@cuikedong /]# mkdir -v /tmp/{a,b}_{c,d}
mkdir: 已创建目录 “/tmp/a_c”
mkdir: 已创建目录 “/tmp/a_d”
mkdir: 已创建目录 “/tmp/b_c”
mkdir: 已创建目录 “/tmp/b_d”
[root@cuikedong /]# ls -l /tmp
总用量 0
drwxr-xr-x. 2 root root 6 12月 10 15:06 a_c
drwxr-xr-x. 2 root root 6 12月 10 15:06 a_d
drwxr-xr-x. 2 root root 6 12月 10 15:06 b_c
drwxr-xr-x. 2 root root 6 12月 10 15:06 b_d
(2)、创建/tmp/mylinux目录下的:
mylinux/
├── bin
├── boot
│ └── grub
├── dev
├── etc
│ ├── rc.d
│ │ └── init.d
│ └── sysconfig
│ └── network-scripts
├── lib
│ └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
│ └── local
│ ├── bin
│ └── sbin
└── var
├── lock
├── log
└── run
解答:
[root@cuikedong /]# mkdir -pv
/tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,sysconfig/network-scripts},lib/modules,lib64,proc,sbin,sys,tmp,usr/local/{bin,sbin},var/{lock,log,run}}
mkdir: 已创建目录 “/tmp/mylinux”
mkdir: 已创建目录 “/tmp/mylinux/bin”
mkdir: 已创建目录 “/tmp/mylinux/boot”
mkdir: 已创建目录 “/tmp/mylinux/boot/grub”
mkdir: 已创建目录 “/tmp/mylinux/dev”
mkdir: 已创建目录 “/tmp/mylinux/etc”
mkdir: 已创建目录 “/tmp/mylinux/etc/rc.d”
mkdir: 已创建目录 “/tmp/mylinux/etc/rc.d/init.d”
mkdir: 已创建目录 “/tmp/mylinux/etc/sysconfig”
mkdir: 已创建目录 “/tmp/mylinux/etc/sysconfig/network-scripts”
mkdir: 已创建目录 “/tmp/mylinux/lib”
mkdir: 已创建目录 “/tmp/mylinux/lib/modules”
mkdir: 已创建目录 “/tmp/mylinux/lib64”
mkdir: 已创建目录 “/tmp/mylinux/proc”
mkdir: 已创建目录 “/tmp/mylinux/sbin”
mkdir: 已创建目录 “/tmp/mylinux/sys”
mkdir: 已创建目录 “/tmp/mylinux/tmp”
mkdir: 已创建目录 “/tmp/mylinux/usr”
mkdir: 已创建目录 “/tmp/mylinux/usr/local”
mkdir: 已创建目录 “/tmp/mylinux/usr/local/bin”
mkdir: 已创建目录 “/tmp/mylinux/usr/local/sbin”
mkdir: 已创建目录 “/tmp/mylinux/var”
mkdir: 已创建目录 “/tmp/mylinux/var/lock”
mkdir: 已创建目录 “/tmp/mylinux/var/log”
mkdir: 已创建目录 “/tmp/mylinux/var/run”
[root@cuikedong /]# tree /tmp/mylinux
/tmp/mylinux
├── bin
├── boot
│ └── grub
├── dev
├── etc
│ ├── rc.d
│ │ └── init.d
│ └── sysconfig
│ └── network-scripts
├── lib
│ └── modules
├── lib64
├── proc
├── sbin
├── sys
├── tmp
├── usr
│ └── local
│ ├── bin
│ └── sbin
└── var
├── lock
├── log
└── run
24 directories, 0 files
[root@cuikedong /]#
4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
解答:
stat命令:状态(查看文件的元数据)
用法:
stat FILE,,,,,,
示例:
[root@cuikedong ~]# stat /tmp/cui
文件:”/tmp/cui”
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:67358650 硬链接:1
权限:(0644/-rw-r–r–) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2017-12-10 18:45:55.186935129 +0800
最近更改:2017-12-10 18:45:55.186935129 +0800
最近改动:2017-12-10 18:45:55.186935129 +0800
创建时间:-
修改时间戳
touch命令:手动更改时间戳
touch – change file timestamps
touch [OPTION]… FILE…
-c:指定的文件路径不存在时不予创建:
-a:仅修改access time
-m:仅修改modify time
-t STAMP
[[CC]YY]MMDDhhmm[.ss]
示例:
[root@cuikedong ~]# stat /tmp/cui
文件:”/tmp/cui”
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:67358650 硬链接:1
权限:(0644/-rw-r–r–) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2017-12-10 18:45:55.186935129 +0800
最近更改:2017-12-10 18:45:55.186935129 +0800(跟改前)
最近改动:2017-12-10 18:45:55.186935129 +0800
创建时间:-
[root@cuikedong ~]# touch -m -t 201808080808.08 /tmp/cui
[root@cuikedong ~]# stat /tmp/cui
文件:”/tmp/cui”
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:67358650 硬链接:1
权限:(0644/-rw-r–r–) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:user_tmp_t:s0
最近访问:2017-12-10 18:45:55.186935129 +0800
最近更改:2018-08-08 08:08:08.000000000 +0800(更改后)
最近改动:2017-12-10 18:58:07.301294741 +0800
创建时间:-
5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
解答:
定义别名:
~]# alias NAME=‘COMMAD’
注意:仅对当前shell进程有效
示例:
[root@cuikedong ~]# alias p=’pwd’
[root@cuikedong ~]# alias
alias p=’pwd’
[root@cuikedong ~]# p
/root
引用命令的执行结果:
$(COMMAND)
或‘COMMAND’
bash的基础特性:引用
强引用:”
弱引用:“”
命令引用:“(反引号)
示例:
[root@cuikedong ~]# touch /tmp/cui-`date +%Y-%m-%d-%H-%M-%S` (命令引用)
[root@cuikedong ~]# ls /tmp
cui
cui-2017-12-10-19-21-41
[root@cuikedong ~]#