计算机基础篇之四
目录
bash基本特性: 1.命令行编辑 光标跳转 ctrl+a 命令行首 ctrl+e 命令行尾 ctrl+d 删除光标处字符 ctrl+u 删除光标至命令行首的内容 ctrl+k 删除光标至命令行尾的内容 ctrl+<- 跳转一个单词 ctrl+l 清屏 2.命令历史 保存在内存缓冲区 history -c 清空历史命令 -d 50 清空第500个命令 -d 50 3 从500行开始的后三行 -w 缓存区保持到内存中 ./bash_history !n !-n : 倒数第n条命令 !! 执行上一条命令 !字符串 执行历史命令中最近一个以此字符串开头的命令 !$ 引用前一个命令的最后一个参数( esc 松开.)(alt+ .) 3.命令补全/路径补全 Tab健 4.命令别名 alias 别名 #bash的配置文件 unalias 别名 5,命令替换 把命令中某个子命令替换为其执行结果的过程 echo "this is a 当前目录 $(pwd)" echo "this is a 当前目录 $`pwd` touch ./file-$(date +%F-%H-%M-%S).txt ###示例### [root@xiaofu ~]# echo "taday is `date +%F-%H-%S-%M`" taday is 2019-12-19-00-11-06 [root@xiaofu ~]# echo "this directory is $(pwd)" this directory is /root 6.bash支持的引号: 1.`` 命令替换 2."" 弱引号,可以实现变量替换 3.'' 强引号 不完成变量替换 7.文件名通配: * #通配任意长度的任意字符,包括空字符 ? #匹配任意单个字符,必须为1个,空字符不行 [] #匹配指定范围内的任意单个字符 [a-z],[0-9][a-zA-Z],[0-9a-zA-Z] [^] #匹配指定范围之外的任意单个字符 ###示例### [root@xiaofu test]# ls 1dcbc 1.txt a aab abc ab a b a_b b b33c 1a 2j 39 9g #目录下所有的文件 [root@xiaofu test]# ls [0-9]* #显示所有以数字开头的文件 111dcbc 1.txt [root@xiaofu test]# ls a*b #显示以a开头b结尾的所有文件 aab ab a b a_b [root@xiaofu test]# ls [0-9]? #显示已数字开头后面只有一个字符的文件 1a 2j 39 9g [root@xiaofu test]# ls [^0-9]* #显示不是数字开头的所有文件 a aab aabbc ab a b a_b Abbccd b b33c [:space:] # 所有的空白文件 [:punct:] # 所有的标点符号 [:lower:] # 所有小写字母 [:upper] # 所有大写字母 [:alpha] # 所有大小写字母 [:digit] # 所有数字 [:alnum] # 数字和大小写字母 man 7 glob ###示例### [root@xiaofu test]# ls 111 1123bjj 1.doc a ba.txt abc ABc b c Bid c_b #目录中所有文件 [root@xiaofu test]# ls *[[:space:]]* #显示包含空白字符的所有文件 a ba.txt b c c_b [root@xiaofu test]# ls *[[:punct:]]* #显示所有包含标点字符的文件 1.doc a ba.txt c_b root@xiaofu test]# ls [[:lower:]]* #显示所有包含小写字符的文件 a ba.txt abc b c [root@xiaofu test]# ls [[:upper:]]* #显示所有包含大写字符的文件 ABc Bid [root@xiaofu test]# ls [[:alpha:]]* #显示所有包含大小写字符的文件 a ba.txt abc ABc b c Bid [root@xiaofu test]# ls [[:digit:]]* #显示所有包含数字的文件 111 1123bjj 1.doc [root@xiaofu test]# ls [[:alnum:]]* #显示包含数字和大小写字符的文件 111 1123bjj 12Ga 1.doc a ba.txt abc ABc b c Bid
cp #一个文件到一个文件;多个文件到一个目录 -a 归档复制(保留源文件一切属性,原来什么属性就复制成什么属性) -r 递归复制 -f 强制复制 -p 属主组,权限,时间戳 -a{dR} 保留源文件所有属性 -l 复制链接指向的文件非链接 -P 保持链接自身属性 ###示例### [root@xiaofu ~]# cp /etc/{passwd,shadow,yum.repos.d/redhat.repo} /tmp/ [root@xiaofu ~]# ll /tmp/ -rw-r--r--. 1 root root 989 Dec 17 08:19 passwd -rw-r--r--. 1 root root 358 Dec 17 08:19 redhat.repo ----------. 1 root root 982 Dec 17 08:19 shadow
mv SRC DEST mv -t DEST SRC #功能和cp类似
install 复制文件指定属性 -d 创建目录 -m 指定权限,-o 指定属主 install -t DEST SRC... ###示例### [root@xiaofu ~]# install -d /tmp/{a.txt,b.txt} [root@xiaofu ~]# ll /tmp/ drwxr-xr-x. 2 root root 6 Dec 17 08:41 a.txt drwxr-xr-x. 2 root root 6 Dec 17 08:41 b.txt ################################### [root@xiaofu ~]# ll -d /etc/passwd -rw-r--r--. 1 root root 989 Dec 13 00:05 /etc/passwd [root@xiaofu ~]# install /etc/passwd /tmp/passwd1 [root@xiaofu ~]# ll -d /tmp/passwd1 -rwxr-xr-x. 1 root root 989 Dec 17 08:44 /tmp/passwd1
cat #从标准输入读取内容并显示标准输出上 [选项] [file...] -n 显示行号 -E 显示行尾{linux行尾是"$",Windows行尾是"$回车"} -A 所有显示 tac 反向选择{和cat反过来显示}
more/less 分屏显示 "空格键" #向后翻一屏 "b" #向前翻一屏 "回车键" #一行行向后翻
head/tail #文件的前n行,默认10行 -n 显示行数 taif -f file...实时显示追加的内容
cut/join 切/合并 -d #指定字段分隔符{默认为一个空格} -f #指定需要显示的字段 # -f1 ; 1,3; 1-3
sort 文本排序 #默认根据ASCII表进行排序 -n 数值大小排序 -r 降序排序 -t 字段分割符 -k 以哪个字段关键字进行排序 -u 相同的行只显示一次{UNICODE}相邻 uniq - d 报告重复的行 -c 重复行的次数 -f 忽略字符大小写
wc 文本统计 [root@xiaofu ~]# wc /etc/passwd 22 30 989 /etc/passwd 行数 30个单词 989个字节 -l 只显示行 -w 只现实单词数 -c 只显示字节 -m 字符数 -L 最长的行包含多少个字符
tr 字符处理命令 #转换或删除字符 ###示例### tr "a-z" "A-Z" < /ect/passwd #逐个替换 -d 删除出现字符集中的所有字符 逐个字符进行处理
grep家族 1.grep #根据模式搜索文本,并将符合模式的文本行显示出来,(使用基本正则表达式的模式来过滤文本的命令)
#Pattern(模式):文本字符和正则表达式的元字符组合而成的匹配条件
-i 忽略字符大小写
--color 匹配颜色
-v 反向查找
-o 只显示被模式匹配的字符串
-E ;使用扩展正则表达式 #即"egrep"
-A:#10 after
-B before
-C : after,berfore
###示例###
[root@xiaofu ~]# grep -EA 2 'sshd' /etc/passwd #显示'/etc/passwd'文件中包含"sshd"字符的后两行
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
user01:x:1000:1000::/home/user01:/bin/bash
user02:x:1001:1001::/home/user02:/bin/bash
[root@xiaofu ~]# grep -EB 2 'sshd' /etc/passwd ##显示'/etc/passwd'文件中包含"sshd"字符的前两行
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@xiaofu ~]# grep -EC 2 'sshd' /etc/passwd ##显示'/etc/passwd'文件中包含"sshd"字符的前后两行
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
user01:x:1000:1000::/home/user01:/bin/bash
user02:x:1001:1001::/home/user02:/bin/bash
###正则表达式### 正则表达式 Regular EXPression (REGEXP) #尽可能长的模式下匹配
1)元字符
. 匹配任意单个字符 #grep 'r..t' /etc/passwd
[] 指定范围内的任意单个字符 #grep '[0-9]' /etc/fstab
[^] 指定范围外的任意单个字符 #grep '[^A-Z]' /etc/fstab
2)匹配次数
* 匹配其前面的字符任意次 a,b,ab,aab,acb,adb,amdb a*b a.*b
.* 任意长度的任意字符
\? : 匹配其前面的字符一次或0次(可用可无)
\{m,n\} 匹配其前面的字符至少m次,至多n次
###示例###
[root@xiaofu test]# grep 'b\?' 1.txt #表示b字符出现1次或0次
a,b,ab,aab,abb,acb,adddba b,bbc,ddd,fjdc
[root@xiaofu test]# grep 'b\{1,2\}' 1.txt #表示字符b最少出现1次,最多出现2次
a,b,ab,aab,abb,acb,adddba b,bbc,ddd,fjdc
位置指定
^ 此字符后面的任意内容必须出现在行首 #grep '^/' /etc/fstab
$ 此字符前面的任意内容必须出现在行尾 #grep '0$' /etc/fstab
^$ :空白行 # grep -v "^$" /etc/samba.conf #过滤samba配置文件中的空行
\< 其后面的字符字符必须作为单词首部出现 \b
\> 其前面的字符字符必须作为单词尾部出现 \b
###示例###
[root@xiaofu test]# cat 1.txt
abcefguser01
user01xxxx
sssuser01
user is user01
[root@xiaofu test]# grep '\buser01\b' 1.txt
user is user01
[root@xiaofu test]# grep '\buser01' 1.txt
user01xxxx
user is user01
[root@xiaofu test]# grep '\<user01' 1.txt
user01xxxx
user is user01
###
[root@xiaofu test]# grep 'user01\b' 1.txt
abcefguser01
sssuser01
user is user01
[root@xiaofu test]# grep 'user01\>' 1.txt
abcefguser01
sssuser01
user is user01
分组 \(\) \(ab\)* ab可以出现0此,一次,任意次 \1:引用第一个左括号以及与之对应的右括号所包含的所有内容
###示例###
[root@xiaofu test]# cat 1.txt #显示文件1.txt的内容
i hello is hellor
b miss u a misser
u love me lovever
ddd lwwe dd lwwe
fddlxxe is ssslxxe
[root@xiaofu test]# grep '\(l..e\).*\1' 1.txt #显示以"l..e"类型的字符,后面也同样出现类似的"l..e"的字符
u love me lovever
ddd lwwe dd lwwe
fddlxxe is ssslxxe
[root@xiaofu test]#
扩展正则表达式与基本正则表达式区别: 1.字符匹配相同 2.次数匹配
*:任意长度的任意字符
?:任意当个字符
+:其前字符至少一次{1,\}
{m,n}最少m次,最多n次
分组:{},支持或者"a|b" #or
###示例###
[root@xiaofu test]# cat 1.txt
cat
Cat
c
china
[root@xiaofu test]# grep -E 'c|cat' 1.txt
cat
c
china
[root@xiaofu test]# grep -E '(c|C)at' 1.txt
cat
Cat
grep -E =egrep
###示例### 1.过滤掉"1-255之间的数字" [root@xiaofu ~]# ifconfig | egrep '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>' inet 192.168.0.204 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::b387:2fab:3408:7a83 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:cf:b0:2e txqueuelen 1000 (Ethernet) RX packets 207708 bytes 14793261 (14.1 MiB) TX packets 9692 bytes 1137475 (1.0 MiB) lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 80 bytes 7096 (6.9 KiB) TX packets 80 bytes 7096 (6.9 KiB) 2.过滤IP地址 #"\<","\>"与"\b"的意思相同。 [root@xiaofu ~]# ifconfig | egrep '(\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\.){3}\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b' inet 192.168.0.204 netmask 255.255.255.0 broadcast 192.168.0.255 inet 127.0.0.1 netmask 255.0.0.0 [root@xiaofu ~]# [root@xiaofu ~]# ifconfig | egrep -o '(\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\.){3}\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b' 192.168.0.205 255.255.255.0 192.168.0.255 127.0.0.1 255.0.0.0 [root@xiaofu ~]# ifconfig | egrep -o '(\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\.)(\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\.)(\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b\.)\b([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\b' 192.168.0.205 255.255.255.0 192.168.0.255 127.0.0.1 255.0.0.0
The End