shell 进程会记录用户提交执行过的命令
可以是用 history 查看:
- [root@localhost dev]# history
- 1ss -tnl
- 2 ifconfig
- 3 vi/etc/sysconfig/network-scripts/ifcfg-ens33
- 4 reboot
- 5 systemctl stop firewalld
- 6 systemctl disable firewalld
- 7 ifconfig
- 8 ifconfig
- 9 startx
- 10 ping 114.114.114.114
- 11 top
- ......
- 140 who-b
- 141 who-r
- 142 date
- 143 w
- 144history
定制 history 的功能
HISTSIZE:shell 进程可以保留的命令历史的条数
- [root@localhost dev]#echo $HISTSIZE
- 1000
HISTFILE:持久保存命令历史的文件,当退出登录的时候,此次的命令历史才会被写入到 HISTFILE 中
- [root@localhost dev]#echo $HISTFILE
- /root/.bash_history
- [root@localhost dev]#cat/root/.bash_history
- ss -tnl
- ifconfig
- vi/etc/sysconfig/network-scripts/ifcfg-ens33
- reboot
- systemctl stop firewalld
- systemctl disable firewalld
- ifconfig
- ifconfig
- startx
- ping 114.114.114.114
- top
- ifconfig
- ifconfig--help
- type ls
- type ifconfig
- ......
- bash
- export name
- echo $name
- bash
HISTFILESIZE:命令历史文件的大小
- [root@localhost dev]#echo $HISTFILESIZE
- 1000
history 常用命令用法
-c:清空命令历史
-d offset:删除指定命令历史,offset 为指定的行数
-r:从文件读取命令历史至历史列表中
-w:把历史列表中的命令追加至历史文件中
history #:显示最近的 #条命令
调用命令历史列表中的命令
!#:再次执行历史列表中第 #条命令
!!:再一次执行上一条命令
!STRING:再一次执行命令历史列表中最近一个以 STRING 开头的命令
调用上一条命令的最后一个参数
快捷键:按一下 ESC 再按点.
或者使用字符串:!$
控制命令的记录方式
- [root@localhost /]#echo $HISTCONTROL
- ignoredups
ignoredups:忽略重复的命令;
ignorespace:忽略以空白字符开头的命令;
ignoreboth:以上两者同时生效;
命令补全
shell 程序在接受到用户执行命令的请求时,最左侧的字符串会被当做命令
命令查找机制:首先查找内部命令,根据 PATH 环境变量中设定的目录,自左而右逐个搜索目录下的文件名
- [root@localhost /]#echo $PATH
- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
使用 Tab 键补全
路径补全
在给定的起始路径下,以对应路径下的打头字符串来逐一匹配起始路径下每个文件
mkdir
make directories 创建目录
mkdir [OPTION]... DIRECTORY...
常用选项:
-p:自动按需创建父目录
- [root@localhost tmp]#mkdir-p /tmp/x/y/z
- [root@localhost tmp]# cd /tmp/x/y/z/
- [root@localhost z]#
-v:显示详细过程,verbose
- [root@localhost z]#mkdir-pv /tmp/a/b/c
- mkdir: created directory '/tmp/a'
- mkdir: created directory '/tmp/a/b'
- mkdir: created directory '/tmp/a/b/c'
-m MODE:直接给定权限
注意:路径基名方为命令的作用对象,基名之前的路径必须得存在
rmdir
remove empty direcories
移除空目录
常用选项:
-p:删除某目录后,如果其父目录为空,则一并删除之
-v:显示过程
- [root@localhost b]#rmdir-pv /tmp/a/b/c/rmdir: removing directory, '/tmp/a/b/c/'
- rmdir: removing directory, '/tmp/a/b'
- rmdir: removing directory, '/tmp/a'
- rmdir: removing directory, '/tmp'
- rmdir: failed to remove directory '/tmp': Device or resource busy
{}:可承载一个以逗号分隔的路径,并能够将其展开为多个路径
例如:/tmp/{a,b} 相当于 /tmp/a /tmp/b
例子:
如何创建 / tmp/x/y1, /tmp/x/y2, /tmp/x/y1/a, /tmp/x/y1/b?
- [root@localhost tmp]#mkdir - p / tmp / x / {
- y1 / {
- a,
- b
- },
- y2
- }
如何创建 a_c, a_d, b_c, b_d?
- [root@localhost tmp]#mkdir - p / tmp / {
- a,
- b
- }
- _ {
- c,
- d
- }
如何创建如下目录结构:
- /tmp/mysysroot/
- |-- bin
- |-- etc
- | `-- sysconfig
- | `-- network-scripts
- |-- sbin
- |-- usr
- | |-- bin
- | |-- lib
- | |-- lib64
- | |-- local
- | | |-- bin
- | | |-- etc
- | | |-- lib
- | | `-- sbin
- | `-- sbin
- `-- var
- |-- cache
- |-- log
- `-- run
- mkdir - p / tmp / mysysroot / {
- bin,
- etc / sysconfig / networkscripts,
- sbin,
- usr / {
- bin,
- lib,
- lib64,
- local / {
- bin,
- etc,
- lib,
- sbin
- },
- sbin
- },
- var / {
- cache,
- log, run
- }
- }
tree
可使用 tree 来查看目录的层级结构
-L #,指定要显示的层级
bash 通过状态返回值来输出此结果:
成功:0
失败:1-255
命令执行完成之后,其状态返回值保存于 bash 的特殊变量 $? 中
- [root@localhost tmp]#ls/tmp/x/
- y1 y2
- [root@localhost tmp]# echo$0
- [root@localhost tmp]# ls/tmp/y
- ls: cannot access /tmp/y: No suchfile or directory
- [root@localhost tmp]# echo$2
引用命令的执行结果:
$(COMMAND) 或者 `COMMAND`
强引用,单引号:
- [root@localhost ~]#echo '$PATH'
- $PATH
弱引用,双引号:
- [root@localhost ~]#echo "$PATH"/usr/local/sbin:/usr/loca
ctrl+a:跳转至命令行行首
ctrl+e:跳转至命令行行尾
ctrl+u:删除行首至光标所在处之间的所有字符
ctrl+k:删除光标所在处至行尾的所有字符
ctrl+l:清屏,相当于 clear
cat
cat [OPTION]... [FILE]...
查看文件内容,直接显示到文件底部
常用选项:
-n:可以显示行数
- [root@localhost tmp]#cat/etc/passwd
- 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
- ......
- gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin
- avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
- tcpdump:x:72:72::/:/sbin/nologin
tac
tac [OPTION]... [FILE]...
反向查看文件内容
- [root@localhost tmp]#tac/etc/passwd
- tcpdump:x:72:72::/:/sbin/nologin
- avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
- gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin
- ......
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- bin:x:1:1:bin:/bin:/sbin/nologin
- root:x:0:0:root:/root:/bin/bash
more
分屏查看文件内容
head
head [OPTION]... [FILE]...
查看文件的前 n 行,默认为前 10 行
- [root@localhost tmp]#head/etc/passwd
- 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
tail
查看文件的后 n 行
tail [OPTION]... [FILE]...
- [root@localhost tmp]#tail/etc/passwd
- colord:x:992:987:Userforcolord:/var/lib/colord:/sbin/nologin
- qemu:x:107:107:qemu user:/:/sbin/nologin
- setroubleshoot:x:991:986::/var/lib/setroubleshoot:/sbin/nologin
- rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
- nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
- gdm:x:42:42::/var/lib/gdm:/sbin/nologin
- sssd:x:990:985:Userforsssd:/:/sbin/nologin
- gnome-initial-setup:x:989:984::/run/gnome-initial-setup/:/sbin/nologin
- avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
- tcpdump:x:72:72::/:/sbin/nologin
常用选项:
tail -n #:显示最后 #行或者是 tail -#
-f:查看文件尾部内容,结束后不退出,跟随显示新增的行
stat
display file or file system status
文件:两类数据
元数据:metadata,文件的状态,创建时间,修改时间,大小,权限等
数据:文件里面的内容
- [root@localhost tmp]#stat/etc/passwd
- File: '/etc/passwd'
- Size: 2235Blocks:8IO Block:4096regularfile
- Device: fd00h/64768d Inode:19840519Links:1
- Access: (0644/-rw-r--r--) Uid: (0/ root) Gid: (0/ root)
- Context: system_u:object_r:passwd_file_t:s0
- Access: 2017-07-06 09:25:43.555083116-0400
- Modify: 2017-07-01 08:00:52.140151303-0400
- Change: 2017-07-01 08:00:52.141154779-0400
- Birth: -
stat 显示的就是文件的元数据,包含文件路径,大小,blocks 数目,IO block,文件类型,inode 号,权限,uid,gid 和三个时间戳等
三个时间戳:
access:最近一次访问的时间
modify:最近一次修改文件的时间
change:文件最近一次改变的时间,即改变元数据的时间
touch
change file timestamps 修改时间戳
touch [OPTION]... FILE...
文件不存在则创建文件, 当直接使用命令去 touch 一个文件的时候,修改的是所有的时间戳
常用选项:
-c:指定的文件路径不存在时不予以创建
-a:仅修改 access time
-m:仅修改 modify time
-t STAMP
[[CC]YY]MMDDhhmm[.ss]
(不能修改 change time,只当元数据发生变化时,才会改变)
- [root@localhost tmp]#touch-t201212121200.30test.txt -m
- [root@localhost tmp]# stat test.txt
- File: 'test.txt'
- Size: 0Blocks:0IO Block:4096regular emptyfile
- Device: fd00h/64768d Inode:17251556Links:1
- Access: (0644/-rw-r--r--) Uid: (0/ root) Gid: (0/ root)
- Context: unconfined_u:object_r:user_tmp_t:s0
- Access: 2017-07-07 03:17:12.640883844-0400
- Modify: 2012-12-12 12:00:30.000000000-0500
- Change: 2017-07-07 03:19:17.667997201-0400
- Birth: -
- [root@localhost tmp]#
cp
复制文件或者目录
单源复制:
cp [OPTION]... [-T] SOURCE DEST
如果 DEST 不存在,则先创建此文件,并复制源文件的数据流至 DEST 文件中
如果 DEST 存在:
如果 DEST 是非目录文件,则覆盖 DEST 文件
如果 DEST 是目录文件,则在 DEST 目录下创建一个与源文件同名的文件,并复制其数据
多源复制:
如果 DIRECTORY 不存在,则报错
如果 DIRECTORY 存在:
如果 DIRECTORY 是非目录文件,则报错
如果 DIRECTORY 是目录文件,分别复制每个文件至目标目录中,并保持原名
常用选项:
-i:交互式复制
-f:强制覆盖目标文件
-r,-R: 递归复制目录
-d:复制符号链接文件本身,而非指向的源文件
-a:-dR --preserve=all, archive,用于实现归档;
--preserv=
mode:权限
ownership:属主和属组
timestamps: 时间戳
context:安全标签
xattr:扩展属性
links:符号链接
all:上述所有属性
mv
move
移动文件,可用来重命名文件
常用选项:
-i:交互式
-f:强制覆盖文件
rm
remove
移除文件
rm [OPTION]... FILE...
常用选项:
-i: 交互式移除文件
-f:强制删除文件
-r:递归删除
注意:所有不用的文件建议不要直接删除,可以移动至某个专用的目录(用来做回收站的目录)
文件名通配:是对整体文件名匹配,不是部分匹配
匹配字符:
*:匹配任意长度的任意字符
:匹配任意单个字符
[]:匹配指定范围内的任意单个字符'
[a-z],[A-Z],[0-9],[a-z0-9] 不区分大小写
特殊格式:
[[:upper:]]:所有大写字母
[[:lower:]]:所有小写字母
[[:alpha:]]:所有字母
[[:digit:]]:所有数字
[[:alnum:]]:所有的字母和数字
[[:space:]]:所有空白字符
[[:punct:]]:所有标点符号
[^]:中括号加托字符,匹配指定范围外的任意单个字符
[^0-9]:匹配数字之外的任意单个字符
[^[:upper:]]:匹配大写字母以外的任意单个字符
练习:显示 / var 目录下所有以 l 开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录;
- ls - d /
- var / l ? [[: lower: ]]
练习:复制 / etc 目录下,所有以. conf 结尾,且以 m,n,r,p 开头的文件或目录至 / tmp/conf.d / 目录下;
- cp-r /etc/[mnrp]*.conf /tmp/conf.d/
IO 即输入和输出设备,可用于输入的设备一般有键盘、文件系统上的常规文件、网卡等,可用于输出的设备有显示器、文件系统上的常规文件、网卡等;
程序的三种数据流:
输入的数据流:标准输入(stdin),键盘;
输出的数据流:标准输出(stdout),显示器;
错误的输出流:错误输出(stderr),显示器;
文件描述符:fd,file descriptor
标准输入:0
标准输出:1
错误输出:2
IO 重定向
输出重定向:
> 覆盖输出
>> 追加输出
小特性:
set -C:禁止覆盖输出重定向至已存在的文件
set +C:开启覆盖输出重定向至已存在的文件(默认)
错误输出重定向:
2> 覆盖输出
2>> 追加输出
合并正常输出流和错误输出流
1.
&> 覆盖输出
&>> 追加输出
2.
COMMADN > /PATH/TO/somefile 2>&1 :如果命令执行成功则覆盖输出至 somefile,执行不成功也覆盖输出至 somefile
COMMAND >> /PATH/TO/somefile 2>&1:如果命令执行成功则追加覆盖至 somefile,执行不成功也追加输出至 somefile
注意:特殊设备:/dev/null 当不需要命令的执行结果,只需要知道命令的执行状态,则可以重定向至 / dev/null,/dev/null 相当于一个垃圾桶。
输入重定向:<
Here Document:<<,可以作为指定文件的结束符,常用于 shell 编程
- [root@localhost tmp]#cat<<EOF
- > how are you
- > my name is Frank
- > EOF
- how are you
- my name is Frank
tr
tr [OPTION]... SET1 [SET2]
把输入的数据当中的字符,凡是在 SET1 定义范围内出现的,通通对位转换为 SET2 出现的字符,不修改原文件
用法 1: tr SET SET2 < /PATH/FROM/SOMEFILE
用法 2:tr -d SET1 < /PATH/FROM/SOMEFILE 删除 SET1 中的字符,区分大小写
管道
连接程序,实现将前面一个命令的输出直接定向后一个程序当做输出数据流
COMMAND1 | COMMAND2 | COMMAND3 ...
- [root@localhost tmp]#echo 'abcd'|tr 'a-z' 'A-Z'|tr-d'AD'
- BC
显示程序的输出并将其复制到一个或多个文件中
- [root@localhost tmp]#echo 'abcd'|tee/etc/fstab |tr 'ab' 'AB'
- ABcd
- [root@localhost tmp]# cat/etc/fstab
- abcd
如上例子,使用 tee 命令输出到 / etc/fstab,又将标准输入作为了后面 tr 的输入。
来源: http://www.cnblogs.com/liubinsh/p/7141437.html