php发展

首页 » 常识 » 常识 » 新手必看7个Linux常用命令详解助
TUhjnbcbe - 2024/8/7 17:00:00
专治白癜风三级专科医院 https://jbk.39.net/yiyuanfengcai/yyks_bjzkbdfyy/

前言:

使用Linux系统的开发者,很多人都有自己喜欢的系统命令,下面这个几个命令是我平常用的比较多的,分享一下。

我不会教科书般的罗列每个指令的详细用法,只是把日常开发过程中的一些场景下,经常使用的命令常见用法进行演示。

No.1grep

grep、awk、sed这三个指令,作为Linux系统中文本处理的三大法宝,我最喜欢、最常用的就是grep指令,没有之一!

它的基本用法是:

grep[OPTIONS]PATTERN[FILE...]grep[OPTIONS][-ePATTERN]...[-fFILE]...[FILE...]+WX:machinegunjoe免费获取资料

看起来有那么的选项,我最常用的是这2个场景:

1.在一个文件或者文件夹中,查找指定的字符串:

grep-rni"pthread"*

-r:递归查找;-n:打印行号;-i:不区分大小写;

2.查看某个进程的相关信息,例如:进程ID

$ps-aux

grepbashroot.00.pts/3Ss10::00bashroot.00.pts/3S+13::00grep--color=autobash

可以看到,结果中出现了grep这个指令自身的进程信息,可以通过-v选项过滤掉它:

$ps-aux

grepbash

grep-vgreproot.00.pts/3Ss10::00bash

最后,再结合awk命令,就可以把进程ID提取出来了:

$ps-aux

grepbash

grep-vgrep

awk{print$2}

在一些脚本工具中,这样的用法还是很常见的。

例如:在一些守护进程的启动脚本中,都会利用这条指令来判断:当前系统中是否已经有一个实例正在运行了。

No.2q

看到这个指令,您一定会疑惑:仅仅一个字母q,这是何方神圣?

Linux系统中压根就没有这个命令!

是的,这个字母仅仅是一个alias(别名)。

我有很强的强迫症,在终端窗口执行一条命令的时候,我经常会需要确认指令是否执行正确。

在Linux系统中,$?用来表示最后命令的退出状态:0表示没有错误,其他表示有错误。

因此,在执行完一条命令后,可以执行下面的这条命令来确认:刚才执行的那条命令是否成功了。

echo$?

强迫症的问题是解决了,但是由于这条指令使用的太频繁了,需要敲那么多的字符,还要结合shift按键。

于是我就给它设置了一个alias(别名)。

设置alias的方法估计都知道啊,就是在个人家目录下的.bashrc中修改。

我的alias设置如下:

aliasll=ls-lFaliasla=ls-Aaliasl=ls-CFaliasq=echo$?+WX:machinegunjoe免费获取资料

这样的话,每次执行完一条系统命令之后,随手敲一个字母q就可以检查执行结果了,省时省力!

No.3pwd

可能有些人会奇:pwd怎么会是常用命令呢?它的作用是打印当前路径,在命令行窗口中,路径是一直显示出来的啊!

没错,在默认的情况下,当前所处的路径信息,是直接显示出来的,如下:

root

ubuntu:~/OpenSource/linux-4.15/samples/watchdog$

但是这里有一个小小的问题:如果终端窗口的大小并不是全屏的,如果目录层次比较深,那么显示的路径信息就会特别的长,这样的话,本来就不太宽的终端窗口就显得很挤,输入命令的时候很可能要折返到下一行去。

于是,我就喜欢把这个显示的路径给它缩短:只显示最后一个文件目录,如下:

root

ubuntu:watchdog$

也就是把前面的~/OpenSource/linux-4.15/samples路径信息都丢掉,这样的话,终端窗口中就有足够的空间来输入了。

如果某个时候,我想看一下当前目录的全路径,那么就执行一下pwd这个指令就可以了。

这就是我为什么经常使用pwd命令的原因。

那么,应该怎么样来去掉显示路径中的目录信息呢?

还是修改家目录下的.bashrc文件:

if["$color_prompt"=yes];thenPS1=${debian_chroot:+($debian_chroot)}\[\[01;32m\]\u

\h\[\[00m\]:\[\[01;34m\]\w\[\[00m\]\$elsePS1=${debian_chroot:+($debian_chroot)}\u

\h:\w\$fi

找到上面这几行内容,把最后面的\w修改成\W即可,也就是小写的w改成大写的W。

如果你正在测试,请不要忘记使用source.bashrc或者..bashrc命令来重新加载哦!

No.4find

find命令用来查找符合指定条件的文件。

我最常用的场景就是:查找指定名称或类型的文件了。

特别是在写Makefile的时候,经常遇到找不到头文件的错误,于是就可以这样查找:

find./-namexxx.h

或者按照后缀名来查找文件:

find./-name*.txt

No.5history

history用来记录执行过的命令,如果您很少使用这条命令,那说明您的记忆力很好!

但是对于我这样忘性比较好的人来说,history命令简直太有用了!

我在命令行窗口中测试某段代码,经常需要反复的做这样的排错过程:修改代码-编译-执行-查看结果。

如果编译指令比较长,我相信没有谁乐意一个字符一个字符的敲键盘,大部分是使用history列出最近使用的命令,然后复制、粘贴一下。

查看历史命令的时候,由于输出太多,可以结合grep指令,只显示我们感兴趣的命令记录,例如:

history

grepgcc

那么,结果中将只会显示带有gcc字眼的那些命令。

另外,还有一个小技巧:在不查看history的情况下,快速的输入之前执行过的某条指令(有一个前提条件:你必须能记住那条指令中刚开始的几个字符)。

比如,之前已经执行过这条指令:

gcc-m32-Wl,--export-dynamic-omainmain.c-ldl

几分钟之后,我想再次执行这条命令,可以这么做:

同时按下control和r这两个按键,此时输入光标处就会变成这样:

root

ubuntu:tmp$(reverse-i-search)`:+WX:machinegunjoe免费获取资料

这时,可以输入命令最前面的几个字母:gcc-m,此时终端就会到历史命令记录中去查找,输入的字符越多,匹配就越精确。

如果输入的字符,精准的匹配到了某个历史命令记录,它就立刻把这条命令完整的显示出来。

这个小技巧真的很好用,推荐您试一下!

No.6od

od命令用来输出给定文件的内容。

输入文件内容的指令有很多了:cat、head、tail等等。但是od命令主要用来查看文件的二进制编码,显示的时候可以以指定的进制进行显示。

在之前的一篇拆解ELF格式的文章中:《Linux系统中编译、链接的基石-ELF文件:扒开它的层层外衣,从字节码的粒度来探索》,我就大量的使用了od指令,在一个ELF格式的文件中,从任意地址开始、读取任意长度的字节码。

例如下面这条指令:读取main文件中最开始的52个字节的内容:

od-Ax-tx1-N52main

main是Linux系统中的可执行程序,当然也就是ELF格式了。

od指令中使用到了下面这几个选项:

-Ax:显示地址的时候,用十六进制来表示。如果使用-Ad,意思就是用十进制来显示地址;

-t-x1:显示字节码内容的时候,使用十六进制(x),每次显示一个字节(1);

-N52:只需要读取52个字节;

可以看出main文件最开始的四个字节:7f是ELF文件的魔数,c46是"ELF"3个字母。

因此,使用od命令来分析二进制文件的内容,还是很有威力的!

No.7for

for这个命令,常常出现在脚本文件中,用来处理循环的情况,比如:遍历文件、计数,例如:

#!/bin/bashforfilein/tmp/*;doecho$file;done

我在使用for的时候,最常用的场景是给很多相同后缀的文件,按顺序进行重命名:

i=0;forxin*.mp4;don=$(printf"%02d""$i");mv$x$n.mp4;leti=i+1;done

这里是按照纯数字来重命名的,也可以根据需要加上前缀等字符串。

这里还有一个小问题需要注意一下:如果文件名中存在空格,mv指令就会提示错误:

mv:targetxxxisnotadirectory

解决方法是:在终端窗口中,先执行一下这个命令:

IFS=

然后,再执行批量重命名命令,就不会出现错误了!

当然,更好的方式是,把这几个命令写成一个脚本文件,实现对任意类型的文件进行批量重命名功能,然后放在自己的私有bin目录下,随取随用。

别担心,我已经帮你写好了,如下所示(file_rename.sh):

#!/bin/bashif[$#-eq0];thensufix=mp4elsesufix=$1fiIFS=+WX:machinegunjoe免费获取资料i=0;forxin*.$sufix;don=$(printf"%02d""$i");mv$x$n.$sufix;leti=i+1;done

只要执行./file_rename.sh,就会默认把当前目录下所有mp4文件进行重命名。

如果是其他类型的文件,那就传递一个参数进去。

比如:如果要批量对png格式的图片进行重命名,那就执行./file_rename.shpng,最后的png是传入的参数,对应于脚本文件中的$1变量。

福利获取:

看到这里的大佬,动动发财的小手点赞+回复+收藏,能一波就更好了

我是一名渗透测试工程师,为了感谢读者们,我想把我收藏的一些网络安全/渗透测试学习干货贡献给大家,回馈每一个读者,希望能帮到你们。

干货主要有:

①多本网安必看电子书(主流和经典的书籍应该都有了)

②PHP标准库资料(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④网络安全基础入门、Linux运维,web安全、渗透测试方面的视频(适合小白学习)

⑤网络安全学习路线图(告别不入流的学习)

⑥渗透测试工具大全

⑦网络安全/Web安全/渗透测试工程师面试手册大礼包

私信即可免费获取全部资料

1
查看完整版本: 新手必看7个Linux常用命令详解助