Linux 高手都是键盘侠,命令介绍和逐渐熟练(一)目录结构、帮助命令、文件目录操作

957 阅读22分钟

Linux(CentOS7)常用命令详解

Linux 曾经是许多新人的“噩梦”,当你真的面对它、了解它时你会发现命令的操作方式才是最纯粹最高效的操作方式。Linux并不复杂,只是不符合人类对实物操作的“直觉”,只要适应一段时间就好。这里梳理了我们在使用linux时常用的命令和这些命令的用法与使用场景,我们不用全部死记硬背,只需简单过目留个印象,并在遇到相同使用场景时来速查便可。只要稍微有一点计算机的基础、经过几次Linux的实践,你会发现它并没有那么可怕,反而会觉得它很高效,很直接,享受这个过程吧~

如果内容对大家有帮助,请大家【点赞】【收藏】,给予作者鼓励,感谢阅读。

一 先了解一下 Centos7 的目录结构:

在详解常用命令之前,先对Linux的树型目录结构做个简单的了解,如下所示:

简单说明:

/                 #根目录
/bin              #基础系统所需要的命令位于此目录,是最小系统所需要的命令,如:ls, cp, cd等等。这个目录中的文件都是可执行的,一般的用户都可以使用。
/dev              #设备文件,比如声卡、磁盘、鼠标、键盘等。
/etc              #系统管理和配置文件
/etc/init.d       #启动配置文件和脚本,可在这里添加启动脚本。
/etc/rc.local     #用户添加启动项
/home             #用户主目录,比如用户user的主目录就是/home/user,可以用~user表示
/lib              #标准程序设计库存放路径,又叫动态链接共享库,作用类似windows里的.dll文件
/sbin             #超级管理命令,这里存放的是系统管理员使用的管理程序。
/tmp              #临时文件目录,有时用户运行程序的时候,会产生临时文件。 /tmp就用来存放临时文件的。
/root             #系统管理员的主目录
/mnt              #用来临时挂载其他的文件系统
/lost+found       #这个目录平时是空的,系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。
/media            #即插即用型存储设备的挂载点自动在这个目录下创建,比如USB盘系统自动挂载后,会在这个目录下产生一个目录 
/proc             #虚拟文件目录,可直接访问这个目录来获取系统信息。
/var              #所有服务的登录文件或错误讯息档案(log files)都在 /var/log 里面
/boot             #包含Linux内核及系统引导程序所需要的文件,比如 vmlinuz initrd.img 文件都位于这个目录中。在一 般情况下,GRUB或LILO系统引导管理器也位于这个目录;
/usr              #最庞大的目录,要用到的应用程序和文件几乎都在这个目录,其中包含:
  usr/bin         #众多的应用程序
  /usr/sbin       #超级用户的一些管理程序
  /usr/include    #Linux下开发和编译应用程序所需要的头文件
  /usr/lib        #常用的动态链接库
  /usr/share/man  #帮助文档
  /usr/src        #源代码,Linux内核的源代码就放在/usr/src/Linux里
  /usr/local/bin  #本地增加的命令
  /usr/local/lib  #本地增加的库根文件系统
. :              #代表当前路径
.. :             #代表上一级目录
~ :              #代表用户目录路径

二.常用命令详解

1 **帮助命令 **

help- 显示命令的帮助信息

help 命令用于查看 Linux 命令的简短帮助语法,和 man 命令相比更加简洁。这里给出几个 help 命令的例子。

help cd: 查看 cd 切换目录命令的帮助,会显示:

cd: cd [dir]
    Change the current directory to DIR.
    
    The variable $HOME is the default DIR.
    
    Examples:
    cd /tmp      Change to the /tmp directory
    cd           Change to the user's home directory
    cd ~/bin     Change to the bin subdirectory of the user's home dir

2 文件目录操作

ls - 列出目录内容

ls 命令用于列出目录的内容,它的语法为:

ls [options] [file或dir]

如果不加任何参数,ls 会列出当前目录内容。我们可以给ls命令加上很多选项,这里详细说明几个常用选项:

  1. -a: 列出所有文件,包括隐藏文件。隐藏文件名称开头为 . 。
  2. -l: 以长格式列出文件信息,包括文件权限、属主、大小、创建日期等信息。
  3. -h: 以人类可读方式列出文件大小,如 1K、234M、2G 等。
  4. -s: 列出文件大小,对快速查找大文件很有帮。
  5. -S: 根据文件大小排序,最大的文件排在最上面。
  6. -t: 根据文件修改时间排序,最近修改的文件排在最上面。
  7. -r: 反转排序结果,例如文件默认按名字排序,加上 -r 后按相反顺序排序。
  8. -d: 仅列出目录,不列出其内容。
  9. -R: 递归列出目录下的所有子目录和文件的信息。例如:
# 列出所有文件,包括隐藏文件 
ls -a 

# 以长格式列出文件信息并且按大小排序
ls -laS

# 列出目录名,不显示内容 
ls -d */  

# 递归列出etc目录下的所有子目录和文件
ls -R /etc/ 

# 以人类可读格式列出文件大小,并反转排序结果
ls -h -rS

所以通过 ls 命令的各种选项,我们可以灵活地控制目录内容的显示方式和排序,这在日常的文件管理中非常实用。

cd- 切换当前工作目录

cd命令是Linux中最常用的命令之一,用于切换当前工作目录。cd的基本语法很简单:cd 目录路径它会切换到指定的目录路径。我们来看几个具体例子:

例1:切换到home目录

cd /home

例2:切换到用户软件下载目录

cd ~/Downloads

例3:从家目录切换到桌面,再返回根目录

cd ~/Desktop
cd ~ 

例4:从任意目录切换到上一级目录

cd .. 

例5:前往某个目录,操作完毕再返回之前所在目录

cd /var/log
#do something
cd - 

这些就是cd命令的一些基本语法和示例。通过cd命令,我们可以灵活地在Linux系统的各个目录之间进行切换。

cp- 复制文件或目录

cp命令用于Linux系统中的文件和目录复制。它的基本语法为:cp 源 目标将源文件的内容复制到目标中。我们来看几个常用例子:

例1:复制文件

cp file1.txt file2.txt

这将file1.txt复制为file2.txt。

例2:复制目录

cp -r dir1 dir2

这将dir1目录递归复制为dir2。-r参数用于复制目录。

例3:复制并重新命名

cp file1.txt file3.txt

这将file1.txt复制并命名为file3.txt。

例4:覆盖已存在的目标

cp -f file1.txt file2.txt 

这将强制覆盖file2.txt。-f参数用于强制复制。

例5:硬链接复制

cp -l file1.txt file2.txt

这将创建file1.txt的硬链接file2.txt。-l参数用于创建硬链接,硬链接的概念就像C语言里的指针。

例6:将文件复制到目录

cp file1.txt /home/user1

这将file1.txt复制到/home/user1目录中。

例7:交互式复制,避免覆盖

cp -i file1.txt file2.txt  

这会在覆盖已存在的file2.txt前提示用户确认。-i参数用于交互确认。

这些就是cp命令的一些常用语法和示例。通过cp,我们可以实现Linux文件的复制、重命名和创建硬链接。熟练使用cp命令可以大大提高我们的文件管理效率。

find - 在文件系统中查找文件和目录

find 命令用于在Linux系统中查找文件和目录。它的语法比较复杂,主要如下:find 路径 参数路径指定查找的目录起点,参数指定查找条件和动作。我们来看几个常用例子:

例1:根据名称查找文件

find /home -name "file1.txt"

这将在/home目录下查找名称为file1.txt的文件。

例2:根据大小查找文件

find /home -size +100M     # 查找大于100M的文件
find /home -size -100M     # 查找小于100M的文件
find /home -size 100M      # 查找刚好为100M的文件

例3:根据类型查找文件

find /home -type f -name "*.txt"   # 查找文本文件
find /home -type d -name "dir1"    # 查找目录  

例4:根据用户和权限查找文件

find /home -user user1      # 查找属主为user1的文件 
find /home -perm 777       # 查找权限为777的文件

例5:根据访问时间查找文件

find /home -atime -1       # 查找最近1天访问的文件  
find /home -atime +7      # 查找最近7天以上访问的文件

例6:结合-exec执行动作

find /home -name "*.txt" -exec rm {} \;     # 删除home目录下的txt文件
find /home -name "file1.txt" -exec cp {} /tmp \;   # 将file1.txt复制到/tmp

find命令非常强大,可以根据Linux文件的各种属性进行灵活的查找。再配合exec参数,可以对搜索结果实施指定的动作,大大提高文件管理效率。

mkdir- 创建一个新目录

mkdir 命令用于在 Linux 中创建目录。它的基本语法为:mkdir 目录名我们来看几个常用例子:

例1:创建一级目录

mkdir dir1

这将创建一个名为dir1的一级目录。例2:创建多级目录

mkdir -p dir1/dir2/dir3

这将创建dir1/dir2/dir3多级目录。-p参数用于递归创建不存在的上级目录。

例3:设置权限创建目录

mkdir -m 777 dir1

这将创建dir1目录并设置777权限。-m参数用于设置权限。

例4:作为其他用户创建目录

mkdir -u user1 -g group1 dir1

这将以user1用户和group1组的身份创建dir1目录。-u和-g参数用于指定用户和组。

例5:设置目录信异时间

mkdir -v dir1

这将创建dir1目录并显示详细信息。-v参数用于显示详细输出。

例6:无法覆盖已存在目录

mkdir dir1 
mkdir dir1

第二个mkdir dir1命令将无法执行,提示目录已存在。mkdir无法覆盖已存在的目录。以上就是mkdir命令的一些常用语法和示例。通过mkdir,我们可以轻松创建和管理Linux中的各级目录。

mv- 移动或重命名文件和目录

mv 命令用于在 Linux 中移动和重命名文件和目录。它的基本语法为: mv 源 目标 ,源和目标可以是文件或目录。我们来看几个常用例子:

例1:移动文件

mv file1.txt /home/user1/

这将 file1.txt移动到/home/user1/目录中。

例2:移动目录

mv dir1 /home

这将 dir1 目录移动到/home目录中。

例3:重命名文件

mv file1.txt file2.txt

这将file1.txt重命名为file2.txt。

例4:重命名目录

mv dir1 dir2

这将 dir1目录重命名为 dir2。

例5:强制移动文件,覆盖目标

mv -f file1.txt file2.txt  

这将强制覆盖已存在的file2.txt文件。-f 参数用于强制执行。

例6:交互式移动,避免覆盖

mv -i file1.txt file2.txt   

这会在移动file1.txt到已存在的file2.txt前提示用户确认。-i参数用于交互确认。

例7:将文件移动到目录

mv file1.txt dir1/

这将file1.txt移动到dir1目录中。mv命令用于灵活地在Linux系统中管理文件和目录的位置与名称。熟练掌握mv的各种语法,可以大大优化我们的文件管理效率。

pwd- 显示当前工作目录的路径

pwd 命令是一个非常简单但实用的Linux命令,用于显示用户当前工作目录的绝对路径。它的语法只有一条:pwd我们来看一个示例:例1:显示当前工作目录

pwd
/home/user1/dir1

这将显示用户当前所在目录为/home/user1/dir1。

pwd命令通常用于:

  1. 检查我们目前所在的目录路径,避免操作错误目录造成数据误删除等严重后果。
  2. 切换目录之后,快速确认我们是否切换到了正确的路径。
  3. 在脚本中获取当前工作目录的路径,用于其他命令的执行等。
  4. 当路径显示异常时,可以判断是否由于链接或其他原因导致路径混乱,需要及时修复。

rename - 重命名文件

rename 命令用于在 Linux 中批量重命名文件和目录。它的基本语法为: rename 's/旧字符/新字符/' * 这个命令会将所有文件名或目录名中的旧字符替换为新字符。我们来看一些常用例子:

例1:将所有.txt文件的后缀名改为.doc

rename 's/.txt/.doc/' *.txt

这将目录下所有.txt文件重命名为.doc文件。

例2:将文件前缀从“file”改为“doc”

rename 's/^file/doc/' *file*

这将所有文件名中前缀为file的改为doc。

例3:同时改后缀名和前缀

rename 's/^file.txt/doc.doc/' *file*.txt

这将文件名为file.txt的文件重命名为doc.doc。

例4:将空格替换为下划线

rename 's/ /_/' *

这将所有文件名和目录名中的空格替换为下划线。

例5:同时替换多个字符

rename 's/a/e/g;s/b/f/g;s/c/g/' *

这将文件名中所有a替换为e,b替换为f,c替换为g。rename命令可以根据我们指定的替换规则,实现Linux文件名和目录名的批量修改。熟练使用rename可以大大提高我们的文件管理效率。

rm- 删除文件或目录

rm 命令是Linux中用于删除文件和目录的命令。它的基本语法为:rm 文件或目录 我们来看几个常用例子:

例1:删除文件

rm file1.txt

这将删除file1.txt文件。

例2:强制删除文件

rm -f file1.txt

这将强制删除file1.txt文件,不提示确认。-f 参数用于强制删除。

例3:递归删除目录

rm -r dir1/

这将递归删除dir1目录及其子目录和文件。-r 参数用于递归删除。

例4:按模式删除文件

rm *.txt

这将删除当前目录下所有.txt文件。

例5:交互式删除,确认后删除

rm -i *.txt

这会在删除每个.txt文件前提示用户确认。-i参数用于交互确认删除。

例6:删除时不进入回收站,直接删除

rm -force *.txt  

这将直接删除.txt文件,不将其移入回收站。(部分桌面环境下可用)rm是Linux中删除文件和目录的最简单直接的命令,但同时也是最危险的命令之一。因为删除后无法恢复,所以在使用rm时一定要非常小心谨慎。熟练掌握rm的各种参数,可以更灵活高效地删除文件,但也充分理解其危险性,防止因误删除而造成数据损失。

rmdir - 删除空目录

rmdir 命令用于在Linux中删除空目录。它的基本语法为:rmdir 目录名我们来看几个常用例子:

例1:删除空目录

rmdir dir1

这将删除空目录dir1。

例2:删除多级空目录

rmdir dir1/dir2/dir3

这将递归删除多级空目录dir1/dir2/dir3。

例3:无法删除非空目录

rmdir dir1/*  

这将无法删除,提示dir1不是空目录。rmdir只能删除空目录。

例4:强制删除非空目录

rmdir --ignore-fail-on-non-empty dir1 

这将强制删除dir1目录,即使其不是空目录。(部分Linux版本支持)--ignore-fail-on-non-empty参数用于强制删除非空目录。

例5:递归删除上级目录

rmdir dir1 dir1/dir2

这将首先删除dir1/dir2子目录,然后再删除dir1目录。符合rmdir从下至上的删除顺序。rmdir与rm比较,rmdir只能删除空目录,且删除顺序从下至上。这可以最大限度避免误删除带有内容的目录。所以在删除目录时,推荐优先使用rmdir命令。熟练使用rmdir可最大限度避免误删除重要目录,提高目录操作的安全性。但同时也需要理解其只能删除空目录的限制,与rm命令的区别。

touch- 创建一个新文件或更新文件的访问和修改时间戳

touch命令用于在Linux中创建新的空文件或修改文件时间戳。它的基本语法为:touch 文件。我们来看几个常用例子:

例1:创建新文件。

touch file1.txt 

这将创建一个新的空文件file1.txt。

例2:修改文件时间戳

touch file1.txt

如果file1.txt文件已存在,这将只修改其最后修改时间。

例3:一次修改多个文件时间戳

touch file1.txt file2.txt file3.txt

这将同时修改file1.txt,file2.txt和file3.txt三个文件的最后修改时间。

例4:设置文件的访问时间

touch -a file1.txt  

这将仅修改file1.txt的最后访问时间,保留最后修改时间不变。-a参数用于设置访问时间。

例5:设置文件的修改时间

touch -m file1.txt  

这将仅修改file1.txt的最后修改时间,保留最后访问时间不变。-m参数用于设置修改时间。

例6:同时更新访问时间与修改时间

touch -am file1.txt

这将同时更新file1.txt的最后访问时间与最后修改时间。touch命令可以方便地创建新文件或补充更新已有文件的时间戳。时间戳的修改可以影响文件的各种属性,所以需谨慎操作。

tree- 以树状结构显示目录的内容

tree命令 用于以树状图列出目录结构。它的基本语法为:tree 目录 我们来看几个常用例子:例1:显示当前目录结构

tree 

这将显示当前目录及其子目录的树状结构。

例2:显示指定目录结构

tree /home 

这将显示/home目录的树状结构。

例3:深度限制

tree /home -L 2 

这将只显示/home目录下两层的树状结构。-L参数用于指定层 depth 数。

例4:过滤隐藏文件

tree /home -I '*~' 

这将显示/home的树状结构,但过滤隐藏文件。-I参数用于过滤符合模式的文件。

例5:输出保存至文件

bash
tree /home > tree.txt

这将/home的树状结构输出重定向保存到tree.txt文件中。

例6:显示每个目录 Occupation

tree -d /home  

这将仅显示/home的目录,不显示文件。-d参数用于仅显示目录。

例7:以图形方式显示

tree -A /home  

这将以ASCII字符图形方式显示/home的树状结构。-A参数用于ASCII图形输出。tree命令可以直观地以树状图显示目录结构,了解目录层次与组织。熟练使用tree的各种参数,可以让我们更清晰精细地浏览和分析系统目录。

basename - 提取文件名中的基本名称部分

basename 命令用于在Linux中获取或删除文件名路径中的目录与后缀部分。它的基本语法为:basename 文件路径 后缀。我们来看几个常用例子:

例1:获取文件名

basename /home/user1/file.txt 
file.txt

这将获取file.txt文件的基本名称,过滤路径。

例2:获取文件路径

basename /home/user1/file.txt .txt
/home/user1/file

这将获取file.txt文件的路径,过滤文件名与后缀。

例3:获取文件路径与名称

basename /home/user1/file.txt .txt  
/home/user1/file

这将获取file.txt文件的路径与基本名称,过滤后缀。

例4:删除文件名后缀

bash
basename file.txt .txt
file

这将获取file.txt的基本名称file,删除后缀.txt。

例5:删除文件路径

basename /home/user1/file.txt  
file.txt

这将获取file.txt的基本名称file.txt,删除路径/home/user1/。

例6:指定多个后缀删除

bash
basename file.txt .txt .doc
file

这将依次删除file.txt中的.txt后缀与.doc后缀,获取最终基本名称file。basename命令用于获取和处理文件路径与名称,对文件名称的提取、转换、修改等操作非常实用。熟练掌握basename的各项语法,可以让我们更高效地处理与管理文件。

dirname - 提取文件路径中的目录部分

dirname命令用于在Linux中获取文件路径,删除文件名与后缀部分。它的基本语法为:dirname 文件路径。

我们来看几个常用例子:

例1:获取文件路径

dirname /home/user1/file.txt 
/home/user1

这将获取file.txt文件的路径/home/user1,删除文件名file.txt。

chattr - 修改文件属性

chattr命令是Linux下对文件属性操作的命令。它可以设置文件的一些属性,如是否可变更(immutable)、是否可压缩(compress)、是否可重复数据删除(nodump)等。chattr的基本语法为:

bash
chattr [参数] [模式] 文件或目录

参数主要有:- + : 添加某属性
- - : 取消某属性
- = : 设置属性模式主要有: - i : 文件不能被修改,删除,重命名
- a : 仅允许追加
- c : 允许压缩
- u : 文件可以被任何用户不可见
- A : 只允许增加数据,不允许删除数据
- d : 文件可以被 dump备份工具备份例子:

# 让test文件不可修改,删除和重命名
chattr +i test

# 取消test文件不可修改属性 
chattr -i test  

# 让test文件只能追加内容
chattr +a test  

# 同时设置test文件只追加和压缩的属性
chattr +ac test

# 将test文件设置为dump备份和不可修改的属性 
chattr =di test

这些属性设置后,相关的操作会受到限制。比如设置了i属性的文件不能被 vi 打开修改。这在一定程度上可以增强系统安全性,防止关键文件的意外修改或删除。

lsattr- 显示文件属性

lsattr 命令是 Linux下显示文件扩展属性的命令。它可以显示 chattr 命令所设置的文件属性,如是否可变更 (immutable)、是否可压缩(compress)等。lsattr的基本语法为:

lsattr [可选参数] 文件或目录

可选参数主要有: - R : 递归显示目录下所有文件的扩展属性例子:

# 查看test文件属性
lsattr test
# 输出
----- test

# 设置test文件为不可修改后再查看
chattr +i test 
lsattr test
# 输出 
----i- test

# 设置test文件为不可修改和压缩后再查看
chattr +ci test
lsattr test 
# 输出
----ic test  

# 递归查看当前目录下所有文件的属性  
lsattr -R .

lsattr的输出由10个字符组成,分别表示:

  1. 文件的类型:'-'是普通文件,'d'是目录,'l'是链接文件
  2. 置位粘滞位(sticky bit)
  3. 用户ID位 (SUID)
  4. 用户组ID位 (SGID)
  5. 文件只能删除位 (nodump)
  6. 文件不可变更位 (immutable)
  7. 文件压缩位 (compress)
  8. 文件不可更改位置位 (nouchg)
  9. 文件自动锁定位 (auto-lock)
  10. 文件只追加位 (append only)lsattr命令可以让我们清晰地查看文件当前所设置的各种扩展属性,了解文件在这些方面的限制。它与chattr命令搭配使用,可以很方便地管理文件属性。

file- 确定文件类型

file 命令用于判断文件类型和文件格式,它会读取文件头部信息判断文件的格式和类型。file 命令的基本语法是:

file 文件路径

例如:

file a.txt 
# a.txt: ASCII text

file b.pdf
# b.pdf: PDF document, version 1.6

file c.mp3
# c.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v2,  128 kbps, 44.1 kHz, Stereo

file d.exe
# d.exe: PE32 executable (GUI) Intel 80386, for MS Windows

可以看到,file 命令会判断:

a.txt 是 ASCII 文本文件,b.pdf 是 PDF 文档,版本是 1.6,c.mp3 是 MP3 音频文件,具体参数如比特率等,d.exe 是 Windows 系统下的 GUI 可执行文件所以。

md5sum- 计算文件的 MD5 校验和

md5sum 命令用于计算和检验文件的 MD5 哈希校验值。MD5 算法会计算一个 128 位的数字指纹(hash value),这个指纹基本上是文件的唯一标识,可以用来校验文件是否被修改过。md5sum 命令的基本语法是:

md5sum 文件路径

例如:

md5sum a.txt
# 7981baadd1da60b0a6196fda1e987c1f  a.txt

md5sum b.pdf
# ceb2084b54b72ae090af92dfff27dc99  b.pdf 

md5sum c.mp3 
# 4fb8378515a043fa676f81a9d064e259  c.mp3

可以看到,md5sum 命令会输出文件的 MD5 哈希值,以及文件名。我们可以将这个 MD5 值存起来,以后重新计算这个文件 MD5 值,如果相同,说明文件未被修改;如果不同,说明文件已被修改过。

例如,我们存储 a.txt 的 MD5 值是 7981baadd1da60b0a6196fda1e987c1f。 一段时间后重新计算:

md5sum a.txt
# 4fb8378515a043fa676f81a9d064e259  a.txt

得到的 MD5 值不同,说明 a.txt 文件已被修改过。所以,md5sum 主要用来:

  1. 计算文件的 MD5 校验值 。
  2. 校验文件是否被修改过这在保证文件完整性和安全性方面具有重要作用,是 Linux 运维中的重要工具。总的来说,md5sum 命令通过计算文件的 MD5 校验值,可以校验文件是否被修改过,这在 Linux 系统运维中具有重要作用,是运维人员必须掌握的命令之一。