linux常用命令

week 4 linux常用命令

部分来自<鸟哥的linux私房菜> 和< bash脚本编程>两本书.

find

选项

使用name选项:
文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。 可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。 不管当前路径是什么,如果想要在自己的根目录 HOME.log使 pathname  HOME目录。

 find ~ -name "*.log" -print  

用perm选项:

 find . -perm 755 -print

按照更改时间或访问时间等查找文件,希望在系统根目录下查找更改时间在5日以内的文件,可以用:

 find / -mtime -5 -print 

 find ./ -type f -mtime +365 -exec rm -f {} \; 删除1年前的文件

还有 group,user,type,size,depth等等

exec

$ find . -name *.gif -exec ls {} \;

-exec 参数中包含了真正有价值的操作。当查找到匹配搜索条件的文件时,-exec 参数定义了将对这些文件进行什么操作。该示例告诉计算机进行如下操作:
从当前文件夹开始往下搜索,紧跟在find 之后,使用点号 (.)。
定位所有名称以 .gif 结尾的文件(图形文件)。
列出所有查找到的文件,使用ls命令。

在exec中重导向;批量转码

 find . -name "*.h" -exec bash -c "iconv -f GBK -t UTF-8 {} > {}.tmp;mv -f {}.tmp {}" \;

find command match two or more files.

find /sys/ -type f \( -name bind -or -name unbind -or -name new_id \) -ls
#统计代码行数 ()
find . \( -name "*.java" -o -name "*.cpp" \) -exec cat {} \; |wc -l
find -type f -name '*.conf' -exec sed -Ei 's/foo/bar/' '{}' \; 批量替换配置中的关键字

xargs命令

不同进程.. exec 多进程
find . -name “*.py” | xargs ls {}

nm和ldd 命令 调试

对于每一个符号,nm列出其值(the symbol value),类型(the symbol type)和其名字(the symbol name)。如下例:

00000024 T cleanup_before_linux
00000018 T cpu_init
00000060 T dcache_disable
00000054 T dcache_enable
0000006c T dcache_status
00000000 T do_reset
0000003c T icache_disable
00000030 T icache_enable
00000048 T icache_status
上面的显示是使用nm cpu.o的输出,对于cleanup_before_linux这个符号来说,00000024是以16进制显示的其值,T为其类型,而cleanup_before_linux是其名字。可以看出,上面显示的cleanup_before_linux这个symbol的值实际上是该函数在text section中的偏移。但是,每个符号的值的具体含义依其类型而异。当然,对于每个符号的值,其类型、其值以及它们所属的section是密切相关的。

(符号 类型 说明 )

A
该符号的值是绝对的,在以后的链接过程中,不允许进行改变。这样的符号值,常常出现在中断向量表中,例如用符号来表示各个中断向量函数在中断向量表中的位置。

B
该符号的值出现在非初始化数据段(bss)中。例如,在一个文件中定义全局static int test。

C
该符号为common。common symbol是未初始话数据段。该符号没有包含于一个普通section中。只有在链接过程中才进行分配。符号的值表示该符号需要的字节数。例如在一个c文件中,定义int test,并且该符号在别的地方会被引用,则该符号类型即为C。否则其类型为B。

T
该符号位于代码区text section。

U
该符号在当前文件中是未定义的,即该符号的定义在别的文件中。例如,当前文件调用另一个文件中定义的函数,在这个被调用的函数在当前就是未定义的;但是在定义它的文件中类型是T。但是对于全局变量来说,在定义它的文件中,其符号类型为C,在使用它的文件中,其类型为U。


  • 该符号是a.out格式文件中的stabs symbol。

?
该符号类型没有定

其他工具

  • nm:列出目标文件中的符号。
  • objdump:显示目标文件中的详细信息。
  • readelf:显示关于 ELF 目标动态库的信息。
    arm-linux-objdump…

grep命令

linux grep命令详解

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
\# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
或
\# cat /etc/passwd | grep root 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

着色

ifconfig |grep -n --color=auto 'en0'

使用grep命令搜索源码

grep <搜索目录> -r --include=<filter file> -e <search string>

eg.

#grep ./* -r --include=*.h -e fb_ops

递归查找本目录下所有 .h文件中 fb_ops

grep -R --include=*.cpp --include=*.h --exclude=*.inl.h "string" 

正则

grep和正则表达式的配合应用

通配符是由shell处理的(不是由所涉及到命令语句处理的,其实我们在shell各个命令中也没有发现有这些通配符介绍), 它只会出现在 命令的“参数”里(它不用在 命令名称里, 也不用在 操作符上)。当shell在“参数”中遇到了通配符时,shell会将其当作路径或文件名去在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。总之,通配符 实际上就是一种shell实现的路径扩展功能。在 通配符被处理后, shell会先完成该命令的重组,然后再继续处理重组后的命令,直至执行该命令。

shell常见通配符:

字符含义实例
  • 匹配 0 或多个字符
a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。
?匹配任意一个字符a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。
[list]匹配 list 中的任意单一字符a[xyz]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。
[!list]匹配 除list 中的任意单一字符a[!0-9]b a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。
[c1-c2]匹配 c1-c2 中的任意单一字符如:[0-9] [a-z]
a[0-9]b0与9之间必须也只能有一个字符如a0b, a1b… a9b。
{string1,string2,…}匹配 sring1 或 string2 (或更多)其一字符串a{abc,xyz,123}b a与b之间只能是abc或xyz或123这三个字符串之一。

shell元字符(特殊字符 Meta)

shell 除了有通配符之外,由shell 负责预先先解析后,将处理结果传给命令行之外,shell还有一系列自己的其他特殊字符。

字符说明
IFS由 或 或 三者之一组成(我们常用 space )。
CR由 产生。
=设定变量。
$作变量或运算替换(请不要与 shell prompt 搞混了)。
>重导向 stdout。 *
<<重导向 stdin。 *
|命令管线。 *
&重导向 file descriptor ,或将命令置于背境执行。 *
( )将其内的命令置于 nested subshell 执行,或用于运算或命令替换。 *
{ }将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围。
;在前一个命令结束时,而忽略其返回值,继续执行下一个命令。 *
&&在前一个命令结束时,若返回值为 true,继续执行下一个命令。 *
||在前一个命令结束时,若返回值为 false,继续执行下一个命令。 *
!执行 history 列表中的命令。*
[chengmo@localhost ~/shell]$ 
ls \*.txt
ls:
无法访问 *.txt: 没有那个文件或目录
[chengmo@localhost ~/shell]$ 
ls '*.txt'
ls:
无法访问 *.txt: 没有那个文件或目录
[chengmo@localhost ~/shell]$ 
ls 'a.txt'
a.txt
[chengmo@localhost ~/shell]$ 
ls *.txt
a.txt b.txt

shell转义符

有时候,我们想让 通配符,或者元字符 变成普通字符,不需要使用它。那么这里我们就需要用到转义符了。 shell提供转义符有三种。

字符_说明
‘’(单引号)又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。
“”(双引号)又叫软转义,其内部只允许出现特定的shell 元字符:$用于参数代换 `用于命令代替
\(反斜杠)又叫转义,去除其后紧跟的元字符或通配符的特殊意义。

sed命令

ls -l /home | tee ~/homefile | more # 这个范例则是将 ls 癿数据存一份刡 ~/homefile ,同时屏幕也有输出讯息!


echo “please use your hand touch the screen”
hexdump /dev/event1


cp /usr/bin/{gawk,mawk}
cd usr/bin ;cp gawk mawk;cd -
link 命令行中大括号的几个意思.


{xxx,yyy,zzz…} 大括号扩展,如: 1 cat {file1,file2,file3} > combined_file 2 # 把file1,file2,file3连接在一起,并且重定向到combined_file中.


opengl vtk boost linux编程 正则表达式

正则表达式

使用grep命令搜索源码
grep <搜索目录> -r –include= -e
eg.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值