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的解压方式。
主要都是使用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,此时链接给出了很好的方法。
学习,不知道还有时间学习这个没有了?先放着,知道有代码可以解决吧。
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错误,那么按照链接
这个来学习,先打出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、