ag命令
ag
:超快的文件搜索工具,与grep
相比,搜索速度更快。
语法:
ag [可选项] [匹配模式] [路径]
- 由于模式可以是一个正则表达式,使得搜索功能极为强大
示例:
ag -A 3 [匹配模式]
ag
会遍历当前目录下的文本文件,在每个文件的每一行中查找这种模式,把文件名、行号和匹配的内容高亮显示出来,同时显示了匹配行数的后三行。-C/--context [LINES]
,输出匹配内容前后[LINES]
行内容(默认两行)在某个指定的目录下搜索,或只搜索某个文件的内容,在搜索的字符串后面加上路径
ag [匹配模式] [路径]
ag -G
还提供了强大的过滤功能,使搜索在特定的文件中进行。例如:只搜索.m
文件ag -G ".+\.m" [匹配模式] [路径]
ag
根据输入智能判定大小写的匹配方式。如果查询的字符串只含有小写字符,使用大小写不敏感的匹配方式;如果出现了大写字符,就改为大小写敏感的匹配方式。如果想要直接使用不敏感的匹配方式,可以使用ag -i
选项另一个很有用的选项是
ag -w
的全词匹配,它要求匹配的字符串前后都需要有合适的分隔符如果想要搜索不满足特定模式的行,用
ag -v
对搜索结果取反如果只关心有哪些文件匹配(而不在意文件的内容),可以用
ag -l
显示有匹配的文件名,类似的ag -L
显示没有任何匹配的文件名
参考文档:ag命令
c++filt命令
c++filt
命令可用于解析C++
和Java
中被修饰的符号,比如变量与函数名称。
语法:
c++filt [-_|--strip-underscore] [-n|--no-strip-underscore] [-p|--no-params] [-t|--types] [-i|--no-verbose] [-s format|--format=format] [--help] [--version] [symbol...]
- 如果没有给出符号参数
[symbol…]
,c++filt
将从标准输入中读取符号名称
示例:
解析编译器
g++
修饰的函数名称c++filt -s gnu-v3 _Z5printRKSs ------------------------- print(std::basic_string
, std::allocator > >const&) 解析编译器
g++
修饰的函数名称,但不显示函数参数类型c++filt -p _Z5printRKSs ------------------------- print
解析编译器
g++
修饰的变量名称c++filt _ZL5dTest ------------------------- dTest
参考文档:c++filt命令
tree命令
tree
命令以树状图列出目录的内容。
语法:
tree [选项] [目录]
- 执行
tree
指令,它会列出指定目录下的所有文件,包括子目录里的文件
示例:
列出目录
/private/
第一级文件名tree /private/ -L 1
忽略文件夹
tree -I node_modules # 忽略当前目录文件夹node_modules tree -P node_modules # 列出当前目录文件夹node_modules的目录结构 tree -P node_modules -L 2 # 显示目录node_modules两层的目录树结构 tree -L 2 > /home/www/tree.txt # 当前目录结果存到 tree.txt 文件中
忽略多个文件夹
tree -I 'node_modules|icon|font' -L 2
非树状结构列出目录
/private/
下的所有文件tree -if /private/
参考文档:tree命令
cp命令
cp
是copy
的缩写,cp
命令用于复制文件/文件夹。
语法:
cp [选项] [源目录/源文件] [目标目录/目标文件]
示例:
复制一个文件
cp test.txt test1.txt
复制多个文件
cp test.txt test1.txt test
cp
源文件1,源文件2至目标目录复制一个目录
cp -r test test1
复制多个目录
cp -r test test1 test2
cp -r
源目录1,源目录2至目标目录
参数:
-a, --archive 等于-dR --preserve=all--backup[=CONTROL 为每个已存在的目标文件创建备份 -b 类似--backup 但不接受参数--copy-contents 在递归处理是复制特殊文件内容 -d 等于--no-dereference --preserve=links -f, --force 如果目标文件无法打开则将其移除并重试(当 -n 选项存在时则不需再选此项) -i, --interactive 覆盖前询问(使前面的 -n 选项失效) -H 跟随源文件中的命令行符号链接 -l, --link 链接文件而不复制 -L, --dereference 总是跟随符号链接 -n, --no-clobber 不要覆盖已存在的文件(使前面的 -i 选项失效) -P, --no-dereference 不跟随源文件中的符号链接 -p 等于--preserve=模式,所有权,时间戳--preserve[=属性列表 保持指定的属性 (默认:模式,所有权,时间戳),如果可能保持附加属性:环境、链接、xattr 等 -R, -r, --recursive 复制目录及目录内的所有项目 -t --target-directory=DIRECTORY 将所有源文件拷贝到目标目录 -T, --no-target-directory 目标为文件而不是文件夹
参考文档:cp命令
ln命令
用来为文件创建链接。
所谓的链接(
link
),可以将其视为档案的别名,而链接又可分为两种:硬链接(
hard link
),意思是一个档案可以有多个名称
- 硬链接,以文件副本的形式存在。但不占用实际空间
- 不允许给目录创建硬链接
- 硬链接只有在同一个文件系统中才能创建
软链接(
symbolic link
),意思是产生一个特殊的档案,该档案的内容是指向另一个档案的位置
- 软链接,以路径的形式存在。类似于快捷方式
- 软链接可以跨文件系统,硬链接不可以
- 软链接可以对一个不存在的文件名进行链接
- 软链接可以对目录进行链接
语法:
ln [选项]...[-T] [目标] [链接名]
ln [选项]...[目标]
ln [选项]...[目标]...[目录]
ln [选项]... -t [目录] [目标]...
示例:
将目录
/usr/mengqc/mub1
下的文件m2.c
,链接到目录/usr/liu
下的文件a2.c
ln /mub1/m2.c /usr/liu/a2.c
- 在执行
ln
命令之前,目录/usr/liu
中不存在a2.c
文件。执行ln
之后,在/usr/liu
目录中才有a2.c
这一项,表明m2.c
和a2.c
链接起来(二者在物理上是同一文件),利用ls -l
命令可以看到链接数的变化在目录
/usr/liu
下建立一个符号链接文件abc
,使它指向目录/usr/mengqc/mub1
ln -s /usr/mengqc/mub1 /usr/liu/abc
- 执行该命令后,
/usr/mengqc/mub1
代表的路径将存放在名为/usr/liu/abc
的文件中
参考文档:ln命令
sed命令
通常要进行文本处理,sed
是一个非常强大的文本处理命令工具。 配合正则表达式可以进行文本搜索、替换、插入、删除等操作。处理时,把当前处理的行存储在临时缓冲区中,称为模式空间(pattern space
),接着用sed
命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变。
语法:
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
参考文档:sed命令
grep命令
grep
命令全称是Global Regular Expression Print
,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
规则表达式:
^:锚定行的开始 如:'^grep'匹配所有以grep开头的行。 $:锚定行的结束 如:'grep$' 匹配所有以grep结尾的行。 .:匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。 *:匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*:一起用代表任意字符。 []:匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。 [^]:匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。 \(..\):标记匹配字符,如'\(love\)',love被标记为1。 \<:锚定单词的开始,如:'\
:锚定单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。 x\{m\}:重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。 x\{m,\}:重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。 x\{m,n\}:重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。 \w:匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。 \W:\w的反置形式,匹配一个或多个非单词字符,如点号句号等。 \b:单词锁定符,如: '\bgrep\b'只匹配grep。
参考文档:grep命令
ls命令
ls
命令用来显示目标列表。
语法:
ls [选项] [文件名...] [-1abcdfgiklmnopqrstuxABCDFGLNQRSUX] [-w cols] [-T cols] [-I pattern] [--full-time] [--format={long,verbose,commas,across,vertical,single-col‐umn}] [--sort={none,time,size,extension}] [--time={atime,access,use,ctime,status}] [--color[={none,auto,always}]] [--help] [--version] [--]
示例:
ls -l ------------------------- total 32 drwxr-xr-x 6 zang staff 192 3 15 18:13 Common Symbol -rwxr-xr-x@ 1 zang staff 2122 3 17 14:43 xcode_run_cmd.sh
- 第一个栏位,表示文件的属性。基本上分为三个属性:可读(
r
),可写(w
),可执行(x
)- 第二个栏位,表示文件个数。如果是文件的话,那这个数目自然是
1
了,如果是目录的话,那它的数目就是该目录中的文件个数了- 第三个栏位,表示该文件或目录的拥有者。若使用者目前处于自己的
Home
,那这一栏大概都是它的账号名称- 第四个栏位,表示所属的组(
group
)。每一个使用者都可以拥有一个以上的组,不过大部分的使用者应该都只属于一个组,只有当[系统管理员]
希望给予某使用者特殊权限时,才可能会给他另一个组- 第五栏位,表示文件大小。文件大小用
byte
来表示,而空目录一般都是1024byte
,当然可以用其它参数使文件显示的单位不同,如使用ls –k
就是用kb
显示一个文件的大小单位,不过一般我们还是以byte
为主- 第六个栏位,表示最后一次修改时间。以
月,日,时间
的格式表示,如Aug 15 5:46
表示8月15日早上5:46分
- 第七个栏位,表示文件名。我们可以用
ls –a
显示隐藏的文件名
其中第一个栏位:
分为三个属性:可读(
r
),可写(w
),可执行(x
)数字表示:
1
表示可执行权限,2
表示可写权限,4
表示可读权限第一个字母表示文件类型:
-
:普通文件d
:目录,是dirtectory
的缩写l
:符号链接b
:块设备文件c
:字符设备文件紧接着的
3*3
个字符,对应owner
、group
、others
分3组
,表示此文件在各组的读、写、执行权限因为
Linux/Unix
是多用户多任务系统,所以一个文件可能同时被许多人使用,所以我们一定要设好每个文件的权限():以
-rwxr-xr-x
为例:rwx(Owner)r-x(Group)r-x(Other)
–rwxr-xr-x
转换成权限数字为755
rwx
即4+2+1=7
r-x
即4+1=5
r-x
即4+1=5
参考文档:ls命令
stat命令
stat
命令用于显示文件或文件系统的详细信息。在显示文件信息时,比ls
命令更加详细。
语法:
stat [选项] [参数]
选项:
-L, --dereference:跟随符号链接解析原文件而非符号链接; -f, --file-system:显示文件所在文件系统信息而非文件信息; -c, --format=FORMAT:以指定格式输出,而非默认格式; --printf=FORMAT:以指定格式输出,而非默认格式。与--format作用类似,但可以解释反斜杠转义字符,比如换行符\n; -t, --terse:简洁模式输出,只显示摘要信息; --help:显示帮助信息; --version:显示版本信息。
显示文件信息可用格式控制符如下:
%a:以八进制显示访问权限 %A:以可读形式显示访问权限 %b:显示占有块数 %B:显示每一块占有的字节数 %C:SELinux security context string %d:十进制显示文件所在设备号 %D:十六进制显示文件所在设备号 %f:十六进制显示文件类型 %F:文件类型。Linux下文件类型主要分为普通文件、目录、字符设备文件、块设备文件、符号链接文件、套接字等 %g:文件所有者组ID %G:文件所有者组名称 %h:文件硬链接数 %i:inode号 %m:文件所在磁盘分区挂载点,比如/data %n:文件名称 %N:单引号括起来的文件名称,如果是软链接,则同时显示指向的文件名称 %o:optimal I/O transfer size hint %s:实际文件大小,单位字节 %t:major device type in hex, for character/block device special files %T:minor device type in hex, for character/block device special files %u:所有者用户ID %U:所有者用户名称 %w:文件创建时间,输出-表示无法得知 %W:文件创建时间,输出Unix时间戳,0表示无法得知 %x:可读形式输出最后访问时间atime %X:Unix时间戳输出最后访问时间atime %y:可读形式输出最后修改时间mtime %Y:Unix时间戳输出后修改时间mtime %z:可读形式输出最后状态改变时间ctime %Z:Unix时间戳输出最后状态改变时间ctime
显示文件系统信息可用格式控制符有:
%a:非超级用户可使用的自由block数 %b:文件系统总block数 %c:文件系统总文件节点数 %d:可用文件节点数 %f:可用文件block数 %i:十六进制文件系统ID %l:最大文件名称长度 %n:文件名称 %s:一个块的大小,单位字节(for faster transfers) %S:一个块的基本大小,单位字节(用于统计block的数量) %t:十六进制输出文件系统类型 %T:可读形式输出文件系统类型
参考文档:stat命令