• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2020-09-05 06:53 Aet 隐藏边栏 |   抢沙发  1 
文章评分 1 次,平均分 5.0

工作控制

赋予使用者操控进程执行过程的机制,称为工作控制
工作控制过程中常用到的命令有:

  • jobs
  • fg
  • bg

可以执行的操作有:

  • ctrl+z
    • 暂停进程
  • bg
    • 将进程置为后台进程
  • ctrl+c
    • 停止进程
  • fg
    • 将进程置为前台进程

进程替换

通过进程替换我们可以把一个进程的标准输出一次倒给许多进程作为输入,或者可以由多个进程取得输出然后倒给某个进程去处理.

comm <(sort file1) <(sort file2) #将排序的输出作为comm的输入.因为使用comm的前提是已排好序的文件.

用法:

命令 <(指令行)
通过设备文件/dev/fd/n或缓存文件,把指令行的输出倒给左方的命令.

> (指令行)
通过设备文件/dev/fd/n或缓存文件,把数据提供给()中的指令行
echo <(true) #输入中介文件是谁
echo >(true)

关联数组

在关联数组中,我们可以使用任何文本作为数组索引.而在普通数组中索引只能是从0开始的整数

定义

declare -A array

赋值

调用

关于函数

  • bash调用函数时不会开启新的子shell,bash会在现有的shell环境下执行该函数.
  • 在执行函数期间,bash会建立一个特别的变量FUNCNAME.该变量的值为函数名称.
  • 由于函数执行不会开启新shell,若要传递函数给子shell环境,可使用内置命令export命令.
  • 一般情况下,将函数中的变量都定义为局部变量.将存有返回值的变量设为全局变量.函数执行完毕,通过全局变量获取执行结果.

技巧

#对文件目录不清楚的情况下,想要找出目录下所有的文件:
find (pwd) -type f

#env查看所有的环境变量
#set查看所有的本地变量

进程描述字段的含义

  • USER
    执行身份
  • PID
    进程编号
  • %CPU
    cpu资源使用率
  • %MEM
    内存使用率
  • VSZ
    进程在虚拟内存中占用的大小
  • RSS
    进程在真实内存中占用的大小
  • TTY
    控制该进程的终端
  • STAT
    进程状态
  • START
    开始时间
  • TIME
    已运行时间
  • COMMAND
    执行命令
  • PPID
    父进程号

进程状态有多种,分别用不同的代码表示.下面是STAT的代码列表:
代码 意义
D 不可中断的休眠(通常是进行I/O的进程)
R 可执行的(在执行队列中)
S 等待接受工作(休眠)
T 被跟踪或被停止
W 分页
X 死亡
Z 僵尸进程,父进程结束时没有妥善处理的子进程
< 高优先级工作
N 低优先级工作
L 已分页锁定于内存中
s 一个session leader

+ 在前台的进程群组中

历史指令扩展

通过历史指令扩展可以修改/调用历史指令,快速完成与之前指令类似的操作指令.

注意:通过修改bash选项histverify的状态可以使历史指令在扩展完成时不会被立即执行.通过shopt可以修改.

常见的历史指令扩展方法:

  • !n
    调用编号为n的历史指令
  • !-n
    调用往前倒数第n个历史指令
  • !!
    执行前一个历史指令.
  • !样式
    执行最近一个以样式开头的历史指令
  • !?样式?
    执行最近一个含有样式字符的历史指令
  • ^字符串1^字符串2^
    将前一个历史指令中的字符串1换成字符串2,然后执行替换后的指令.
  • !#
    代表在命令行中到目前为止所键入的字符串.
  • !!:$
    取得前一个命令最后一个参数
  • !command:n
    找出最近一个以command开头的指令的第n个参数
    注意:第一个参数也可以用^来代替.即cd !ls:^等同于cd !ls:1
  • !command:*
    找出最近一个以command开头的指令的所有参数.
  • !!:3-5
    找出前一个指令中介于第三到第五个字符串之间的字符串
    例如 echo hs ka kw ix,其中!!:2-4就是ka kw ix
  • !!:s/字符串1/字符串2/
    将前一个指令中的字符串1替换成字符串2,然后执行替换后的指令.
  • !command:s/字符串1/字符串2/
    将最近一个以command开头的历史指令的字符串1替换为字符串2,然后执行.
  • !!:h
    删除最后一个历史指令后面的文件名.
    注意:如ls /home/youyou/kill,!!:h的结果是ls /home/youyou
  • !!:t
    删除最后一个历史指令前面的目录
    注意:如ls /home/youyou/kill,!!:h的结果是kill
  • !!:p
    显示前一个历史指令但不执行.

历史指令中的符号已经他们的含义:
符号 含义
! 调用历史指令
!! 前一个指令
0 命令本身
1 第一个参数
^ 第一个参数
$ 最后一个参数

* 所有的参数
n 第n个参数
x-y 第x-y个字符串
s 替换
h 删除文件名
t 删除除文件名之外的
p 显示指令,不执行.
?? 查询样式

历史指令扩展的语法
选择历史指令:操作
选择历史指令,使用!调用,根据样式或符号匹配
操作,替换,删除,查找等

命令替换

#命令替换:将命令执行后的标准输出放入变量中.命令替换的语法有两种:
1.变量名=$(命令)
2.变量名=命令
以上方式都可以将命令的执行结果保存在变量中.

#解释
由于IFS改为空格符,所以在变量扩展时换行字符不会被删除.
这样保持了原文件的排版方式

#如果要在命令替换中执行多个指令,需要用;将指令隔开
echo "$(cd ..; pwd)"

#同时变量替换中也可以在包含其他命令替换.
result=(find (pwd) -type f)

算术运算

算数运算有以下几种方法:

Bash运算符优先级表:
优先级 说明
1 i++运算后加1,i--运算后减1
2 ++i运算前加1,--i运算前减1
3 -负号,+正号
4 !逻辑非,~按位取反
5 *乘方
6
乘法,/除法,%取余
7 +加,-减
8 <<按位左移,>>按位右移
9 <=,>=,<>不等于
10 ==相等,!=
11 &按位与
12 ^按位互斥
13 |按位或
14 &&逻辑与
15 ||逻辑或
16 条件测试?式子1:式子2
17 =.*=,/=,+=,-=,<<=,>>=,&=,^=,|=
18 ,(逗号)运算

网络重定向

和对普通文件的重定向一样,通过将http请求包重定向到tcp/udp的套接字接口文件中来向网络设备发送http请求.同时通过接收套接字接口文件中的数据来获取网络设备响应的数据.

其中,套接字接口文件为:
tcp:/dev/tcp/主机名或ip/端口
udp:/dev/udp/主机名或ip/端口

文件权限

linux系统文件系统中的三种身份

  • u 自己
  • g 同组的人
  • o 其他人

对于每种身份每种身份对应着4种权限:

  • r 可读
  • w 可写
  • x 可执行
  • s 特殊权限

linux系统中还有三种特殊权限:

  • set user id(s)
    • 该文件被执行,执行者可暂时成为文件拥有者。权值为4000,设有此权限的文件其用户权限的x位会显示s.
  • set group id(s)
    • 该文件被执行,执行者暂时成为文件所在用户组。权值为2000,设有此权限的文件其所在组权限的x位会显示s.
  • sticky bit(t)
    • 该文件只能被拥有者删除.设有此权限的文件其权限序列的最后会有一个T标识

对于一个文件夹x权限的含义就不再是可执行了,而是可进入

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享