/
)代表/
分隔/root
、/home/用户名
/bin
、 /usr/bin
、 /usr/local/bin
/sbin
、/usr/sbin
、/usr/local/sbin
/media
、/mnt
/etc
/tmp
、/var/tmp
/boot
/var
、/srv
/proc
、/sys
、/run
/dev
/lib{,64}
、/usr/lib{,64}
、/usr/local/lib{,64}
/sys/fs/selinux
或 /selinux
参考
- $ man 7 hier
- FHS(FileSystem Heirache Standard)
- https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/
/
)以外,所有字符都是有效的
MAIL
、Mail
、mail
和 mAiL
.
开头的文件或目录是隐含的
l.
命令别名显示当前目录下的所有隐含文件ls -a
或 ls -A
显示当前目录下的所有文件(包含隐含文件)-
)d
)l
)c
)b
)s
)p
).txt
、.md
、.html
、.pdf
、.c
、.py
等ln
命令行建立硬链接文件ln -s
命令行来建立ln [参数] <被链接的文件> <链接文件名>
/dev
目录)设备文件 | 说明 |
---|---|
/dev/sd* | 硬盘设备 |
/dev/sr* | 光驱设备 |
/dev/lp* | 并口设备 |
/dev/console | 系统控制台 |
/dev/tty* | 虚拟终端设备 |
/dev/pts/* | 伪终端设备 |
/dev/ppp* | ppp设备 |
/dev/null | 空设备 |
/dev/zero | 零(ASCII)设备 |
/dev/urandom | 随机字符设备 |
file [选项] <文件名>…
stat [选项] <文件名>…
ls -lt
)ls -lc
)ls -lu
)ls
显示文件和目录列表tree
显示目录树cd
切换目录pwd
显示当前工作目录mkdir
创建目录rmdir
删除空目录/
)开头~
或 ~username
/
)开头./
可省略)touch
生成一个空文件或更改文件的时间
-d 时间描述字符串
-t [[CC]YY]MMDDhhmm[.ss]
-r FILE
ln
建立链接文件
-s
创建符号连接cp
复制文件或目录
mv
移动文件或目录、文件或目录改名
rm
删除文件或目录
-r
- 递归-i
- 删除/覆盖 确认提示-f
- 强制 删除/覆盖 任何已存在的目标文件-b
- 为每个已存在的目标文件创建备份
cat
、nl
tac
、rev
less
、more
head
和 tail
cut
grep
-i
不区分大小写搜索–o
仅显示匹配内容–n
显示匹配的行号–c
显示匹配的行数–v
显示不包含模式的行-r
对目录进行递归搜索--color=auto
对匹配内容高亮显示-X
在显示每行搜索匹配时包括匹配文本前后的 X 行上下文-AX
在显示每项搜索匹配时包括匹配文本后的 X 行上下文-BX
在显示每行搜索匹配时包括匹配文本前的 X 行上下文-l
返回目录中包含字符串的文件名-L
返回目录中不包含字符串的文件名
grep
– 支持基本正则表达式(BRE)的模式匹配egrep
– 支持扩展正则表达式(ERE)的模式匹配fgrep
– 不支持任何正则表达式(RE)的模式匹配,仅支持字符串匹配,速度快
正则表达式的元字符:代表特殊含义
[abc]
, [^abc]
[[:upper:]]
, [^[:upper:]]
\w
代表 [_[:alnum:]]
\W
代表 [^_[:alnum:]]
?
匹配其前面的字符 0或1 次;即前面的字符是可选的,且最多匹配 1 次*
匹配前面的字符任意次(0或多次),使用贪婪模式匹配+
匹配前面的字符至少 1 次,使用贪婪模式匹配{n}
匹配前面的字符 n 次{n,}
匹配前面的字符至少 n 次,使用贪婪模式匹配{,m}
匹配前面的字符至多 m 次,(GNU 扩展).{n,m}
匹配前面的字符 n 到 m 次^
代表行首$
代表行尾\<
代表单词前的空格或其他标点符号\>
代表单词后的空格或其他标点符号\b
代表单词边界上(前/后)的空格或其他标点符号|
匹配多个RE之中的任何一个,实现或逻辑()
()
括起来的内容视作一个子RE,并从1开始顺序编号\n
(n为数字)可以引用已经通过第n个子RE匹配的内容
egrep '^(\w+).*\1' /etc/passwd
egrep '^(\w+)\b.*\1' /etc/passwd
正则表达式的类型
- 扩展正则表达式(ERE):
?
,+
,{
,|
,(
,)
- 适用的程序工具:
egrep
,sed -r
,awk
- 基本正则表达式(BRE):
\?
,\+
,\{
,\|
,\(
,\)
- 适用的程序工具:
grep
,sed
参考
man 7 regex
和man grep
?
(GLOB)=.
(RE)*
(GLOB)=.*
(RE)
-d
指定区分列的定界符(默认为TAB)-f
指定要显示的列-c
按字符切割wc
cat
,paste
diff
sort
sort -u
、 uniq
sort -R
、 shuf
tr
、 sed
fmt
、pr
、column
、fold
iconv
、enca
、convmv
-l
只显示文本的行数-w
只显示文本的单词数-c
只显示文本的字符数-L
只显示文本中最长一行的字符数cat file1 file2 > newfile
paste file1 file2 > newfile
$ diff foo.conf-broken foo.conf-works
5c5
< use_widgets = no
----
> use_widgets = yes
diff -r dir1 dir2
shuf 的常用选项
-n N
: 取 N 行-r
: 允许重复
随机值的获取
- 使用环境变量:
$RANDOM
- 使用UNIX纪元时间:
date +%s
- 使用 shuf:
shuf -i 1-65535 -n1
- 使用随机设备:
/dev/urandom
st01 Syu LeLJpG9KTU famale 28 13342675170
st02 Ohn N30uLpQYh1 famale 19 13332881942
st03 Rmo fZZHqVMfae famale 25 13347745308
st04 Mju CioZLy4Pt0 male 22 13459810354
st05 Biu aAyFvdSeTu male 22 13673659969
st06 Psk EGaJ5OLLzU male 27 13988407444
st07 Tln JPNxVoRUmr male 18 13770716174
st08 Ptu ve39zRTmiL male 21 13823448278
st09 Xaw jW9gIOf1xr famale 29 13195204321
st10 Ibo 5oskpYfdeY famale 28 13716142384
st11 Qbx WKH38Remu8 famale 18 13988542041
st12 Bdj EhTujFPuaV famale 28 13364446233
st13 Vel i5BAGUvFGL male 21 13557400946
st14 Gdb xOUc2ArRvd male 19 13657805803
st15 Nzn sRcLxaAGMJ famale 30 13105101475
st16 Jka RFNSBwG8P8 famale 18 13807347024
st17 Mmt GbP1yCXdKA male 20 13253259923
st18 Hli P4N6MZFhAR male 18 13282951065
st19 But GK3Ckrduil famale 18 13747153535
st20 Nta laYnn9puAO famale 24 13935185913
68.39.177.6 - - [08/Aug/2016:02:00:46 +0800]
225.189.211.29 - - [18/Aug/2016:17:11:31 +0800]
50.155.240.250 - - [30/Jul/2016:01:36:16 +0800]
121.226.58.74 - - [28/Jan/2017:14:47:45 +0800]
107.17.243.35 - - [19/Aug/2016:11:56:29 +0800]
LANG=C date +'%d/%h/%Y:%T %z'
-n
按数字排序-V
按版本号排序-M
按月份排序, (unknown) < ‘JAN’ < … < ‘DEC’-f
忽略字符串中的字符大小写-i
忽略所有非打印字符-b
忽略前导空格或制表符-u
删除输出中的重复行-r
执行逆序排序(默认为升序)-t c
使用 c 做为字段界定符-k X
按照第 X 字段到行末进行排序-k X,X
按照第 X 字段进行排序-k X.m,X.n
按照第 X 字段的第 m~n 个字符进行排序
-k
选项可以使用多次,依次认为第 N 个排序关键字
sort -u
:从输入中删除重复行uniq
:从输入中删除重复的前后连续的行
-c
选项来计数发生次数tr
sed
-i
选项:改变源文件-i.bak
选项:改变源文件,并备份改变之前的文件压缩
$ tr -s ’ \n’ < filename.txt
替换
$ tr ‘a-z’ ‘A-Z’ < lowercase.txt
$ tr ‘[:blank:]’ ‘[#]’ < filename.txt
$ tr -s ‘[:blank:]’ '[#]’ < filename.txt # 替换同时进行压缩
删除
$ tr -d [:punct:] < filename.txt
对被操作字符集(SET1)使用补集
$ tr -c ‘[:print:][:cntrl:]’ '[?]’ < filename.txt
$ tr -dc [:alnum:] < filename.txt
$ tr -sc [:alpha:] [\n] < filename.txt
sed [选项] [-e] cmd1 [[-e cmd2] ... [-e cmdn]] [input-file]...
sed [选项] cmd1[;cmd2; ...; cmdn] [input-file]...
-r
:使用扩展正则表达式进行模式匹配-i
:直接对输入文件进行sed的编辑命令操作's/old/new/'
,'s/old/new/g'
's#oldpath#newpath#'
,'s#oldpath#newpath#g'
N
d
a\
i\
c\
'm s/old/new/'
- 对第 m 行执行编辑命令'$ s/old/new/'
- 对最后一行执行编辑命令'm,n s/old/new/'
- 对第 m 到 n 行执行编辑命令'm,+n s/old/new/'
- 对第 m 到 m+n 行执行编辑命令'm~n s/old/new/'
- 对第 m 及所有 步长为 n 的行执行编辑命令'/RE/ s/old/new/'
- 对匹配RE的行执行编辑命令'/RE1/,/RE2/ s/old/new/'
- 对从匹配RE1的行到匹配RE2的行执行编辑命令'm,/RE/ s/old/new/'
- 对从第 m 行到匹配RE的行执行编辑命令'/RE/,n s/old/new/'
- 对从匹配RE的行到第 n 行执行编辑命令!
用于表示对地址范围取反参考
- https://www.gnu.org/software/sed/manual/sed.html
- SED 简明教程
awk 命令的一般形式为:
awk 'BEGIN {actions}
pattern1 {actions}
......
patternN {actions}
END {actions}' input-file
其中:
awk 的执行过程如下:
awk常用的内置变量:
参考
- https://www.gnu.org/software/gawk/manual/gawk.html
- AWK 简明教程
awk '/^[U/]/' /etc/fstab
awk '/^[U/]/ {print $1,$3}' /etc/fstab
awk '/^[U/]/ {print $1 "\t" $3}' /etc/fstab
awk '$2=="/" {print $1,$3}' /etc/fstab
awk '$2=="/",/swap/ {print $1,$3}' /etc/fstab
awk '/root/,/swap/ {print $1,$3}' /etc/fstab
awk '$2=="/" || $3=="swap" {print $1,$3}' /etc/fstab
awk '/root/,NR==8 {print $1,$3}' /etc/fstab
awk 'NR%2==1 {print $1,$3}' /etc/fstab
awk 'NR%2==1 && /^[^# ]/ {print $1,$3}' /etc/fstab
awk -F':' '{print $1,$3}' /etc/passwd
awk -F':' '$3>=1000' /etc/passwd
awk -F':' '$3>=1000 {print $1,$3}' /etc/passwd
ip a s enp0s3|grep 'inet '| awk -F '[ /]+' '{print $3}'
ip a|grep '^\w' | awk -F '[ :]' '!/lo/{print $3}'
ls -l|grep -v ^d|awk 'BEGIN {size=0} {size+=$5} END{print "[end]size is", size}'
netstat -nt| awk '{++S[$NF]} END {for(a in S) print a, S[a]}'
ss -nt|awk '{++S[$1]} END {for(i in S) print i "\t" S[i]}'
TCP连接的11种状态变迁
iconv
iconv -f GBK -t UTF-8 inputfile -o outputfile
enconv
和 enca
enconv -L zh_CN -x UTF-8 filename
enca -L zh_CN -x UTF-8 filename
enca -L zh_CN -x utf-8 *
convmv
convmv -f GBK -t UTF-8 --notest *.mp3
- 提示: EPEL 仓库中有 enca 和 convmv 的 RPM 包
yum -y --enablerepo=epel install enca convmv
nano
编辑器
vim
:高级的、功能完整的编辑器emacs
:GNU 项目之一gedit
:一个简单的图形化编辑器gvim
:vim 编辑器的图形化版本Esc
会退出当前的模式EscEsc
总是会返回到普通模式[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I40qcH75-1689554001073)(/assets/figs/vim.png)]
vim
vim +n <文件名>
vim + <文件名>
vim -r <文件名>
i
在光标处开始插入模式A
在行尾后补I
在行首插入o
插入一个新行(在下面)O
插入一个新行(在上面):
进入 ex模式
:w
把文件写入磁盘(保存):wq
写入后退出:q
不保存而退出,所有改变都会消失:q!
强制不保存退出:x
退出,如果文件更改则保存sed
命令中的搜索/替换:1,5s/cat/dog/
:%s/cat/dog/g
像 less
命令一样的搜索
删除字符
x
: 删除光标处的字符nx
: 删除光标处起始的n个字符替换字符
rC
替换光标所在处的字符为CnrC
替换光标所在处的n个字符为C删除行并存入缓冲区
dd
:删除光标所在的整行ndd
:删除从光标所在位置开始的n行复制行并存入缓冲区
yy
:复制光标所在的整行nyy
:复制从光标所在位置开始的n行粘贴
p
: 粘贴到当前光标所在行的下方P
: 粘贴到当前光标所在行的上方u
会撤销最近的改变(undo)U
会撤销自光标被移到该行后对当前行进行的所有改变Ctrl-r
会重做上一个被“撤销”的改变
.
重复最近一次编辑(redo)
:set
或 :set all
~./vimrc
:set number
, 简写为 set nu
:set nonumber
, 简写为 set nonu
:set sm
:set nosm
:set autoindent
, 简写为 :set ai
:set noautoindent
, 简写为 :set noai
:set hlsearch
:set nohlsearch
:set syntax on
:set syntax off
:set ignorecase
, 简写为 set ic
:set noignorecase
, 简写为set noic
:set tabstop=4
:set textwith=65
:help option-list
来获取完整列表
- vi/vim 的内建帮助
:help
:help topic
- 使用
:q
退出帮助vimtutor
命令
\t ↩︎