Linux最常用的几个命令
Linux系统中的命令那是相当地丰富,不同的版本可能还有不同的命令,不过Linux核心自带的命令大概有几百个,这个不管是什么发行版一般都是共用的。
如果希望探索Linux的所有命令,可能不太实际,因为这个数字可能达到惊人的万计。
不过还好的是,Linux命令的入门只要掌握不到100个命令即可,而如果相对而言行云流水的话也就200个命令足矣。
而如果准备试试Linux,可能只需要下面的几个实用频率最高、功能最关键、也最常用的命令也就基本可以完成日常的工作、学习需要了。
忽然想用姓氏排序的方法,不过感觉不太行,索性就大概按照使用率来统计了。
仅个人习惯,会持续不间断更新和改进。
ls 列出当前目录下的文件📃和文件夹📁列表
个人感觉这个命令,属于名副其实用的最多的命令,我们进入Linux的第一个命令,可能除了输入用户名密码就属它了。
工欲善其事,必先利其器,你欲使用Linux,必先了解当前的文件和内容。
不加任何参数
如果不加任何参数,默认列出当前目录的内容。
$ ls /etc/sysconfig/network-scripts
ifcfg-em1
ifcfg-em2
ifcfg-em3
ifcfg-em4
....
使用-l显示更多细节
-l 就是使用long listing format长格式,来显示更多的内容信息。
$ ls -l /etc/sysconfig/network-scripts
total 264
-rw-r--r--. 1 root root 341 Nov 30 10:56 ifcfg-em1
-rw-r--r--. 1 root root 294 May 13 2016 ifcfg-em2
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em3
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em4
......
使用-t按照时间排序
如果希望看到最近创建的文件,就需要用到-t参数了。
$ ls -lt /etc/sysconfig/network-scripts/
total 264
-rw-r--r--. 1 root root 341 Nov 30 10:56 ifcfg-em1
-rw-r--r--. 1 root root 294 May 13 2016 ifcfg-em2
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em4
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em3
...
使用-r按照时间逆序
如果希望删除很早以前的文件,看到最早创建的文件,就需要用到-r参数了。
$ ls -ltr /etc/sysconfig/network-scripts/
total 264
...
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em3
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em4
-rw-r--r--. 1 root root 294 May 13 2016 ifcfg-em2
-rw-r--r--. 1 root root 341 Nov 30 10:56 ifcfg-em1
使用-S根据文件大小排序
$ ls -lS /etc/sysconfig/network-scripts/
total 264
...
-rw-r--r--. 1 root root 341 Nov 30 10:56 ifcfg-em1
-rw-r--r--. 1 root root 294 May 13 2016 ifcfg-em2
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em3
-rw-r--r--. 1 root root 272 May 10 2016 ifcfg-em4
更多内容参考:https://shaoguangleo.github.io/tags/ls/
cd 改变当前的工作目录
这个命令可能估计能排在第二,类似于Winows的双击,在不同目录件徜徉。
在各个文件夹遍历是我们的习惯和倔强的证明。
cd命令没有太多参数,但是有一些技巧所在,可以N多人从来没有用过。
cd直接使用即可,技巧是下面几个:
进入刚才的目录
想要进入刚才进入的地方(目测没有很多人再用,但是真的很好用)运行:
$ cd –
快速返回家目录
需要快速地回到你的家目录,输入cd
即可,这里其实不用一级一级的进入
$ cd
进入某用户的家目录
这个需要你有root权限
cd ~username
进入username的家目录。
更多内容参考:https://shaoguangleo.github.io/tags/cd/
mkdir - 创建目录
说到cd到某个目录,就需要提高创建目录,也就新建文件夹。
参数不过,处理默认什么参数也不加,会一个-p递归创建文件夹即可。
创建一个空目录
$ mkdir hello
递归创建多个目录
$ mkdir -p a/b/c/d/e/f/g
更多内容参考:https://shaoguangleo.github.io/tags/mkdir/
rm - 删除文件
rm
命令用于删除文件或者目录。
这个命令其实我不想把它归为最常用的命令,因为它也是最危险⚠️的命令之一,文件一旦通过rm命令删除❌,则无法恢复,所以必须格外一定切记小心地使用该命令。因为发生过很多欲哭无泪的故事。。。
文件如果少,可以使用-i
删除前逐一询问确认,确认时比较好用;
而下面的两个参数十分残暴,除非百分之两百确认,否则慎用:
-f
即使原档案属性设为唯读,也直接删除,无需逐一确认,是force的意思。-r
将目录及里面的子文件逐一删除。
更多内容参考:https://shaoguangleo.github.io/tags/rm/
cp - 复制文件
cp可以实现文件和目录的复制,如果你只会cp a b
,或者加上-r来递归目录,那么你还需要挖掘很多呀,比如只复制不存在或者更新的文件。
以下就是cp
常用的选项如下所示:
i
: 覆盖一个已经存在的文件前,提示用户进行确认r
:递归地复制目录及其内容,复制目录的时候必须使用这个参数u
:只复制不存在或者更新的文件v
:复制文件时,显示复制信息
组合rv - 可以拷贝文件或文件夹
这个在显示复制信息的时候,也可以复制目录
$ cp -rv dir1/* dir2/
‘dir1/a’ -> ‘dir2/a’
‘dir1/b’ -> ‘dir2/b’
‘dir1/c’ -> ‘dir2/c’
‘dir1/d’ -> ‘dir2/d’
拷贝时提示确认
这个参数在使用rm的时候已经记得使用,不然就像rm -rf /
一样,一个公司没有了。
$ cp -i dir1/* dir2/
cp: overwrite ‘dir2/a’? y
cp: overwrite ‘dir2/b’? y
cp: overwrite ‘dir2/c’? y
这个选项在文件超级多时候,慎用!!
只拷贝不存在或更新的文件
u
表示update
,也就是从一个目录拷贝到另外一个目录时,只会复制那些不存在或者目标目录相应文件的更新文件。
执行下面的命令:
$ cp -u dir1/* dir2/
可以得到:
$ ll *
dir1:
total 0
-rw-rw-r-- 1 user user 0 Jul 20 21:23 a
-rw-rw-r-- 1 user user 0 Jul 20 21:23 b
-rw-rw-r-- 1 user user 0 Jul 20 21:23 c
-rw-rw-r-- 1 user user 0 Jul 20 21:23 ddir2:
total 0
-rw-rw-r-- 1 user user 0 Jul 20 21:29 a
-rw-rw-r-- 1 user user 0 Jul 20 21:25 b
-rw-rw-r-- 1 user user 0 Jul 20 21:29 c
-rw-rw-r-- 1 user user 0 Jul 20 21:25 d
-rw-rw-r-- 1 user user 0 Jul 20 21:25 e
如何用cp拷贝指定序号的文件
现在有文件夹filename
,内有文档,名字是从1.txt, 2.txt, 3.txt
一直到9999.txt,10000.txt
,现在希望从第N
组数据即N.txt
到第M
组数据M.txt
的文件拷贝到别的文件夹中,方法如下:
$ cp {N..M}.txt newfilename/
这个方法可是相当的赞呀(≧▽≦)/,基本可以秒掉大多数的GUI程序了。
更多内容参考:https://shaoguangleo.github.io/tags/cp/
mv - 文件移动或者叫重命名
如果mv的命令还停留在重命名一个文件或者文件夹,那么就花3分钟看一下。
mv能做的还很多。
比如为了防止误删,mv可以提前做个备份;比如为了防止覆盖,可以考虑只有文件较新的时候才移动。
详细如下:
mv几个比较常用的选项如下:
- -b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份,文件后缀用~表示;
- -i或–interactive: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作,一般而言,对于不确定的时候可以用此选项,不过文件或文件夹居多时,最好不要用
- -f或–force: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件,强制的意思force
- -n或–no-clobber: 不要覆盖任何已存在的文件或目录。
- -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
常规操作
$ ls
a.txt$ mv a.txt b.txt$ ls
b.txt
直接移动或者叫做重命名,文件夹也类似的操作。
覆盖前备份
$ ls
a.txt a.txt~$ cp -b ../a.txt a.txt$ ls
a.txt a.txt~
可以看到此时多了一个备份文件
增量更新
$ cp -u a b
此时的操作为,只有a比b更新或者b不存在的时候,才会进行更新,否则失败。
这个用法多用在:当横向对比两个文价夹有无重要更新的时候才会用到。
交互提示
$ cp -i b.txt a.txt
cp:是否覆盖"a.txt"?
在文件存在的时候,-i选项会进行提示,此时需要输入y才能覆盖,而输入n就会取消这个操作。
更多内容参考:https://shaoguangleo.github.io/tags/mv/
pwd - 查看目录所在的命令
pwd
命令的作用是查看当前目录,没有参数,输入后回车即可显示当前绝对路径, 所以pwd
是Print Working Directory第一个字的缩写。
唯二需要了解的参数如下:
-L
,--logical
:打印逻辑路径,与pwd
一致-P
,--physical
:打印物理路径,这里可以从超级链接直达原处
实例展示
此时比如我们进入一个目录,然后在打印出来,如下:
$ cd /etc/sysconfig/network-scripts/$ pwd
/etc/sysconfig/network-scripts
可以看到pwd将输出完全路径
逻辑与物理路径
比如如下:
$ pwd
/opt/test$ ls -l
总用量 1
lrwxrwxrwx 1 root root 14 Jan 15 2012 dir -> source/dir
drwxrwxrwx 1 root root 14 Jan 15 2012 source
可以看到此时的路径在/opt/test/里面有两个目录source和dir,其中dir链接到source里面的dir。
接下来对比一下-L和-P的区别。
$ cd dir$ pwd
/opt/test/dir$ pwd -L
/opt/test/dir$ pwd -P
/opt/test/source/dir
从上面的输出可以发现,-P
参数会显示文件最原始的路径;而-L
则是逻辑上的路径。
更多内容参考:https://shaoguangleo.github.io/tags/pwd/
…
更多信息
Hi,XDJM们,更多信息欢迎移步原文或微信公众号letsProgramming.