美文网首页
iOS高级强化--013:Shell常用命令

iOS高级强化--013:Shell常用命令

作者: 帅驼驼 | 来源:发表于2021-03-17 17:19 被阅读0次
    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<char, std::char_traits<char>, std::allocator<char> > >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命令

    cpcopy的缩写,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.ca2.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开头的单词的行。    
    \>:锚定单词的结束,如'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个字符,对应ownergroupothers3组,表示此文件在各组的读、写、执行权限

    因为Linux/Unix是多用户多任务系统,所以一个文件可能同时被许多人使用,所以我们一定要设好每个文件的权限():

    -rwxr-xr-x为例:rwx(Owner)r-x(Group)r-x(Other)

    –rwxr-xr-x转换成权限数字为755

    • rwx4+2+1=7
    • r-x4+1=5
    • r-x4+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命令

    相关文章

      网友评论

          本文标题:iOS高级强化--013:Shell常用命令

          本文链接:https://www.haomeiwen.com/subject/kzwscltx.html