Linux命令
快捷键
Ctrl+L 清屏
Ctrl+K 从光标位置删除到末尾
Ctrl+U 从光标位置删除到开头
文件权限
一共10位,第一位表示文件类型,其他9位3个一组,顺序是rwx(读、写、可执行)
每组分别代表owner的权限、与当前用户同组的用户权限、其他用户权限
文件类型有几种标识
d:目录
-:文件
l:链接
修改文件、目录权限的命令
chmod u=rwx,g=rw,o=r aaa.txt
u是属主,g是当前用户所在组同组的用户,o是其他用户
还可以用数字表示
chmod 764 aaa.txt
修改文件所属用户和所属组
chown username:groupName aa.txt chown username:aa.txt chown:groupName aa.txt
-R:递归子目录修改所属者和所属组
cd
进入目录
用法:绝对路径、相对路径
cd /root/Documents cd ./path # 进入同级的path目录 cd ../path # 进入上一级的path目录 cd - # 进入上一级目录
ls
list
加参数展示内容不同
-a # 列出全部文件,包括隐藏文件
-l # 列出文件属性和权限
-R # 连子文件夹里的内容也一起列出
-h # 文件大小展示更友好
ls -l相当于ll
grep
抓取包含某内容的一行
通常与管道命令一起使用
grep [-acinv][--color=auto]'字符串'filename
-a # binary文件以text文件的方式查找
-c # 计算查找到的次数
-i # 忽略大小写
-v # 反向选择
man
man [命令]
列出命令的使用方法
wc
wordcount
返回结果里有4个值,分别表示行数、单词数、字符数、文件名
参数
-l:查看行数
-w:查看单词数
-c:查看字符数
du
查看文件大小
-h:人性化显示单位(文件大小以k为单位)
-s:不递归,只统计该文件目录的大小
mkdir、rmdir
创建、删除文件夹
mkdir -p test/a/b # 在test下的a下创建文件夹b。创建文件夹时,如果上面的文件夹都不存在,就创建一个 rmdir test # 删除test目录。test目录必须是空目录
touch、rm
rm test.txt # 带询问的删除 rm -f test.txt # 不询问直接删除 rm -r test # 递归删除,即删除目录以及其目录下的子目录(带询问的删除) rm -rf test # 直接删除test目录及其子目录
-f:force,强制删除
-i:互动模式
-r:递归删除
打包解包
tar -zcvf [打包压缩后的文件名.tar.gz] [要打包压缩的文件]
-z:调用gzip压缩命令进行压缩
-c:打包文件
-v:显示运行过程
-f:指定文件名
解压也是tar
参数
-x:解压
-C:指定解压的位置
tar -xvf xxx.tar.gz -C /usr tar -xvf xxx.tar.gz
cp
cp [-adfilprsu] 来源文件 目标文件
-a相当于-pdr
-p:复制文件的属性(备份常用)
-d:若来源是link file,就复制link file属性而非文件本身
-r:递归复制,一般用在目录复制时
-i:如果目标档已存在,覆盖前询问
mv
-f:force,强制删除
-i:互动模式
-u:如果目标文件已存在,且source比较新,就会升级(update)
更名
mv mvtest mvtest2
文件查看
cat # 从第一行显示文件内容
tac # 从最后一行倒着显示文件
nl # 输出内容带行号
more # 一页一页输出
less # 和more类似,但可以往前翻页
tail
head
tail -n100 # -n后面接数字表示显示几行 tail -f
awk
以文件的一行内容为处理对象,根据指定的条件判断是否处理此行内容。若符合条件,按照动作处理文本
语法
处理文件内容
awk 'condition{action}' filename
处理其他命令执行结果
command | awk 'condition{action}'
常用参数
$1表示打印echo的结果里的第一个空格分隔出来的单词。
从1开始数,不从0开始
$0表示当前整行内容
[User1@vultr ~]$ echo "aa bb cc dd ee ff" | awk '{print $1}' aa [User1@vultr ~]$ echo "aa bb cc dd ee ff" | awk '{print $4}' dd [User1@vultr ~]$ echo "aa bb cc dd ee ff" | awk '{print $5}' ee
-F这个参数可以指定分隔符
[User1@vultr ~]$ echo "aa bb cc 1 dd ee ff" | awk -F '1' '{print $1}' aa bb cc [User1@vultr ~]$ echo "aa bb: cc dd ee ff" | awk -F ':' '{print $1}' aa bb
NF表示当前行字段个数 所以第NF个字段表示最后一个字段,$(NF-1)表示倒数第二个字段
[User1@vultr ~]$ echo "aa bb: cc dd ee ff" | awk -F ':' '{print $NF}' cc dd ee ff [User1@vultr ~]$ echo "aa bb: cc dd ee ff" | awk -F ':' '{print $(NF-1)}' aa bb
NR表示行号
逗号分隔变量,会以空格分隔输出
注意右括号,必须用双引号括起来,才能正常输出
[User1@vultr ~]$ cat testfile test file ouput line2 line3 [User1@vultr ~]$ cat testfile | awk '{print NR")",$0}' 1) test file ouput 2) line2 3) line3
FILENAME表示当前文件名
只有awk+filename这种形式才能打印出文件名
[User1@vultr ~]$ awk '{print FILENAME,NR")",$0}' testfile testfile 1) test file ouput testfile 2) line2 testfile 3) line3
使用管道形式打印时,文件名会输出为”-“
[User1@vultr ~]$ cat testfile | awk '{print FILENAME, NR")",$0}' - 1) test file ouput - 2) line2 - 3) line3
RS表示行分隔符,默认是换行符
[User1@vultr ~]$ cat testfile | awk '{print $0,RS}' test file ouput line2 line3
OFS表示用空格分隔内容
ORS表示用换行符分隔内容
[User1@vultr ~]$ echo "aa1bb1cc1dd" | awk -F "1" '{print $1 ORS}' aa
tolower()
toupper()
[User1@vultr ~]$ echo "aa1bb1cc1dd" | awk -F "1" '{print toupper($1)}' AA
length()
substr($1,2) # 分割字符,$1表示第一个单词,2表示从这个单词的第二个字符开始到结尾
substr($1,2,1) # 分割字符,$1表示第一个单词,2和1表示从第二个字符开始,往后取1个字符
[User1@vultr ~]$ echo "abcd1efgh1ijkl1mnop" | awk -F "1" '{print substr($1,2)}' bcd [User1@vultr ~]$ echo "abcd1efgh1ijkl1mnop" | awk -F "1" '{print substr($1,2,1)}' b
rand()表示随机数
printf
printf跟C语言的差不多,可以格式化字符
匹配字符串内容
打印包含某字符串的行
特殊的字符需要转义(比如要找/,需要在前面打一个)
[User1@vultr ~]$ cat testfile test file ouput line2 line3 [User1@vultr ~]$ cat testfile | awk '/line/ {print $0}' line2 line3
某个字段完全匹配某个值
[User1@vultr ~]$ echo "abcd1efgh1ijkl1mnop" | awk -F "1" '$1=="abcd" {print $0}' abcd1efgh1ijkl1mnop
布尔值
[User1@vultr ~]$ cat testfile | awk 'NR==2 {print $0}' line2 [User1@vultr ~]$ cat testfile | awk 'NR>1 {print $0}' line2 line3 [User1@vultr ~]$ cat testfile | awk 'NR%2==1 {print $0}' test file ouput line3
if...else...
if和else语句用;分隔
if条件用括号括起来
[User1@vultr ~]$ echo "abcd1efgh1ijkl1mnop" | awk -F "1" '{if ($1=="abcd") print "1";else print "0"}' 1
BEGIN和END
表示程序执行前/执行后,需要执行的一段代码
[User1@vultr ~]$ awk 'BEGIN {print "start!"} > {print $0} > END {print "EOF"}' testfile start! test file ouput line2 line3 EOF