bash特性(续)

bash特型(续)
一·历史命令
(一)查看history命令
-c:清空历史列表
-d #:删除指定命令(#)历史
-r:读取历史文件并将内容追加到历史列表中
-a:将当前会话的历史行加入到历史文件中
-n:从历史文件中读取所有未被读取的行
-w:将当前历史写入到历史文件中,并追加到历史列表中
-p ··:对每一个ARG参数展开历史并显示结果,而不存储到历史列表中(反引号(tab键上)中为参数)
-s ··:以单条记录追加ARG到历史列表中
HISTFILE:持久保存命令历史的文件
[root@client ~]# HISTFILE="/.lujing" :历史命令的路径和文件名,默认在.bash_history中,改变以后历史命令在/目录下.lujing文件里
[root@client ~]# echo $HISTFILE
在这里插入图片描述
HISTTIMEFORMAT:给命令历史加上时间戳
[root@client /]# HISTTIMEFORMAT=date
HISTFILESIZE:设置历史命令文件的大小,超出限制删除旧命令
HISTSIZE:设置可保存的历史命令的条数
[root@client ~]# HISTSIZE=100
(二)调用历史命令列表中的命令
!#:再次执行历史列表中的第#条命令
在这里插入图片描述
!!:再次执行上条命令
在这里插入图片描述
!##:再次执行历史列表中最近一次以##开头的命令
在这里插入图片描述
(三)调用上一条命令的参数
.+esc:取出上一条命令参数到命令行
在这里插入图片描述
取出上一条参数并执行
在这里插入图片描述
打印出上一条命令的参数
在这里插入图片描述
(四)命令历史记录的方式
环境变量:HISTCONTROL
[root@client ~]# HISTCONTROL=ignorespace 忽略以空白字符开头的命令
[root@client ~]#HISTCONTROL=ignoreboth 两者同时生效
[root@client ~]#ignoredups 忽略重复命令
在这里插入图片描述
(忽略仅在上下键调用命令时可用,不作用在命令历史列表中)
二.别名机制
alias为别名命令
[root@client ~]# alias NAME=‘COMMAND’ //定义别名
[root@client ~]# ls //别名优先
[root@client ~]# \ls //跳过别名
在这里插入图片描述
实例:Linux无回收站,此例和建立回收站差不多
alias rm=“mv” —> /dev/mymull --> “定期清理;保留大小—》1G”
把内容转移到位桶,位桶大小设置为1G,超过1G自动删除以前保留文件
三.变量
什么是变量?一段有名称的连续的内存空间就叫做变量;变量名就是这段内存空间的名称;在这段内存空间中存储的数据,则称为变量值。
根据变量作用范围划分变量:
(1)全局变量:作用范围为整个shell进程,包括它的子进程
[root@client ~]# export name= quanju 全局变量定义
(2)本地变量:作用范围为当前登录时打开的shell进程,不包括它的子shell
[root@client ~]# vim test.sh
#name=quanju
echo $name
(3)局部变量:作用范围只能是当前程序段,一般用于函数
[root@client ~]# name=quanju
在这里插入图片描述
四.特殊重要符号
(一)管道 “|”
管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名 管道,无名管道只能用于具有亲缘关系的进程之间
[root@client ~]#grep “hu” test.sh
在这里插入图片描述
[root@client ~]# cat test.sh |grep “hu”
在这里插入图片描述
(二)tee管道
在数据流的处理过程中将某段信息保存下来,使其输出到屏幕或保存到某一个文件中
[root@nebulalinux03 ~]# ip addr |grep 'inet ’ |tee ip.txt |awk -F"/" ‘{print $1}’
ip addr #查看IP配置文件
grep ‘inet’ #过滤出有inet字段的行
tee ip.txt #将过滤出有inet字段的行输出到屏幕并保存到ip.txt文件中
awk -F"/" ‘{print $1}’ #表示对输出的内容以/分割并输出到第一列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(三)命令拼接(扩展)
. 点号(Linux中代表当前目录)
… 双点号(代表上级目录)
;分号(执行多条命令时,用;分开。不存在逻辑判断,即使前一个命令执行失败,后面命令依然执行)
[root@client ~]# ls -T;echo “123”
在这里插入图片描述
&&(逻辑与,存在逻辑判断,前一个命令执行成功后,后一个命令才会执行)
[root@client ~]# echo “123” && ls -T
在这里插入图片描述
||(逻辑或,前一个命令执行不成功,后一个命令也会执行,两个命令都对执行第一个)
[root@client ~]# ls -T || echo “123”
在这里插入图片描述
``反引号:解析shell命令
[root@client ~]# echo date
在这里插入图片描述
’ '单引号:强引用,不做变量替换
[root@client ~]# age=18
[root@client ~]# echo $age
18
[root@client ~]# class=‘xuankui $age’
[root@client ~]# echo $class
xuankui $age
在这里插入图片描述
“ ”双引号:弱引用,会解析变量,输出变量值
[root@client ~]# class=“xuankui $age”
[root@client ~]# echo $class
xuankui 18
在这里插入图片描述
“echo 出入时对于转义(换行)不受强引弱引的限制,与echo的“-e”参数有关”
在这里插入图片描述
{}大括号:做扩展,或者构建代码块 cp命令为复制文件到目录下
[root@client ~]# cp ip.txt ip.txt.bak 文件ip.txt复制到/root/i)p.txt.bak
[root@client ~]# cp ip.txt{,.baitao} 文件ip.txt复制到/root/ip.txt.baitao
[root@client ~]# cp ip{.txt,.hehe} 文件ip.txt复制到/root/ip.hehe
在这里插入图片描述
星号:匹配任意长度的任意字符
[root@client bak]# ll |grep "[0-9]
.txt"
[root@client bak]# ll |grep “.*.txt”
(三)进程间通信方式(扩展)
进程通信是一个进程与另一个进程间共享消息的一种通信方式。消息是发送进程形成的一个消息快,将消息内容传送给接收进程。
1.管道(pipe)和有名管道(FIFO)
管道可用于具有亲缘关系进程间的通信,数据只能单向流动
有名管道可用于具有/没有亲缘关系进程间的通信,数可以双向流动
2.共享内存
使得多个进程可以访问同一块内存空间
3.消息队列
又消息组成的链表,有写权限的进程可以根据规则向内写入新消息,有读权限的可以读取信息
4.socket(套接字)
可用于不同机器之间的通信
5.信号(signal)
比较复杂,用于通知接收进程某个时间已经发生
6.信号量
一个计数器,可以用来控制多个进程对共享资源的访问。常作为一种锁机制,防止某进程访问共享资源时其他进程也访问
五.输入输出重定向
重定向就是不适用系统的标准输入端口,标准输出端口和标准错误输出端口,而进行重新的指定,所以重定向分 为输入、输出和错误重定向,通常情况下重定向到一个文件
三个文件描述符0,1,2分别与标准输入,标准输出,标准错误输出相对应
1.输出重定向(覆盖追加)
(1)正确输出
相对于输入重定向来说,输出重定向更常用,输出重定向使用户能 把一个命令的输出重定向到一个文件里,而不是显示在屏幕上,这种功能使用于多种情况,例如,如果某个命令的输 出很多,在屏幕上不能完全显示,即可把他重定向到一个文件中,稍后再来打开这个文件
1> (覆盖),1>>(追加)
[root@client ~]# ll > file
[root@client ~]# ll 1>> file
[root@client ~]# ll >>file 追加
在这里插入图片描述
(2)错误输出
[root@client ~]# ll -T 2> file
[root@client ~]# ll -T 2>> file
在这里插入图片描述
(3)正确输出和错误输出分别重定向到对应文件中
[root@client ~]# tar czvf etc.tar.gz /etc/ 1>file 2>error
2.输入重定向
< 实现输入重定向。输入重定向不经常使用,因为大多数命令都以参数的形式在命令行上指定输入文件的 文件名,尽管如此,当使用一个不接受文件名为输入参数的命令,而需要的输入又是在一个已存在的文 件里,就可以使用输入重定向解决问题
在这里插入图片描述
3.正确输出和错误输出混合输出&>
[root@client ~]# tar czvf etc.tar.gz /etc/ &>file

4.正确和错误都输入到相同位置:2>&1
[root@client ~]# tar czvf etc.tar.gz /etc/ >file 2>&1
[root@client ~]# ls;date >/dev/null 2>&1
在这里插入图片描述
#/dev/null------它是空设备,也称为位桶(bit bucket),外号叫无底洞,你可以向它输出任何数据,它通吃,并且不 会撑着!任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶

创建20个大小为1024字节的块:
[root@client ~]# dd if=/dev/zero of=/swapfile bs=1024 count=20 生成一个设备,从/dev/zero实现输出,/swapfile实现输入
在这里插入图片描述
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
#/dev/zero,是一个输入设备,你可你用它来初始化文件。该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的 要多的多。他可以用于向设备或文件写入字符串0
[root@client ~]# dd </dev/zero>/file2 bs=1M count=10
在这里插入图片描述

5.文件描述符(扩展)
文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开者创建一个新文件时,内核向进程返回一个文件描述符。所以,内核利用文件描述符来访问文件。读写文件也需要文件描述符来指定待读写的文件。文件描述符往往只适用于Linux,Unix。
[root@client ~]# yum install httpd #下载程序
[root@client ~]# systemctl start httpd #启动服务
[root@client ~]# ps -ef |grep httpd #查看进程
在这里插入图片描述
7690为进程号,root为执行当前命令的进程,不能查看
[root@client ~]# cat /proc/7690/fd/ 此命令可以查看7690进程维护的文件描述符
Linux对文件描述符的限制有两种:
系统级别
[root@client ~]# cat /proc/sys/fs/file-max
95095 #表示文件描述符最大值
用户级别
[root@client ~]# ulimit -n
1024
在这里插入图片描述
为什么要限制:文件描述符越多意味着能打开的文件就越多,而每个文件都占用着内存资源,内存满了会内存溢出。所以会对内存资源有限制。还有如果文件打开太多系统会崩溃
限制资源使用的配置文件是/etc/security/limits.conf
[root@client ~]# vim /etc/security/limits.conf
在这里插入图片描述

第一列表示用户和用户组(@开头)
第二列表示软限制还是硬限制。
hard和soft的区别: soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错,一般情况下都是设为同一个值。
第三列表示限制的资源类型。
core是内核文件,nfile是文件描述符,nproc是进程,一般情况下只限制文件描述符数和进程数就够了
第四列表示限制的最大值。

查看系统当前打开的文件描述符数量
[root@client ~]# cat /proc/sys/fs/file-nr在这里插入图片描述
第一个数表示当前系统分配后已使用的文件描述符数,
第二个数表示分配后未使用的(内核2.6版本中这个值总是为0,这并不是一个错误,它意味着已经分配的文件描述符总会被使用),
第三个数等于最大值file-max。

查看某个进程打开的文件描述符数量
yum install lsof #下载lsof命令
[root@client ~]# lsof -p 7919 |wc -l #7919为进程号
123 #wc -l表示统计,123表示共有123行数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值