linux基本命令、脚本攻略使用(find ,grep, gdb调试等其他shell相关命令 )(从《linux shell 脚本攻略 》中学习过程)

1、find命令既可以查找文件名字也可以查找文件夹名字。只是不能查找一个路径名字例如可以查找find . -name  sys这个目录或者find . -name time.h这个文件,但是不能find .  -name sys/time.h

2、echo ‘main(){}’ | gcc   -E  -v  -

显示gcc的编译路径。v是小写。

3、jobs命令是显示后台运行进程,让运行到后台的方法是在命令后面加上&  而需要将后台变到前台执行为:fg %n其中要加上%而n是jobs查看到的第一列内容。这个n不是pid号码。是jobs序列。

bg %n是表明将后台挂起,但是已经停止的进程给重新在后台run要想到前台,用fg %n 

该分析正确,当需要输入密码的时候,后台运行代码就停止,使用bg %n将其激活,然后fg %n就显性提示需要输入密码。

4、find  路径 -lname  文件名     这个是找对应的软链接数。

5、grep -r  字符   路径/*   表示对某个路径下的所有文件进行搜索看是否有  自己填写的    字符  存在。 注意对于字符使用单引号,例如grep -r '!!!!!' *这种方式。

6、如果搜索的时候想忽略子目录,使用grep -d skip          注意,这个操作不能指定目录进行跳过,只能自己对所有的子目录进行跳过。

还有,默认情况下区分大小写,加上-i就不区分大小写了。即 grep -r xx -i   ./

7、grep -w pattern files只匹配整个单词不是字符串一部分。 目前该命令没有成功。!!!

8、对于后缀是.tgz的解压方式。http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28811392&id=3598316

主要都是使用tar程序工具,一般参数是 -c  x  t   这三个只能存在一个,不可能三个都存在的。还有:z j v f (其中f后不能再加参数了,直接加文件名称。)

而对于.tgz是:

 

a)   将tgz文件解压到指定目录

tar   zxvf    test.tgz  -C  指定目录

比如将/source/kernel.tgz解压到  /source/linux-2.6.29 目录

tar  zxvf  /source/kernel.tgz  -C /source/ linux-2.6.29

b)   将指定目录压缩到指定文件

比如将linux-2.6.29 目录压缩到  kernel.tgz

 tar czvf   kernel.tgz   linux-2.6.29

 

 

9、du使用方法中 -h  其中-d是显示目录层数。-d 1为一层即可。du -h -d 1

10、fuser用法fuser -m -v /dev/xvda1    该命令是显示哪些进程在使用磁盘设备的。

11、rm删除文件后怎么恢复,注意至少ext3文件类型的删除是真删除,只能用debugfs来恢复ext2类型的。

12、gdb调试中,显示数组内容,p *数组头@个数值。 例如p *a@20就是显示20个a数组的值。

13、对于拷贝一个文件成n份到同一个目录中,脚本怎么写。

其实脚本难的不是语法,而是首先分清楚使用的是bash还是dash因为#!/bin/sh这个用ll /bin/sh可以看到是个链接文件,链接在bash或者dash中,那么更改这个设置按道理直接使用 ln -s  旧的文件 新的结果

但是这个是操作系统的启动设置,不能临时更改就算结束了,而是应该系统方式更改。为:

sudo dpkg-reconfigure dash (注意后面是dash,而切换回dash的时候,同样使用sudo dpkg-reconfigure dash)然后提示因为更高效率因此改为bash.选择就显示否即可,然后就更改为bash了。所以#!/bin/sh就知道其指向是/bin/bash还是/bin/dash。可以直接更改为#!/bin/bash 但是即使更改了,也不能使用sh xxx.sh来运行,因为sh就是制定了运行时使用/bin/sh这个命令。应该将xxx.sh权限设置为可执行,然后直接./xxx.sh这样执行,此时遇到第一句话/bin/bash才会按照bash来解释运行。

唯一需要注意的是,想查看/bin/sh的指向,使用ls -l /bin/sh即可显示其链接特性而 ls -L 没有这种用法。

14、对于只截取设定的文件位置,可以分为:前100行,后100行,中间100行, 从第几行开始到结束。分别是:

head -n 100 文件名>目的名字     tail -n 100 文件名>目的名字    或者head -100直接数字都是可用的。

sed -n '100,200p' wenjianming> mudiming是成功的,可以。但是从第几行到结束是没有直接方法的,只能:wc -l wenjianming这样显示有多少行,然后自己用sed -n 'xx, xxp'文件名    这种方法到最后即可。

15、bash 和dash的语法区别。

目前见到的区别是bash有let 而dash没有let.

并且bash中[]方括号是运算符,因此使用时候应该要与其他的有空格间隔开来,不然语法错误,而等号=却不能与运算值之间有空格。

 

 

16、对于模块无法卸载的,确实有时候可以看到lsmod发现对应的驱动是有引用的,引用值为1,所以总不能每次都是自己重启电脑吧,最好是从驱动模块代码中找到原因,然后自己专门写个强制清除代码来将计数值清除,然后再次rmmod就可以执行了,当然也有其他原因不可以rmmod,此时链接给出了很好的方法。

https://blog.csdn.net/gatieme/article/details/75108154

学习,不知道还有时间学习这个没有了?先放着,知道有代码可以解决吧。

 

17、gdb重新复习

b main 添加break

info b  是查看已有的break

step是s

next 是n

delete breakpoints 1是删除第一个断点。  不能使用b这个缩写。

print  或者p表示打印变量值。

return使当前进入的函数剩下的不执行就跳出。finish是当前函数执行后跳出。

加入打印为:set logging file xxx ;   set logging on ; set logging off 

保存断点:save breakpoint xxxfilename;   下次使用时:gdb xxx -X    breakpointfilename

x表示examine是查看指定地址的内容。x/ n格式字节数 地址;  x/3uh 地址;表示3个长度,以10进制无符号,h表示双字节。

而还有一种跳出循环的就是使用jump  命令,指定行就行了,jump 154  就是跳到154行。

 

printf   "%x"  数值。 中间是双引号,无括号即可。

 

gdb调试的时候,注意,总是添加了打印信息以后需要将源文档再次编译!!!!

并且有时候为了找到问题出错的位置,肯定是用gdb往里面追,这样要比打印找错误要更清晰,但是对于整个流程分析由于复杂的流程反复执行因此分析的时候,打印要比gdb快。所以找错误用gdb,分析用打印。

而找的例如segfault错误,那么按照链接https://blog.csdn.net/andy710660541/article/details/50464553

这个来学习,先打出backtrace,然后看自己想进入第几条就再敲入 frame 条数。

然后再利用print看是哪个信号出错的。

18、对于在终端打开pdf文件使用evince 命令,evince xx.pdf   其实evince就是linux的pdf软件。

19、对于文档型的pdf,先使用linux的自带的pdftotext软件,pdftotext  xxx.pdf  就转换为同名的xxx.txt

并且在其中grep -r -i 搜索汉字时候,同样有效!!!。

20、注意,bunzip有,另外zip类型是unzip, 而gz类型的是gunzip,gzip。 bz2类型的是bunzip2, bzip2两种即可。

 

 

linux shell 脚本攻略开始。

对于随便一个变量,在linux的终端,怎么定义。因为自己要定义一个变量来表明要拷贝的文件名称,当然会除去某一个文件名称。

普通的给变量命名是varnme = "给的内容。"

1、而当想将一个命令的结果赋值给varname说是两个方法,一个是:反引号,一个是$()这种用法。但是   自己试验的时候,总是出错。并不是这样,而是自己需要格式正确格式很重要。!!!!!。。。。因为,只有完全没有空格的时候,varvalue=$(ls)这样才对。。。以及要是用反引号因为单引号只是赋予一个字符串,双引号与单引号的区别是双引号里面可以加变量。而单引号完全是字符串。。而且确实单独显示使用echo $varname,而使用的时候,直接$varname即可

2、

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值