历史命令(history)补充
history -c
: 删除所有条目,从而清空历史列表。(清空的是内存中加载的历史列表,文件中保存的历史列表不受影响)
history -d 401
: 从指定位置删除历史列表。(同上效果)
history -r
: 读取历史文件并将内容追加到历史列表中。
history -a
: 将当前绘画的历史行追加到历史文件中。
history -n
: 从历史文件中读取所有未被读取的行。
history -w
:将当前历史写入到历史文件中,并追加到历史列表中。
history -p ``
: 对每一个ARG参数展开历史并显示结果,而不存储到历史列表中。
history -s``
:以单条记录追加ARG到历史列表中。
HISTFILE="/.nihao"
:记录历史命令和文件名(并不在/目录下创建一个 .nihao文件,且只是在内存中修改此变量,当系统重启后,此变量值会恢复为默认变量值“/root/.bash_history”)。
HISTTIMEFORMAT= ` date `:
打印时间戳,显示列表历史命令的时候会显示什么时间使用的历史变量。
HISTFILESIZE=1024
: 限制历史命令文件大小
HISTSIZE=1000
: 保存历史条目设置为1000.
HISTCONTROL = ignorespace
:历史命令不保存有空格开头的命令
快捷命令
!58
:当已知历史命令中的第58个命令是什么,并且想要使用它时,可以不用重复输入命令,使用此命令,就意味着在命令行输入第58行的命令并且执行它。
!!
:执行历史命令中的上一条命令(对于history -p执行的命令并不会执行)。
!if
: 执行历史命令中以“if”开头的命令,如历史命令执行过 ifconfig 。
.+ ESC
:取出上一条参数到命令行(若是:命令 参数 的形式,取出的是参数;若是:命令 的形式,取出的是命令;若是:命令 参数1 参数2 ,取出的是参数2)
!$
: 取出上一条参数并执行
echo $_
:打印出上一条命令的参数
别名机制
alias vimif="vim /etc/sysconfig/network-scripts/ifcfg-ens32"
: 定义别名。定义别名以后,就可以在命令行中输入别名执行。(可用tab补全命令)
\ls
:还原命令本身(ls就是一个别名。ls=ls --color=auto。使用\还原命令后,color=auto将不执行)
unalias vimif
:取消定义的别名
变量*
本地变量:作用域, shell进程中的某代码片段。(只能在某个代码中才会显示或被使用)
vim test.sh
#name=xuankui
echo $name
局部变量:又称标准变量或普通变量 :作用域:当前shell(bash)进程,对其子进程无效
name=wangzhe
环境(全局)变量:生效范围为当前shell(bash)进程及其子进程。
export name=wangzhe 全局变量定义
特殊符号
1) | —> 管道
“|” —》进程()–(独占内存空间)
进程间通信的方式:
a. 管道:上一个进程的标准输出作为下一个进程的标准输入。
b. 共享内存:
c. 消息队列:kafka,rabbitmq,rocketmq
d. socket :
使用cat命令可以输出test.sh的内容,管道“|”传输test.sh的值给grep,传输的值经过grep的过滤,只输出有“nihao”的所在行的内容。
2)文件描述符
文件描述符是非负整数。内存
内核利用文件描述符来访问文件。
打开现存文件或新建文件时,内核会返回一个文件描述符。
读写文件也需要使用文件描述符来指定待读写的文件。
每一个进程都有【文件描述符】
需要先下载一个程序:
yum install httpd
并且启动一个服务:
systemctl start httpd
然后查看进程:
系统级别最大可使用的文件描述符:
vim /etc/security/limits.conf
#<domain> <type> <item> <value>
#
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
第一列表示用户和用户组(@开头)
第二列表示软限制还是硬限制。(hard和soft的区别: soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错,一般情况下都是设为同一个值。)
第三列表示限制的资源类型。
core是内核文件,nfile是文件描述符,nproc是进程,一般情况下只限制文件描述符数和进程数就够了
第四列表示限制的最大值。
查看系统当前打开的文件描述符数量
cat /proc/sys/fs/file-nr
1280 0 95095
第一个数表示当前系统分配后已使用的文件描述符数,
第二个数表示分配后未使用的(内核2.6版本中这个值总是为0,这并不是一个错误,它意味着已经分配的文件描述符总会被使用),
第三个数等于最大值file-max。
要查看某个进程打开的文件描述符数量需要先安装一个软件(需要先知晓该进程的)
yum install lsof -y
然后使用代码 :lsof -p 7919 |wc -l
就可以显示出文件描述符的数量
156
Linux 提供了三种I/O设备
标准输入:0(一般指键盘、鼠标、等输入设备的输入)
标准输出: 1
错误输出(标准错误): 2
0、1、2是文件描述符
重定向:重定向就是不适用系统的标准输入端口,标准输出端口和标准错误输出端口,而进行重新的指定。所以重定向分为输入、输出和错误重定向,通常情况下重定向到一个文档。
输入重定向 >
输出重定向 <
例如:
此时ll命令的内容重定向输出到file2文件中,并且此重定向输出是标准输出,所以在“>”前加了数字1。
此时 ll -T
是一个错误输出,所以重定向输出到文件file3时,需要在“>”前加一个2才能输出到file3中。
将file2文件中的内容重定向输入到cat命令中。
“>>”表示追加重定向输出,即不覆盖文件的原内容,将命令产生的新内容输出到文件文件的原内容之后。
tar czvf etc.tar.gz /etc/ 1>file 2>error
此时这个命令会产生一堆标准输出和标准错误,“1>file”是将标准输出的内容重定向输出到file文件中,“2>error”则是将标准错误的内容重定向输出到error文件中。
tar czvf etc.tar.gz /etc/ >file 2>&1
将标准错误的内容通过标准输出打印到文件中。
ls;date >/dev/null 2>&1
“;”表示分割,两个命令都执行。
/dev/null 是空设备,也称为位桶(bit bucket),可以向他输出任何数据。任何写入它的输出都会被抛弃,如果不想让消息以标准输出显示或写入文件,那么可以将信息重定向到位桶
/dev/zero 是一个输入设备,可以用他来初始化文件,该设备无穷尽地提供0
命令的拼接
;
不存逻辑判断,即使前一个命令执行失败,后面的命令依然执行
ls -T;echo "123"
如上图所示,两个命令都输出出来了,只是一个是标准错误,一个是标准输出
&&
存在逻辑判断,前一个命令执行成功,后一个命令才会执行
ls -T&&echo "123"
当前一个命令是标准错误时,后一个命令就不执行了。
||
存在逻辑判断,前一个命令执行不成功,后一个命令也会执行
ls -T || echo "123
当前一个命令是标准错误时,后一个命令依然会执行。
``: 解析shell命令
原本echo是输出后一个参数(即打印date这四个字母),但是date加了反引号后,就会执行date命令
''
: 强引用,所见即所得
""
: 弱引用,会解析变量
(date是命令,不是变量。)
“echo 出入时对于转义
不受强引弱引的限制,与echo的“-e”参数有关”(转义指的是\n之类转义字符)
{}
cp cy.txt cy.txt.bak
使用命令cp复制cy.txt
文件 ,保存为cy.txt.bak
文件
cp cy.txt{,.bbk}
效果等同于cp cy.txt cy.txt.bak
命令
cp cy{.txt,.hehe}
使用命令cp复制cy.txt
文件 ,保存为cy.hehe
文件