strings 命令 & Linux-xargs命令
Linux 命令
https://www.runoob.com/linux/linux-comm-find.html
__________________________________________________________________________________________
linux如何查看可执行文件 .so文件的编译版本
命令:
strings xxx.so |grep GLIB
strings xxx.so |grep GCC
__________________________________________________________________________________________
Linux查看动态库.so的依赖库
https://blog.csdn.net/feikudai8460/article/details/113756716
查看动态库依赖3种方法
(1) $ ldd /bin/grep
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/libc.so.6 (0xb7eca000)
/lib/ld-linux.so.2 (0xb801e000)
(2) $ LD_TRACE_LOADED_OBJECTS=1 /bin/grep
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/libc.so.6 (0xb7e30000)
/lib/ld-linux.so.2 (0xb7f84000)
(3) $ LD_TRACE_LOADED_OBJECTS=1 /lib/ld-linux.so.2 /bin/grep
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/libc.so.6 (0xb7f7c000)
/lib/ld-linux.so.2 (0xb80d0000)
也可以通过readelf 查看:
使用readelf,废话不多少,直接上例子:
$ readelf -d /bin/ls | grep "Shared library"
0x0000000000000001 (NEEDED) Shared library: [libselinux.so.1]
0x0000000000000001 (NEEDED) Shared library: [librt.so.1]
0x0000000000000001 (NEEDED) Shared library: [libacl.so.1]
动态链接器是操作系统的一部分,负责按照可执行程序运行时的需要装入与链接共享库。装入是指把共享库在永久存储上的内容复制到内存,链接是指填充跳转表(jump table)与重定位指针。
其中:
ld.so是Unix或类Unix系统上的动态链接器,常见的有两个变体:
ld.so针对a.out格式的二进制可执行文件
ld-linux.so针对ELF格式的二进制可执行文件
___________________________________________________________________________________________
linux中的strings命令
https://blog.csdn.net/sinat_31608641/article/details/123833556
一、介绍
strings命令在对象文件或二进制文件中查找可打印的字符串。字符串可打印字符的任意序列,以换行符或空字符结束。 strings命令对识别随机对象文件很有用。
常用参数:
-a 扫描整个文件而不是只扫描目标文件初始化和装载段
-f 在显示字符串前先显示文件名
-t 输出字符的位置,基于八进制,十进制或者十六进制
二、实例
确认代码编是否译到库中去了
[taoge@localhost test]$ strings a.out | grep xxx
xxx, %d, %d, %d
[taoge@localhost learn_c]$ strings -f * | grep "my dear"
a.out: oh, my dear, c is %d
[taoge@localhost test]$ find -name "*" | xargs strings -f | grep xxx
./test.c: printf("xxx, %d, %d, %d\n", a, b, c);
./a.out: xxx, %d, %d, %d
列出ls中所有的ASCII文本:
[root@linux265 ~]# strings /bin/ls
查找ls中包含libc的字符串,不区分大小写:
[root@linux265 ~]# strings /bin/ls | grep -i libc
在显示字符串前先显示文件名:
[root@linux265 ~]# strings -f /bin/ls | grep libc
输出字符的位置:
[root@linux265 ~]# strings -t /bin/ls | grep libc
参考:
strings命令 - Linux命令大全 | linux教程
https://www.jb51.net/article/100241.htm
再次唠叨linux中的strings命令_涛歌依旧的博客-CSDN博客_linux strings
———————————————————————————————————————————
*********************Linux-xargs命令*********************************************
概述
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。
它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。
xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs的默认命令是echo,空格是默认定界符。
这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。
xargs是构建单行命令的重要组件之一。
语法
Usage: xargs [-0prtx] [--interactive] [--null] [-d|--delimiter=delim]
[-E eof-str] [-e[eof-str]] [--eof[=eof-str]]
[-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]]
[-I replace-str] [-i[replace-str]] [--replace[=replace-str]]
[-n max-args] [--max-args=max-args]
[-s max-chars] [--max-chars=max-chars]
[-P max-procs] [--max-procs=max-procs] [--show-limits]
[--verbose] [--exit] [--no-run-if-empty] [--arg-file=file]
[--version] [--help] [command [initial-arguments]]
Report bugs to <bug-findutils@gnu.org>
栗子
xargs用作替换工具,读取输入数据重新格式化后输出。
定义一个测试文件,内有多行文本数据:
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
多行输入单行输出
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
[root@entel2 ~]# cat xargs.txt |xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z
-n选项多行输出
a b c d e
f g h i j
k l m n o
p q r s t
u v w x y
z
[root@entel2 ~]#
-d选项可以自定义一个定界符:
name name name name
结合-n选项使用
name name
name name
读取stdin,将格式化后的参数传递给命令
假设一个命令为 xgj.sh 和一个保存参数的文件args.txt:
args.txt已经具备执行权限
#!/bin/bash
#打印所有的参数
echo $*
[root@entel2 test]# cat args.txt
aaa
bbb
ccc
xargs的一个选项-I,
使用-I指定一个替换字符串{},
这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:
XXX aaa YYY
XXX bbb YYY
XXX ccc YYY
复制所有图片文件到 /data/images 目录下:
xargs结合find使用
用rm 删除太多的文件时候,可能得到一个错误信息:
/bin/rm Argument list too long.
用xargs去避免这个问题:
xargs -0将\0作为定界符。
统计一个源代码目录中所有py文件的行数:
find - print 和 - print0的区别-print 在每一个输出后会添加一个回车换行符,而-print0则不会。
查找所有的jpg 文件,并且压缩它们:
xargs其他应用
假如你有一个文件包含了很多你希望下载的URL,你能够使用xargs下载所有链接:
子Shell(Subshells)
运行一个shell脚本时会启动另一个命令解释器.,就好像你的命令是在命令行提示下被解释的一样,类似于批处理文件里的一系列命令。
每个shell脚本有效地运行在父shell(parent shell)的一个子进程里。
这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程。
如果cmd2 是cd /,那么就会改变子Shell的工作目录,这种改变只是局限于子shell内部,cmd5则完全不知道工作目录发生的变化。
子shell是嵌在圆括号()内部的命令序列,子Shell内部定义的变量为局部变量。
子shell可用于为一组命令设定临时的环境变量:
COMMAND2
COMMAND3
( IFS=:
PATH=/bin
unset TERMINFO
set -C
shift 5
COMMAND4
COMMAND5
exit 3 # 只是从子shell退出。 )
# 父shell不受影响,变量值没有更改。
COMMAND6
COMMAND7