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

7万+

被折叠的 条评论
为什么被折叠?



