[Linux操作系统]Linux环境下开发过程中实用的shell命令

        在Linux环境下开发程序经常需要用到一些shell命令,这些是很基础的东西,但是不会的话真的很致命。为了提高开发效率,软件攻城师需要掌握并熟记一部分shell命令。

        这里有如下约定:<>内的是说明,具体使用时用实际的命令或语句把<>和它里面的内容全部替换掉。



情景1:有某个库函数或shell命令,你忘记了它的参数或返回该怎么办?

说明:在无法度娘或谷哥的情况下,你需要求助Linux下的好男人man。用法是

man <命令或函数>   #(当然你也可以man一下man本身!)

           man一般分几卷,如果只想看到函数的说明的话用man 2 <函数名>。 下图例子为man一下find这条命令的说明。




情景2:目标目录底下有一大堆源代码,而你需要快速地找到某个文件中的某一个宏的定义值是多少(这里假设它为MY_MACRO)

grep "MY_MACRO" . -nR



情景3:有个编译命令会打印出一大堆内容,但是你只想看到其中的错误报告信息怎么办?

<编译命令> | grep "error:"



情景4:有一份源代码编译时间非常长(笔者本人就曾经遇到过一份15GBytes的源码),现在要让你编译它,并协助解决其当中的编译错误。

说明:这里有个问题,就是通常我们都是用SSH或Shell去执行编译命令,在终端关闭之后,原来执行的命令就停止了。如何在SSH或Shell终端关闭之后,被执行的编译程序依然在跑,是一个需要解决的问题。

nohup <编译命令> &  

           然后让机器欢快地跑就可以了,这是机器该干的事情!干完其它事情回来cat或less或more当前目录下自动生成的nohup.out日志记录即可。



情景5:当前的机器被一个不知道哪个捣蛋的家伙跑了一个程序,卡死了,然而你又急着要用。

说明:首先 top 一下,看看哪个程序的CPU占用率最高,然后ps -ef 查找到它的pid值,kill -9 <对应pid> 即可。



情景6:dhcp服务器挂了,你需要设置固定ip地址才能使用网络。

说明:首先修改网络配置文件  sudo vim /etc/network/interfaces

auto lo
iface lo inet loopback

#这段是配置固定ip地址
iface eth0 inet static
address 10.60.3.85
netmask 255.255.255.0
gateway 10.60.3.1

#这段是作为dhcp client的配置
#auto eth0
#iface eth0 inet dhcp
然后重启网络服务即可:
sudo /etc/init.d/networking restart

如果想恢复dhcp模式要操作完以上两步后执行dhcp获取网络地址命令:

sudo dhclient eth0



情景7:如何查看应用程序依赖库。

说明:查看可执行程序的依赖库共有两种办法。

        第一种是使用ldd命令,下图为使用ldd命令查看awk程序的依赖库。  


        不推荐为任何不可信的第三方可执行程序运行ldd,因为某些版本的ldd可能会直接调用可执行程序来明确其库文件依赖关系,这样可能不安全。


        第二种是相对比较安全的方法,使用objdump命令。

objdump -p <应用程序路径> | grep NEEDED



情景8:那么,正在运行的进程的依赖库如何查看呢?

sudo pldd <PID>     # 网上有人说用这个,显示出在运行时被载入一个进程里的所有共享对象,反正我是没实验出来...

sudo pmap <PID>
  
  
   
        # 使用pmap工具报告一个进程的内存映射,同时也能显示出运行进程的库文件依赖

  
  



情景9:查看应用程序是32位还是64位的 (如果在32位系统中跑64位的应用程序,可能会出错)

说明:笔者就曾经遇到过一份从64位环境下拷贝到32位环境的源代码,编译了几个小时之后,异常中止。追查了半天的原因,最后发现这份代码中间有个打包工具是在64位环境下编译出来的,在32位操作系统中运行不了,导致了整个编译的失败。

file <目标程序>




情景10: 如何批量修改某个目录底下所有文件和子文件夹中文件的时间戳?

说明:这个场景也是经常会遇到的,由于Linux底下的Make工具是通过时间戳来执行编译操作的。如果一个源文件的时间戳比较旧,在make增量编译过程中通常会没编进去。这里就需要修改这些文件的时间戳了。

touch <目标文件名>      #修改单个文件使用touch命令,相信大家都懂...

find <目标路径> * -exec touch {} \;     #修改某个路径底下的全部文件和子文件夹的文件,就需要这个...

这里需要使用到find命令的组合。
-exec参数是表示命令组合,把find命令的输出作为某条命令的输入,-exec的结束以分号";"为标志。
{}表示find命令查找到的文件名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值