加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash 基础特性

发布时间:2020-12-15 23:18:15 所属栏目:安全 来源:网络整理
导读:命令别名 ? alias?显示当前shell中定义的所有别名 ? alias?别名=‘原始命令‘ ? unalias 别名 取消定义的别名 在命令前加使用命令本身,而不是别名(或者使用绝对路径执行命令使用命令本身) ?仅对当前用户生效:~/.bashrc ?对所有用户生效:/etc/bashrc ?配

命令别名
? alias?显示当前shell中定义的所有别名
? alias?别名=‘原始命令‘
? unalias 别名 取消定义的别名
在命令前加使用命令本身,而不是别名(或者使用绝对路径执行命令使用命令本身)
?仅对当前用户生效:~/.bashrc
?对所有用户生效:/etc/bashrc
?配置文件配置后不会立即生效需要重新运行配置文件
?? source /etc/bashrc
??. /etc/bashrc

文件名通配(globbing)
? *?匹配任意长度的任意字符
? ??匹配任意单个字符
?[^]?匹配指定字符范围外的任意单个字符
? [ ]?匹配指定字符范围内的任意单个字符,不区分大小写
? [[:upper:]]?大写字母[A-Z]
? [[:lower:]]?小写字母[a-z]
? [[:alpha:]]?所有字母[A-Za-z]
? [[:digit:]]?所有数字[0-9]
? [[:alnum:]]?字母+数字[0-9A-Za-z]
? [[:space:]]?空格
? [[:punct:]]?标点符号 特殊字符

命令历史
? bash默认会保持此前执行过的命令列表,当前shell进程的保存在缓冲区中,缓冲区中的命令会在shell退出时保存在文件.bash_history;使用上下箭头键可以翻看此前执行过的命令:
? history命令用法
? 选项:
? -c? 清空命令历史
? -d?删除历史中指定的命令 history -d 3
? #? 显示最近的#条历史命令 history 5
? -a?追加本次会话新执行的命令历史列表至历史文件
? -n?读取所有在会话列表中的,但是不在当前会话列表中的
? -r?读历史文件附加到历史列表
? -w?保存历史列表到指定的历史文件
? -p?展开历史参数成多个行,但不存在历史列表中
? -s?展开历史参数成一行,附加在历史列表后 (伪造命令)

命令历史相关的环境变量
? HISTSIZE?历史命令中可以保存的个数
? HISTFILE?历史命令保存的文件
? HISTFILESIZE?历史文件中可以保存的命令个数
? HISTTIMEFORMAT="%F %T" 显示时间格式
? HISTCONTROL?控制命令历史的生成机制
? ? ? ignoredups? 忽略记录重复的命令,连续的相同命令
? ? ? ignorespace 以空格开头的命令不会被记录
? ? ? ignoreboth?同时具有上面两种特性
??? erasedups? 删除重复命令

? !#?   执行history中第#条的命令
?!!?   上一条命令
?!-#?   表示执行命令列表中的倒数第#条命令
?!$?? ? 执行上个命令中的最后一个参数:ESC,.
?!string 执行命令列表中的最近一次以string开头的命令

命令及路径补全
? 内部命令:bash程序本身提供的命令
?外部命令:在系统某路经下有一个可执行程序
?命令补全:是通过在PATH环境变量定义的路径中从左往右搜索补全
?路径补全:在给出的打头路径下补全,如果没有打头路径,则为当前目录

Bash快捷键
? Ctrl+A 把光标移动到命令行开头
?Ctrl+E 把光标移动到命令行结尾
?Ctrl+C 非正常中断—终止前台进程
?Ctrl+D 输入完成的正常信号(退出当前终端)
?Ctrl+G 终端声效
?Ctrl+J 换行—与Enter键功能相同
?Ctrl+L 换页—使bash清屏,也可以用来刷新屏幕,对于许多基于屏幕的语言程序而言,如vi,如果意外的信息弄乱了显示,使用Ctrl+L可以让程序刷新屏幕,正确的重绘屏幕
?Ctrl+S 锁住终端显示
?Ctrl+Q 解锁终端显示
?Ctrl+H 后退一格—删除前一个字符
?Ctrl+W 删除或剪切光标前的单词
?Ctrl+K 删除或剪切光标之后的内容
?Ctrl+U 删除光标前的所有内容(如果密码输入错误了,可以用Ctrl+U清除)
?Ctrl+Y 粘贴ctrl+U或ctrl+K剪切的内容
?Ctrl+Z 挂起前台进程,转入后台运行(fg调回命令)
?Ctrl+R 在历史命令中搜索
?Ctrl+P 重复上一条命令
?ESC+T? 调换光标前的两个单词
?Ctrl+向右箭头? 光标移动到下一个词首
?ESC+F?????光标移动到下一个词首
?Ctrl+向左箭头?光标移动到上一个词首?
?ESC+B?????光标移动到上一个词首
?ESC+.?????调用上一条命令的参数

命令行展开
 ~ 展开为当前用户的家目录
? ~USERNAME 展开为指定用户的家目录
? { } 里面是一个以逗号分割的列表,并将其展开为多个路径
? 例如:/tmp/{a,b} 相当于 /tmp/a、/tmp/b

多命令执行
? 复合式: 命令会一个接一个的执行
? ? COMMAND1;COMMAND2;COMMAND3;...
??date; who | wc -l

?子shell:所有的输出看做一个整体,都被发送给单个STDOUT和STDERR
??(date; who | wc -l ) >>/tmp/trace
演示:
[[email?protected] ~]# date;who
2017年 02月 19日 星期日 11:51:24 CST
root tty1 2017-02-19 11:50
root pts/0 2017-02-19 11:02 (192.168.1.100)

# 按顺序执行
[[email?protected] ~]# date;who |wc -l
2017年 02月 19日 星期日 11:50:21 CST
2

# 为子shell,括号中的执行结束后,再管道
[[email?protected] ~]# (date;who) |wc -l
3

Bash特性引用
?‘‘?强引用,不会进行变量替换
?""?弱引用,会进行变量替换
?``?命令替换,引用命令的执行回显结果,另外一种方式$()
?${变量名} 变量替换,或者直接"$变量名"

I/O重定向及管道
? I/O设备在系统起来的时候注册IO端口(这些端口其实就是寄存器),注册IO端口就是给这些寄存器一个地址,CPU通过这些寄存器地址跟IO设备交互

?Linux系统中标识用户用UID,标识组用GID,标识进程用PID;都是通过名称解析将名字转换成ID;同样的系统在运行的时候,会打开很多文件,这些打开的文件也有ID,通常叫文件描述符(windows中叫文件句柄):file descriptor简写为FD,是内核用来追踪当前打开的文件属性;文件描述符是内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符;读写文件也需要使用文件描述符来指定待读写的文件

?INPUT:标准输入/dev/stdin??文件描述符为0? 标准默认输入是键盘
?OUTPUT:标准输出/dev/stdout? 文件描述符为1?标准默认输出是显示器
? 标准错误输出:/dev/stderr??文件描述符为2?标准默认错误输出是显示器

I/O重定向:改变标准的输入和输出位置就是I/O重定向
?输入重定向?<、<<
?? <  输入重定向
??<<?此处创建文件,常用于在脚本中创建文件或生成菜单
??创建文件例子:将输出信息保存到/tmp/filename文件
????cat > /tmp/filename << EOF
????a:show user info
????b:show disk info
????c:show cpu info
????EOF??????
???生成菜单例子:EOF为起始结束符,可以用任意字符,但是起始结束符要一样
????cat << EOF
????a:show user info
????b:show disk info
????c:show cpu info
????EOF
???
? 输出重定向?>、>>
  >  以覆盖的方式,把命令的正确输出重定向到指定的文件或设备
  >>?以追加的方式,把命令的正确输出重定向到指定的文件或设备

?set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+"和"-"的作用分别是打开和关闭指定的模式。set命令不能够定义新的shell变量。
  set -C?禁止覆盖重定向至已经存在的文件
  set +C?关闭上述特性
  >|??? 在-C 特性下,强制使用覆盖重定向

? /dev/null:bit bucket 位桶,所有输入到该设备的信息都会被丢弃,在编写脚本不需要命令指定的返回结果就可以重定向到该设备

?错误重定向:2>、2>>,会输出正确信息
?? 2>  以覆盖的方式,把命令的错误输出重定向到指定的文件或设备
??2>>?以追加的方式,把命令的错误输出重定向到指定的文件或设备

? 同时重定向正确输出和错误输出:
??&>  以覆盖的方式,把命令的正确和错误输出重定向到指定的文件或设备
??&>>?以追加的方式,把命令的正确和错误输出重定向到指定的文件或设备
   command &> /path/to/somefile
   command > /path/to/somefile 2>&1

??正确输出到outfile,错误输出errfile
  ? command > /path/to/outfile 2>/path/to/errfile

?合并多个程序的标准输出
??(ls;who) > /tmp/test.txt

? 管道:把前一个命令的输出当下一个命令的输入
? ? 组合目的单一的小程序完成复杂的任务
   command1 | commadn2 | command3 | ......
??? command1、commadn2是在当前shell执行的,command3(最后一个命令)第三个命令后是在子shell中运行
?tee 分叉输出,命令不会处理,会送到下一个管道
?将输出信息分叉,/etc/passwd的文件内容输出到/tmp/filename;同时给管道的下一个命令wc命令作为输入统计行数
? cat /etc/passwd | tee /tmp/filename | wc -l?

tr命令
? 转换或删除字符,tr ‘集合1‘ ‘集合2‘,必须使用管道输出作为该命令参数
?转换字符:会把第一个字符集的对应转换为第二个字符集中的对应转换
  [[email?protected] ~]# echo "hello word" | tr [a-z] [A-Z]
??HELLO WORD
 -d 删除字符集中出现的字符
???[[email?protected] ~]# echo "hello word" | tr -d r
???hello wod
?-s?压缩输入中重复的字符
???[[email?protected] ~]# echo "GNU is? ? ?not? ? UNIX. Recursive right ?" | tr -s ‘ ‘?(去除连续重复的空白字符)
???GNU is not UNIX. Recursive right ??
?-c?取字符集的补集?

演示:
tr 加选项 -t 和不加的区别,如下:
# 对位替换
[[email?protected] ~]# echo abcde |tr ‘a-c‘ ‘A-Z‘
ABCde
[[email?protected] ~]# echo abcde |tr ‘abc‘ ‘A-Z‘
ABCde
[[email?protected] ~]# echo abcde |tr ‘abc‘ ‘D-Z‘
DEFde
[[email?protected] ~]# echo abcde |tr ‘a-c‘ ‘xyz‘
xyzde

# 如果SET2对应的位数不及SET1时,会用SET2对应SET1对应的最后一位补全SET1替换位
[[email?protected] ~]# echo abcde |tr ‘abcde‘ ‘xyz‘
xyzzz
[[email?protected] ~]# echo abcde |tr ‘abcd‘ ‘xyz‘
xyzze

# 将第一字符集对应的字符转化为第二字符集对应的字符。
[[email?protected] ~]# echo abcde |tr -t ‘abcd‘ ‘xyz‘
xyzde

# 用空格替换回车换行符n
[[email?protected] ~]# ls /root/ |tr ‘n‘ ‘ ‘

#处理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的数字和空格
[[email?protected] ~]# echo "xt.,l 1 jr#‘[:digit:]‘mn2 c*/fe3 uz4" |tr -cd ‘[:digit:] n‘
1 2 3 4

#将PATH变量显示在独立的一行
[[email?protected] ~]# echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[[email?protected] ~]# echo $PATH |tr ‘:‘ ‘n‘
/usr/lib64/qt-3.3/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读