Linux学习之工作常用Linux命令

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 Linux学习之工作常用Linux命令,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

命令行基础入门

命令提示符
[root@localhost ~]#

  • root表示当前登录用户名
  • localhost表示主机名
  • ~表示当前所在的目录(即home目录,用户登录的初始位置)
  • # 超级用户的提示符,普通用户提示符为$

&以后台进程方式执行命令。

常用命令行

man

必须要知道以及掌握的一个命令行。在不了解某个命令的用法时,首先应该想到使用--help-help,或者是他们的简写形式--h/-h来查看命令的使用详情;进一步,如果-help还不行的话,可以使用man命令来查看帮助信息。
帮助文件(man-pages,手册页)一般放在,$MANPATH/man 目录下面,而且按照领域与语言放到不同的目录里面。Man 帮助页通过数字标识符来分成不同类型的内容:

  1. 一般用户命令
  2. 系统调用命令
  3. 库函数
  4. 特殊的文件和驱动程序
  5. 文件格式
  6. 游戏和屏保
  7. 杂项
  8. 系统管理命令和守护进程

所有的 man 帮助页都应该显示这些子段落:Name、 Synopsis、 Description、Examples、See、Also。有些还会添加一些额外的子段落,比如 Options、 Exit、Status、 Environment、Bugs、Files、Author、Reporting、Bugs、History、Copyright。
用法:
显示 man 命令的 man 帮助页。具体来说,将先解压 man 帮助页文件(这个文件一般以压缩形式存储在本地磁盘的特定位置),然后解释格式化指令并用 less 显示结果,所以导航操作和在 less 中一样。
man man

# 显示passwd帮助文件路径,-a查找所有的压缩文件,默认只会查找一个
man -w passwd
/usr/share/man/man1/passwd.1.gz
man -aw passwd

rm

在这里插入图片描述
如上图,在拷贝照片之后,有一些重复的文件。想要快捷删除重复的文件可以使用命令行。注意括号需要加上转义字符,否则报错syntax error near unexpected character '('
rm -fr "\(1\)."
注意这种删除,在回收站不会留下记录。

rmdir

类比于mkdir(目录只能在用户拥有写权限的目录下才能创建),创建空目录;
rmdir,用于删除空目录,一个目录被删除之前必须是空的。
rm – r dir命令可代替rmdir,但是有很大危险性。
该命令从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对父目录的写权限。
- p:递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。
-v, --verbose 显示指令执行过程。

scp

scp,用于Linux之间复制文件和目录,有从本地复制到远程、从远程复制到本地两种类型。
命令基本格式:scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 ... [[user@]host2:]file2
选项:
-v 显示进度,可以用来查看连接,认证,或是配置错误
-C 使能压缩选项
-P 选择端口
-4 强行使用 IPV4 地址
-6 强行使用 IPV6 地址

实例:

# 从本地复制到远程
scp local_file remote_username@remote_ip:remote_folder
scp local_file remote_username@remote_ip:remote_file
scp local_file remote_ip:remote_folder
scp local_file remote_ip:remote_file
scp -r local_folder remote_username@remote_ip:remote_folder
scp -r local_folder remote_ip:remote_folder

# 从远程复制到本地
scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3
scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/

# 本地开发时使用,千万不能用于脚本中
scp <user>:<password>@<ip>:/path/ /<des_path>
scp root:iso*help@15.119.82.70:/var/opt/kubernetes/offline/suite_images/1.0.tar .
scp root:iso*help@15.119.82.70:/var/opt/* /usr/

解释:
第1,2个指定用户名,命令执行后需要再输入密码;第3,4个没有指定用户名,命令执行后需要输入用户名和密码;
复制时可以保持文件名不变,如1,3;也可以指定新的文件名,如2,4;
复制整个文件夹时,需要添加-r选项。

tail

tail 命令用于显示指定文件(-f 选项)末尾最后10行内容并不断刷新,如果没有指定文件,则会使用标准输入。常用于查看日志文件。
常用选项:
-f 循环读取
-F same as –follow=name –retry
-v 显示详细的处理信息
-c, –bytes=[+]NUM 显示的字节数
-n, –lines=[+]NUM 显示行数
–pid=PID 与-f合用,表示在进程ID,PID死掉之后结束。
-q, –quiet, –silent 从不输出给出文件名的首部
-s, –sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒。

示例:

# 显示文件末尾最后5行内容,-5等同于5,默认从末尾显示文件;+5表示从第5行开始显示文件
tail -n 5 log2014. log
tail -n +5 log2014.log
逆序显示行
tail [  -r ] [  -n Number ] [ File ] 
Number 变量指定将多少单元写入标准输出。 Number 变量的值可以是正的或负的整数。如果值的前面有 +,从文件开头指定的单元数开始将文件写到标准输出。- 则表示从文件末尾指定的单元数开始将文件写到标准输出。默认从文件末尾指定的单元号开始读取文件。 

Number 变量用于确定计数的起点的单元类型由 -b、-c、-k、-m 以及 -n 标志确定。如果没有指定其中的任何一个标志,那么 tail 命令就会读取指定文件的最后十行,并将其写到标准输出。这与在命令行输入 -n 10 是相同的。 

-m 标志在单字节和双字节字符环境中提供一致的结果。当输入是包含多字节字符的文本文件时应谨慎使用 -c 标志,因为产生的输出可能不从字符边界开始。 

标志
-b Number 从 Number 变量表示的 512 字节块位置开始读取指定文件。 
-c Number 从 Number 变量表示的字节位置开始读取指定文件。 
-f 如果输入文件是常规文件或如果 File 参数指定 FIFO(先进先出),那么 tail 命令不会在复制了输入文件的最后的指定单元后终止,而是继续从输入文件读取和复制额外的单元(当这些单元可用时)。如果没有指定 File 参数,并且标准输入是管道,则会忽略 -f 标志。tail -f 命令可用于监视另一个进程正在写入的文件的增长。 
-k Number 从 Number 变量表示的 1 KB = 1024 B 块位置开始读取指定文件。 
-m Number 从 Number 变量表示的1 048576 B =1 MB 多字节字符位置开始读取指定文件。使用该标志提供在单字节和双字节字符代码集环境中的一致结果。 
-n Number 从 Number 变量表示的行位置开始读取指定文件。 
-r 从文件末尾以逆序方式显示输出。-r 标志的缺省值是以逆序方式打印整个文件。如果文件大于 20,480 字节,那么 -r 标志只显示最后的 20,480 字节。 
-r 标志只有与 -n 标志一起时才有效。否则,就会将其忽略。 
退出状态
该命令返回下列的退出值: 
0成功完成。 
>0出现错误。 
示例
要显示 notes 文件的最后十行,输入: 

tail notes要指定从 notes 文件末尾开始读取的行数,输入: 
tail  -n 20 notes 
要从第 200 字节开始,每次显示一页 notes 文件,输入: 
tail  -c +200 notes | pg 

zip & tar & jar etc.

zip格式已成为压缩文件的标准选择,最大优势适用于不同的操作系统平台,缺点是支持的压缩率不是很高。
tar命令,仅仅是打包,命令本身没有压缩功能,.tar.gz与.tar.bz2都是在tar命令中调用别的压缩命令实现一个压缩的功能,实际是实行一个先打包后压缩的过程,.tar.gz与.tar.bz2只是公认的一个通行后缀而已,并不是一种压缩格式,真正实现压缩的是gzip与bzip2,tar.gz在很多时候,也会被简写成tgz,分别使用z、j选项;前者生成后缀名为.tar.gz文件,在压缩时不会占用太多CPU的,而且可以得到一个非常理想的压缩率。后者生成后缀名.tar.bz2文件,压缩率好,占用更多的CPU与时间。Tar的好处就是它只消耗非常少的CPU以及时间去打包文件,仅仅只是一个打包工具,并不负责压缩。
另外,java自带的jar命令行工具也有打包功能。

# zip压缩
zip -r a.zip directory_to_compress
# tar压缩
tar -cvf a.tar directory_to_compress
# tar解包
tar -xvf a.tar
# 将文件夹hpas-7.4.3下的所有文件生成tar.gz格式的压缩包,带不带-符号无所谓
tar czf hpas-7.4.3.tar.gz hpas-7.4.3/
# 解压一个tar.gz归档,x - 解压文件,v - 冗长模式,在解压每个文件时打印出文件的名称,z - gzip算法压缩的文件(后缀名.tar.gz),j - bzip算法压缩(后缀名.tar.bz2),f - 使用接下来的tar归档来进行操作,C-将文件解压到一个指定的目录或路径(需要事先存在的目录)
tar -xvzf tarfile.tar.gz
# .tar.bz2 格式文件的解压命令为
tar -jxvf xx.tar.bz2
# .bz2 (和上面的不一样,并不是tar.bz2,仅仅是text.bz2 文件)格式文件的解压
bunzip2 text.bz2
# 作为对比记忆,压缩文件为bz2格式的命令为
bzip2 -d text.bz2
# 提取文件,支持通配符--wildcards
tar -xzf abc.tar.gz "./new/abc.txt" "a.txt"
tar -xzf abc.tar.gz --wildcards "*.txt"

# 在固定的时间间隔内来备份目录,tar命令可以通过cron调度来实现这样的一个备份:
tar -cvz -f archive-$(date +%Y%m%d).tar.gz ./new/
使用cron来运行上述的命令会保持创建类似以下名称的备份文件 :'archive-20150218.tar.gz'

类似的命令:gzip, zcat 或者 compress。

jar 命令详解
jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
其中 {ctxui} 是 jar 命令的子命令,每次 jar命令只能包含 ctxu中的一个;
解压到当前目录
jar -xvf project.war
解压war包里面的指定目录(支持正则模式)到当前目录,下面命令仅仅解压axis2*文件夹到当前目录
jar -xvf axis2.war axis2

ls

# -a显示隐藏文件,-l显示详情
# 统计某文件夹下文件的个数
ls -l |grep "^-"|wc -l
# 统计某文件夹下目录的个数
ls -l |grep "^d"|wc -l
# 统计文件夹下文件的个数,包括子文件夹里的
ls -lR | grep "^-"|wc -l
# 统计当前目录(包含子目录)下的所有java文件个数
ls -lR |grep java|wc -l
# 统计指定目录(包含子目录)下的所有java文件个数
ls -lR /root/github/ |grep java|wc -l
ls -lR "/root/github/" |grep "java"|wc -l
# 统计文件夹下目录的个数,包括子文件夹里的
ls -lR|grep "^d"|wc -l
总结:-R表示含目录,递归;
"^d"即表示文件夹,folder;
"^-"即表示文件,file,Linux下一切皆文件。

curl

用来通过 HTTP(s),FTP 等其它几十种协议来发起网络请求。可以下载文件,检查响应消息头以及方便地访问远程数据。
在 Web 开发中, Curl 经常被用来测试连接,还有调用 REST 风格的 API。
curl -I <url>:获取 request header
有许多选项可以用来控制消息头,Cookie,身份验证等这些要素。Everything curl 电子书

ln

Unix 里面的链接同 Windows 中的快捷方式类似,允许你快速地访问到一个特定的文件。通过 ln 命令创建链接,有两种类型 : hard & symbolic。每种类型都有不同的属性而且各有其用途。
ln -s /some/scripts/under/some/very/deep/directory/ /usr/local/bin/
创建一个 symlink,将 Scripts 文件夹链接到 /usr/local/bin,这样就能让脚本在所有的目录下面都可以执行。

lsblk

列出块设备。除了RAM外,以标准的树状输出格式,整齐地显示块设备。lsblk -l命令以列表格式显示块设备(而不是树状格式)。一般用于了解新插入的USB设备的名字,特别是当你在终端上处理磁盘/块设备时。

history

用于查找命令执行历史;重复执行上一次命令可以按⬆️键,重复执行之前执行的某一条命令可以使用history。
history 10显示最后的10条命令:
526 ls web/
527 clear
528 ls -a
529 history 10
530 date
531 make -v
532 sudo apt-get –help
533 history 10
534 gcc -v
535 history 10
!n:这个n表示序号,重新执行第528条命令ls -a,那么你可以使用!528
!!:这将会重新执行上一条命令;
!?String?:Shell会从最后一条历史命令向前搜索,最先匹配的一条命令将会得到执行。比如:输入!?gc?第534条命令gcc -v就会执行。
CTRL + R:搜索已经执行过的命令,它可以在你写命令时自动补全。
fc n:打开文本编辑窗口并显示这条命令。然后你可以编辑修改这条命令。退出编辑窗口执行命令。
因为,在shell(控制台、终端)中输入并执行命令时,shell会自动把你的命令记录到历史列表中,一般保存在用户目录下的.bash_history文件中。默认保存1000条,可更改。
待验证:
<空格> 命令不会被记录到history 命令,Windows安装git bash之后,经过验证并不是这样;另一个命令cat | bash也不会被history记录。

cat & more & less

cat,连结Concatenation,连接两个或者更多文本文件或者以标准输出形式打印文件的内容。
cat 1.txt 2.txt 3.txt
cat 1.txt 2.txt 3.txt >>123.txt
“>>”和“>”调用追加符号。它们用来追加到文件里,而不是显示在标准输出上。“>”符号删除已存在的文件,创建一个新的文件。“>>”不覆盖或者删除使用追加模式。
cat,连续显示、查看文件内容;
more,分页查看文件内容;
less,分页可控制查看文件内容。

chmod

改变文件的模式位。3种类型的权限:Read ®=4,Write(w)=2,Execute(x)=1;3种用户/用户组权限:拥有者,用户所在的组,其它用户,比如ls -l查看得到*.sh文件的权限详情:-rwxr-xr-x 1 johnny 197609 268 Jan 4 2017 enable-dw-etl-tool.sh*。更改:chmod 777 enable-dw-etl-tool.sh

chown

chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。每个文件都属于一个用户和用户组。还是上面的例子,文件enable-dw-etl-tool.sh属于用户johnny和用户组197609(Windows系统的输出,待研究);文件的owner及group和权限紧密相连。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限。
选项:
-v 显示详细的处理信息;
-f 忽略错误信息;
-R 处理指定目录以及其子目录下的所有文件;
更新用户:chown johnny enable-dw-etl-tool.sh
更新用户以及用户组:chown johnny:johnny enable-dw-etl-tool.sh

chgrp

更改文件的group。chgrp=change group;被更改后的group_name必须是本机上一个真实存在的group,否则会报错。

umask

默认情况下,新建一个文件是不需要具有可执行权限的。因此对于文件而言,其默认的最大权限就是666,表示对于文件拥有者、同个群组的其他用户和不同群组的其他用户都具有可读和可写权限。
对于目录而言,可执行权限与用户是否能进入该目录有关,因此默认情况下,目录的所有权限都对外开放,即默认的最大权限为777,表示对于文件拥有者、同个群组的用户和不同群组的其他用户都具有可读、可写和可执行权限。
umask命令查看当前用户的umask值,输出:0022,4位数。第一位是特殊权限相关的。
umask的值表示的是文件或目录的“默认最大值”需要减掉的权限。由于文件的默认最大权限为666,第二位是0,表示是不需要减掉任何权限,因此对于文件拥有者而言,而权限就是6;第三位为2,表示的是需要减掉可写权限,因此对于同个群组的其他用户而言,其权限就是4;第四位是2,表示需要减掉可写权限,因此对于不同群组的其他用户而言,其权限就是4。故0022表示的是该用户新建的文件的默认权限是644。

命令用来指定当前用户在新建文件时的默认权限,其是一个数值。
只要在umask命令后面加上要设置的umask值就行了。比如我们要设置创建的文件的默认权限为664,即对于文件拥有者和同个群组的用户而言,不需要减掉任何权限,而对于不同群组的其他用户需要减掉可写权限,因此umask值为002。接下来我们设置umask值为002来验证一下:
root@study-machine:~/work# umask 002
root@study-machine:~/work# umask
0002
root@study-machine:~/work# touch file3
root@study-machine:~/work# ls -al
total 8
drwxr-xr-x 2 root root 4096 Apr 25 21:28 .
drwx—— 7 root root 4096 Apr 25 21:28 …
-rw-rw-r– 1 root root 0 Apr 25 21:28 file3
将umask值设置为002后,新建的文件file3的默认权限为-rw-rw-r–,即664,与一开始的默认权限明显不同,可以通过umask值设置文件或目录的默认权限。

对于目录而言,则有些不同,还是以umask值0022为例进行分析。目录的默认最大权限是777,第二位为0,表示的是不需要减掉任何权限,所以对于目录拥有者而言,其权限为7;第三位为2,表示的是需要减掉可写权限,因此对于同个群组的其他用户而言,其权限是可读可执行,即5;第四位为2,表示的是需要减掉可写权限,因此对于不同群组的其他用户而言,其权限是可读可执行,即5。故0022表示的是该用户新建一个目录的默认权限为755。我们新建一个目录验证一下便知:
root@study-machine:~/work# ls
root@study-machine:~/work# umask
0022
root@study-machine:~/work# mkdir dir1
root@study-machine:~/work# ls -al
total 12
drwxr-xr-x 3 root root 4096 Apr 25 21:46 .
drwx—— 7 root root 4096 Apr 25 21:46 …
drwxr-xr-x 2 root root 4096 Apr 25 21:46 dir1
目录dir1的权限为drwxr-xr-x,即755,与上述分析的一致。

apt

Debian系列(Ubuntu,Kubuntu等)以apt(Advanced Package Tool)命令为基础,高级包管理器,在Gnu/Linux系统上,它会为包自动地,智能地搜索,安装,升级以及解决依赖。需要root权限(提示符为”#”,而不是“$”);和yum命令相比,Apt更高级和智能。

apt-get install mplayer
apt-get autoremove
# 在包安装时自动构建依赖关系
apt-get build-dep ffmpeg
apt-get update

apt-cache用来搜索包中是否包含子包mplayer, apt-get用来安装,升级所有的已安装的包到最新版。

sudo

sudo 允许用户借用超级用户的权限,su命令实际上是允许用户以超级用户登录。sudo比su更安全。
sudo=super user do,命令允许授权用户执行超级用户或者其它用户的命令。通过在sudoers列表的安全策略来指定。
sudo add-apt-repository ppa:tualatrix/ppa
sudo !!,执行某条命令发现没有权限,输入sudo !!命令重新以root权限执行这个命令。

clear

清除屏幕;Ctrl + l,有同等功能。

tty

输出tty,win 10 git bash 输出/dev/pty1

at

与cron 命令相似,也可用于安排一个任务或者在某个特定时刻执行命令。at会在系统时间匹配到特定时间时会尽快执行。win 10系统输出:AT 命令已弃用。请改用 schtasks.exe。不支持该请求。

# echo “ls -l”,将这串命令(ls -l)输出在标准终端上
# > :重定向输出,/dev/pts/0: 输出设备和/或文件,输出到指定的地方,这里输出在终端(/dev/pts/0)
echo "ls -l > /dev/pts/0" | at 14:012
echo "ls -l > /dev/pts/0" | at 2:12 PM

last

显示上次登录用户的历史信息,通过搜索文件“/var/log/wtmp”,显示logged-in和logged-out及其tty‘s的用户列表。

dd

转换和复制文件,大多数情况下是用来复制iso文件到一个usb设备中去,可以用来制作USB启动器。
dd if=/home/user/Downloads/debian.iso of=/dev/sdb1 bs=512M; sync
usb设备就是sdb1(你应该使用lsblk命令验证它,否则你会重写你的磁盘或者系统),请慎重使用磁盘的名,切忌。
dd 命令在执行中会根据文件的大小和类型 以及 usb设备的读写速度,消耗几秒到几分钟不等。

du

以可读的形式输出当前目录的子目录的大小。

# 仅仅过滤输出当前目录的文件夹信息
du -h --max-depth=1
# 查看当前目录下所有文件和目录大小,并排序
du -shk * |sort -nr
# 对目录大小排序
du -hk --max-depth=1 |sort -nr
# 只显示排序后的前4个目录
du -hk --max-depth=1 |sort -nr |head -4

df

Disk Free,返回关于可用磁盘空间的各种信息(与 du 正好相反)。
df输出以kb为展示单位,df -h输出根据实际占用情况选择展示单位,如MB和GB等;

di

比df更高级,一个用户实际的磁盘可用空间,以及各种有用的显示格式等。di默认输出即等价于df -h。选项-A输出极详细的打印挂载点,特殊设备名称等。-a打印所有挂载设备。-c用逗号或者其他符号作为值的分隔符。-g、-k、-m分别显示千兆字节(G)、千字节(K)和兆字节(M)。-n 选项跳过标题行的输出。-t 选项在文件系统列表底下再打印一行总计行。

# -l选项显示特定的文件系统类型的相关信息,如tmpfs文件系统
di -I tmpfs
# -s排序,默认按照挂载点名称排序;可以指定排序方式:r逆序,m按照挂载点名称排序(默认),n不排序(即按照在挂载表/etc/fstab中的顺序),s按照特殊设备名称,t按照文件系统类型,排序方式可以组合使用
# 按照类型、设备、挂载点逆序排序
di –stsrm
# 按照类型、设备逆序、挂载点逆序排序
di –strsrm
# -f 选项指定输出格式,-fm,打印挂载点的名称, -ft打印文件系统的类型

free

显示Linux系统中物理内存、交换分区的使用统计信息。当前系统的可用内存=free + buffers + cached。free命令输出:

             total       used       free     shared    buffers     cached
Mem:       2071588     514824    1556764          0     109580     228060
-/+ buffers/cache:     177184    1894404
Swap:      4161528          0    4161528

物理内存使用统计:

标题 说明
total 物理内存总量 total = used + free
used 已使用内存总量,包含应用使用量+buffer+cached
free 空闲内存总量
shared 共享内存总量
buffers 块设备所占用的缓存
cached 普通文件数据所占用的缓存
available 当前可用内存总量(可用于分配给应用的,不包含虚拟内存)
对于available字段,在内核3.14中,它会从/proc/meminfo中的MemAvailable读取,在内核2.6.27+的系统上采用模拟的方式获取,其它情况下直接与free的值相同。

第二行-/+ buffers/cache 中只有两列used和free有值,它们是物理内存的调整值;used,已使用内存used减去buffer和cached之后的内存,也就是应用正在使用的内存总量;free,空闲内存加上buffer和cached之后的内存,也就是真正的可用内存总量。

第三行为交换分区使用统计,total 交换分区内存总量,used 正在使用的交换分区内存,free 空闲交换分区内存。

解读
下面情况说明内存过低:

  • 可用内存(free+buffers/cache)过低,接近于0的时候
  • 交换分区内存占用swap used增加或者有波动
  • dmesg | grep oom-killer显示有OutOfMemory-killer正在运行

系统正常:

  • 空闲内存free接近于0
  • 已使用内存used接近于total
  • 可用内存(free+buffers/cache)占total的 20% 以上
  • 交换分区内存 swap 没有发生改变

选项:
-b/k/m/g 以bytes/KB/MB/GB为单位显示结果
-h,以人类可读的方式输出统计结果
-t,多显示一行标题为Total的统计信息
-o,禁止显示第二行的缓冲区调整值
-s,每隔多少秒自动刷新结果
-c,与-s配合使用,控制刷新结果次数
-l,显示高低内存的统计详情
-a,显示可用内存

touch

touch 命令用于创建空文件,以及更改 Unix系统文件时间戳,包括访问以及修改时间。如果文件已经存在,更新时间戳,不会改变文件内容。会强制Linux系统在下次启动时检查文件系统。

# 批量创建空文件
touch readme-{1..5}.txt
# 使用 -c 选项,文件存在则更改文件的访问时间,并不存在则不创建文件。
# 每当使用 touch 命令更改文件和目录的访问和修改时间时,将使用当前时间。使用-t选项设置特定的日期和时间设置为文件的访问和修改时间。日期和时间可以使用以下格式指定:{CCYY}MMDDhhmm.ss。使用 -d 选项指定日期字符串
touch -c -t 202510191820 devops.txt
touch -c -d "2010-02-07 20:15:12.000000000 +0530" sysadm-29.txt
# -r选项,使用参考文件设置时间戳,参考readme-1.txt的时间戳设置devops.txt的时间戳:
touch -r readme-1.txt devops.txt
#  -m 选项更改文件和目录的修改时间,使用stat命令来验证修改时间是否改变;
touch -m devops.txt
# -a 选项更改文件或目录的访问时间
# 默认情况下,每当尝试使用 touch 命令更改符号链接文件的时间戳时,它只会更改原始文件的时间戳。如果你想更改符号链接文件的时间戳,则可以使用 touch 命令中的 -h 选项来实现。

alias

为长命令创建一个短别名。终端关闭后,别名失效。将 alias 命令操作写到你的 .bashrc 文件中使其永久生效。

uname

Unix Name简写。显示机器名,操作系统和内核的详细信息。uname显示内核类别, uname -a显示详细信息

cal

cal=Calender,用来显示当前月份或者未来或者过去任何年份中的月份,最小单位是月。
显示已经过去的月份,1990年4月:cal 041990

date

使用标准的输出打印当前的日期和时间,也可以深入设置,需要root权限,因为涉及系统整体改变。

# 命令选项
-d<字符串>  显示字符串所指的日期与时间。字符串前后必须加上双引号。 
-s<字符串>  根据字符串来设置日期与时间。字符串前后必须加上双引号。 
-u  显示GMT。
# 最基本的显示,一个加号后接数个标记
date
date '+%c'
date '+%D'
date '+%x'
date '+%T'
date '+%X'
date  '+%B %d'
# 显示前一天的日期
date +%Y%m%d --date="+1 day"
# 设置当前时间,只有root权限才能设置,其他只能查看
date -s
# 设置
date --set='14 may 2013 13:57' Mon May 1313:57:00 IST 2013

locate

用于查找文件,比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作crontab程序来建立。即先运行:updatedb(无论在那个目录中均可,可以放在crontab中 )后在 /var/lib/slocate/ 下生成 slocate.db 数据库即可快速查找。

mount

命令列出所有挂载文件系统,命令mount | colum -t以格式化的形式输出。

file

输出文件信息。命令file 2.txt,输出:2.txt: very short file (no magic)

md5sum

计算和检验MD5信息签名,用来检查文件的完整性。md5 checksum(哈希)使用匹配或者验证文件的文件的完整性,因为文件可能因为传输错误,磁盘错误或者无恶意的干扰等原因而发生改变。md5sum没有sha1sum安全;将生成的字符串(32位数字和小写字母的组合)与原作者提供的进行比较。
md5sum <file_name>

sha1sum

pkill

pidof打印出正在运行的程序的进程ID:pidof nginx
通过kill命令杀死nginx:kill -USR2 $(pidof nginx)'
pkill是一个快捷命令,可以依据匹配模式杀死进程:pkill -f nginx

getconf

# 查看所有配置
getconf -a
# 显示机器架构位数
getconf LONG_BIT

tee

分割程序的输出,从而可以打印和保存。例如,添加一个新的条目到hosts文件;
echo "127.0.0.1 foobar" | sudo tee -a /etc/hosts

dialog

在命令行上与用户交互的一种非常简单又良好的方式。下面命令展示一个不错的输入框:
dialog --title "Oh hey" --inputbox "Howdy?" 8 55
支持许多其他类型的对话框;消息框,菜单,确认,进度条…

screen

当采用telnet或SSH登录远程主机时,因为网络中断等原因会导致session终止,此时会触发SIGHUP信号使得任务终止,因此常常会看到有些任务采用nohup的方式运行,避免任务被打断。screen通过多终端的方式,能在不同会话间断开或重连。
screen -S test开启一个screen,这时拥有一个终端,所有执行的程序都会在ps中展示,Ctrl+a键+d键,退出当前screen断开连接,切到上级窗口、
screen -ls查看所有screen列表,如
13333.test (Detached)
14039.test4 (Detached)
表示两个screen,screen标识为13333.test和14039.test4
screen -r [pid.]tty.host 重新进入选定的screen:screen -r 13333.test

tac

倒序输出文本文件的内容,从最后一行到第一行。

id

打印真正的和有效的用户和组的id。Windows git bash输出:uid=197609(johnny) gid=197609 groups=197609

nl

nl 1.txt,以添加行号的方式来显示文件。

lsb_release

打印特殊发行版的信息。选项-a显示有关版本、ID、详情、发行号和研发代号的全部可用信息。

bind

显示所有的BASH shell可用的快捷方式。
bind -p

tmux

Tmux 是一个终端复用器,一个可以将多个终端连接到单个终端会话的工具。
它让你可以在一个终端中进行程序之间的切换,添加分屏窗格,还有就是将多个终端连接到同一个会话,使它们保持同步。 当你在远程服务器上工作时,Tmux 特别有用,因为它可以让你创建新的选项卡,然后在选项卡之间切换,而无需反反复复的退出然后登录。
代替screen、nohup。

fmt

格式化某个文本文件中每一个段落内容,将结果写到标准输出。比如该文本文件每行一个单词,而任务是把所有的单词都放在同一行。
基本语法为:fmt [-WIDTH] [OPTION]... [FILE]...,-WIDTH 是 –width=DIGITS缩写。

无任何选项,将文本内容格式成同一行输出,不修改原文件
-w 接受一个表示新行宽的数字作为参数值;默认 fmt 输出最大行宽为75
-t 让第一行的缩进与众不同,突出显示;
-s 拆分长行方便查看;
-u 在单词与单词之间用单个空格分开,句子之间用两个空格分开,默认开启;

tree

以树状的格式递归得到当前文件夹的结构。用于快速地进行浏览并找到自己想要的文件。支持类正则表达式的模式来对结果集进行过滤:tree -P '*.min.*'
只显示目录:tree -d

shellcheck

shell脚本静态检查工具,能够识别语法错误以及不规范的写法:shellcheck test.sh

chroot

在给定的目录中打开一个新的TTY。这意味着,你可以创建一个文件夹,在其中设置一个新的Linux系统,并随时切换到该“子系统”。

jq

json文件处理,格式化显示,支持高亮,可以替换python -m json.tool
cat demo.json | jq '.id, .name, .status, .attachments'
参考:命令行下解析JSON神器:jq

cloc

代码统计工具,能够统计代码的空行数、注释行、编程语言。
cloc --exclude-dir=font,img --not=match-f='(easyui)|(jquery)' --categorized=categorized_files.txt
参考:Git系列-相关小工具

expr

终端简单计算:expr 2 \* 9

factor

因数分解,不输出1:factor 22

shuf

Shuf命令随机从一个文件或文件夹中选择行/文件/文件夹。

# 从当前文件夹目录随机选择一个文件打印,n1替换成n2输出两个随机选择
ls | shuf -n1
# 从文件1.txt内容随机选择行打印输出
ls | shuf 1.txt

apropos

按照功能搜索命令。比如,apropos build filesystem 将会返回一系列名字和描述包括 “build” 和 “filesystem” 单词的工具。apropos 命令接受一个或多个字符串作为参数,-r 参数通过正则表达式来搜索。

pdftk

需额外安装,用来合并几个PDF文件:pdftk 1.pdf 2.pdf 3.pdf …. 10.pdf cat output merged.pdf

tig

字符模式下交互查看git项目,可以替代git命令。

mycli

MySQL客户端,支持语法高亮和命令补全,效果类似ipython,可以替代MySQL命令。

yapf

Google开发的python代码格式规范化工具,支持pep8以及Google代码风格。

mosh

基于UDP的终端连接,可以替代ssh,连接更稳定,即使IP变更,也能自动重连。

fzf

命令行下模糊搜索工具,能够交互式智能搜索并选取文件或者内容,配合终端ctrl-r历史命令搜索简直完美。
PathPicker(fpp):在命令行输出中自动识别目录和文件,支持交互式,配合git非常有用。
运行以下命令:git diff HEAD~8 –stat | fpp
htop: 提供更美观、更方便的进程监控工具,替代top命令。

axel

多线程下载工具,下载文件时可以替代curl、wget。
axel -n 20 http://centos.ustc.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso

sz/rz

交互式文件传输,在多重跳板机下传输文件非常好用,不用一级一级传输。

ccache

高速C/C++编译缓存工具,反复编译内核:gcc foo.c,改成:ccache gcc foo.c

neovim

替代vim。

script/scriptreplay

终端会话录制。

# 录制开始
script -t 2>time.txt session.typescript
# your commands
# 录制结束
exit
# 回放
scriptreplay -t time.txt session.typescript

you-get

非常强大的媒体下载工具,支持 YouTube、google+、优酷、芒果TV、腾讯视频、秒拍等视频下载。

pbcopy/pbpaste:

mac专有,把命令行输出拷贝到系统粘贴板:cat test.sh| pbcopy
把系统粘贴板内容拷到终端:pbpaste

say

mac下命令,支持多种语言(英语、普通话、粤语)文本朗读,支持各种销魂恐怖的语气:
for i in say -v ‘?’ | cut -d ’ ’ -f 1; do echo $i && say -v "$i" 'Hello World';done

foremost

foremost是一款根据文件头,尾和内部结构来尝试从镜像文件(或者磁盘)中恢复文件的工具。默认可以扫描出 jpg, gif, png, bmp, avi, exe, mpg, mp4, wav, riff, wmv, mov, pdf, ole, doc, zip, rar, html, cpp 文件。通过配置文件(默认为 /etc/foremost.conf),你还可以为它增加新的支持类型。
安装:sudo pacman -S foremost
扫描文件:sudo foremost -t 文件类型 -i 磁盘/镜像文件
误删一个 png 文件,运行sudo formost -t png -i /dev/sda1,扫描 /dev/sda1 分区,尝试查找其中的 png 文件,并将这些 png 文件保存到当前目录下的 output 目录中。-o 选项来指定存放文件的目录,但要注意,这个目录需要是空的。
sudo formost -t png -i /dev/sda1 -o /tmp/png
使用 T 选项让foremost自动根据当前时间戳来生成output目录,这时生成的目录是类似这样的 output_Thu_Mar__8_11_43_40_2018
sudo formost -t png -i /dev/sda1 -T
使用 -q 来加快磁盘或镜像文件的扫描速度,foremost 会仅仅在每个扇区的开始位置与文件头进行对比,这会极大地减少扫描时间,但可能会丢失一些嵌套在其他文件内的文件(比如嵌套在doc文件中的图片)。
sudo formost -q -t png -i /dev/sda1 -T
与 -q 常连用的是 -b number, 它可以指定磁盘每个扇区的大小,默认是512个字节。但对于 ext4 文件系统来说,这个值一般是4096.
sudo formost -q -b 4096 -t png -i /dev/sda1 -T
具体文件系统的扇区大小是多少,可以通过 dumpe2fs 来查看
sudo dumpe2fs /dev/sda1 |grep "Block size" |cut -f2 -d ":"
写一个脚本将 foremost 和 dumpe2fs 结合起来实现快速扫描。

TYPE=$1
DIR=$2
fs=$(df  ${DIR}|tail -n 1 |cut -f 1 -d " ")
block_size=$(sudo  dumpe2fs ${fs} |grep "Block size" |cut -f2 -d ":")
foremost -t ${TYPE} -q -b ${block_size} -i ${fs} -T

第一个参数指定文件类型
第二个参数指定被删掉文件所在的目录
第三行找出文件所属的磁盘
第四行找出磁盘块大小
第五行调用foremost扫描被删除的文件。

参考:

每天学点Linux命令之umask
有哪些命令行的软件堪称神器?
使用foremost恢复已删除文件

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142410.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!