目录
导言
在 Linux 系统中,命令通常被定义为一种可执行程序,本质上就是可执行文件,它能够在终端中运行并为用户提供各种功能,用于对Linux系统进行管理。这些命令可以是内置的 shell 命令,也可以是独立的可执行文件,即一些外部命令。
一、Linux命令基础
1.1 Shell
Shell是Linux和Unix系统中用于与操作系统进行交互的命令行界面。它允许用户通过输入命令来执行各种任务,如文件管理、系统配置和软件安装等。Shell不仅是一个命令解释器,也是一个脚本语言,可以编写脚本来自动化复杂的任务。
• 在用户登录Linux系统时,将自动加载Shell程序。
• Shell是Linux系统中的一种特殊程序,在用户与内核间充当一个“翻译官”的角色。
• Bash是Linux系统中默认使用的Shell程序,其文件位置位于/bin/bash。
Shell作为“翻译官”的具体工作原理
1.接受用户输入的命令
2.解释命令
3.传递给系统内核执行命令
1.2Linux命令分类
• 内部命令:Linux系统中内置的 shell 命令,自动载入内存,可直接使用。
• 外部命令:Shell命令解释器程序外的一些命令,需由Shell加载后才能执行。
内部命令和外部命令的区别
内部:
• 集成于Shell解释器内部的指令,也称为内建指令。
• 没有单独对应的系统文件。
• 自动载入,可直接使用。
外部:
• Linux系统中能完成特定功能的脚本文件或二进制程序,属于Shell解释器程序外的命令
• 每个外部命令都对应了系统中的一个文件。
• 不能直接使用,必须知道其文件位置,由Shell加载后才能执行
如:/ibn,/usr/bin,/usr/local/bin等
1.3 Linux命令行格式
通用的命令行使用格式由三部分组成,分别为命令字、选项、参数。(区分大小写)
1.命令字:唯一确定命令功能,整条命令中最关键部分。
2.选项:多个单字符选项可以组合使用。
短格式选项:使用“-”符号引导。
长格式选项:使用“--”符号引导。
3.参数:命令字的处理对象,可以是文件名、目录名或用户名等,数量不限。
1.4 编辑Linux命令行
编辑Linux命令行的辅助操作
•Tab键:自动补齐
•反斜杠“\”:强制换行
•Ctrl + U组合键:清空至行首
•Ctrl + K组合键:清空至行尾
•Ctrl + L组合键:清屏
•Ctrl + C组合键:取消本次命令编辑
•Ctrl + a组合键:切换到行首
•Ctrl + e组合键:切换到行尾
二、Linux命令帮助
2.1 Linux命令帮助具体操作
• 内部命令 help
查看Shell内部命令的帮组信息
• 命令的“--help”选项
适用于大多数外部命令
• 使用man命令阅读手册页
1.使用向上和向下方向键(ENTER)查看一行文本
2.使用Page Up和Page Down (空格)键翻页
3.按住Q或q键退出阅读环境
4.按“/”键查找内容,n键向下查找,N键向上查找
三、Linux常用命令
3.1 查看及切换目录:pwd、cd、ls、du
3.1.1 查看当前工作目录-pwd
• 实例
[root@localhost~]#pwd
/root
3.1.2 切换工作目录-cd
• 将当前工作目录切换到其他目录
格式 | 说明 |
cd 目标位置 | 切换到目标位置 |
cd ~ cd | 若不指定位置,默认为切换到当前用户宿主目录 |
cd - | 退回到上一次执行cd命令前所在的目录 |
• 绝对路径:从根目录“/”为起点的路径称之为绝对路径
例如:/root,/etc/my-dir/,/opt/test.txt等等
• 相对路径:起点不是根目录“/”开始的都是相对路径
例如:test,./test,../test,~CJW/test,~/test等等
相对路径的表现形式
表现形式 | 说明 | 示例 |
直接使用目录名或文件名 | 表示当前目录的子目录或文件位置 | test.txt |
以一个"."点号开头 | 表示以当前目录(家目录)为起始 | ./test.txt |
以两个个".."点号开头 | 表示以当前目录的上一级目录(父目录)为起始 | ../test.txt |
以"~用户名"形式开头 | 表示以指定用户宿主目录为起始 | ~cjw |
以"~"形式开头 | 表示以当前用户宿主目录为起点 | ~ |
3.1.3 列表显示目录内容-ls
• 显示目录中的内容,包括子目录和文件相关属性信息
ls [选项] [文件或目录...]
• 一些常用选项
-l、-a、-A、-h、-R、-i、--color
-l | :以长格式(long)显示目录或文件列表,并包括大小、权限、最近修改时间等详细信息。 |
-a | :显示所有(all)子目录与文件信息,包括以点号"."开头的隐藏目录和文件。 |
-A | :显示所有(All)子目录与文件信息,但不包括以点号"."开头的隐藏目录和文件。如:当前目录"."和父目录".." |
-h | :以更人性化(human)方式显示目录或文件大小,默认大小单位为字节(Byte)。 |
-R | :以递归的方式显示指定目录和其子目录的所有内容 |
-i | :显示文件和inode号 |
• 结合通配符
"?": 表示任意一个字符,有且只有一个。
"*": 表示任意一组字符串,它可以是0个,一个或者多个字符。
"[]": 表示可以匹配字符组中的任意一个字符。
例如:[ab]、[a-d]
{a..z}或{1..10}:表示一个区间范围,如a b c...z和1到10
[a-z]: 表示匹配所有a-z的大小写,不包括大写的Z
[0-9]: 表示匹配数字范围(0123456789)
{a,b}: 表示a和b
3.1.4 统计指定目录(或文件)所占用磁盘空间的大小-du
du [选项] [文件或目录... ]
• 常用选项
选项 | 说明 |
-a | 统计磁盘空间占用大小时显示目录中的所有文件和子目录的磁盘使用情况,包括隐藏文件。 |
-h | 以更人性化的方式显示统计结果。(默认大小单位KB,但不显示单位) |
-s | 只统计占用磁盘空间的总大小,而不统计每个子目录、文件的大小 |
--max-depth=n | 统计所有小于等于第n层目录的总大小 |
注:-a和-s不可同时使用,命令功能互相矛盾。
• 统计出/var/log目录中子目录的大小
du -h --max-depth=1 /var/log
3.2 创建目录与文件:mkdir、touch、ln
3.2.1 创建新目录-mkdir
• 创建空的新目录
mkdir [选项] 目录位置及名称... 注:选项为“-p”时,课一次性创建嵌套多层目录。
例如:
• 在当前目录下创建名为 public-html 的子目录
mkdir public-html
• 创建目录/aa,在/aa目录下创建子目录bb,在 /aa/bb目录下创建子目录cc
mkdir -p /aa/bb/cc
3.2.2 创建空文件-touch命令
• 更新文件的时间标记
• 用于创建多个新的空文件
touch 文件...
例如:创建三个空文件,文件名分别为cc.txt,jj.txt和ww.txt
touch cc jj ww
touch {cc,jj,ww}.txt
3.2.3 创建链接文件-ln
• 为目录或文件建立链接文件,类似与Windows系统的快捷方式
• 链接文件类型
· 软连接(符号链接)
ln -s 源文件或目录 链接文件或目标位置
· 硬链接
ln 源文件或目录 链接文件或目标位置
• 实例
ln -s 1.txt test
ln 1.txt test
• 软,硬链接的区别
符号链接 | 与源文件大小 | inode号 | 文件属性 | 删除原文件后 | 跨文件系统 |
软链接 | 不一样 | 不一样 | 指向源文件 | 不能查看 | 支持 |
硬链接 | 一样 | 一样 | 独立文件 | 正常查看 | 不支持 |
删除源文件后,重新创建相同文件名,但内容不同的文件时,
软链接:指向文件名,内容与新建源文件相同。
硬链接:独立文件,内容不变,与删除前源文件内容相同
注:硬链接不重复占用空间
• 软,硬链接原理示意图
总而言之,硬链接文件和源文件在大小上是相同的,它们共享相同的底层数据块。它们在文件系统中有独立的名称,并且对一个文件的修改会影响到另一个文件。删除源文件不会影响硬链接文件,只要还有其他硬链接存在。
然而,软链接文件和源文件在大小上一般有很大差异,它只是一个包含源文件路径的文本文件,软链接文件通常只包含源文件路径的文本信息。在使用软链接文件时,用户实际上访问的是源文件,在实际应用中,软链接主要用于方便地访问和管理文件,而不是用于节省磁盘空间。
3.3 复制、删除、移动目录与文件:cp、rm、mv
3.3.1 复制文件或目录-cp
• 将需要复制的文件或目录(源)重建一份,并保存为新的文件或目录
cp [选项] 源文件或目录 目标文件或目录
• cp的常用选项:
-p | :复制时保持源文件的权限、属主及时间标记等属性不变 |
-r | :递归复制目标目录及其所有子目录或文件 |
-a | :完整保留所有信息包括链接文件,可以直接复制 |
-i | :覆盖目标同名文件或目录时提醒用户确认 |
-f | :覆盖目标文件或目录时不进行提醒,而直接强制复制 |
注:复制多个目录或文件时,目标位置必须是目录,且目标目录必须已存在。
3.3.2 删除文件或目录-rm
•删除指定的文件或目录
rm [选项] 指定要删除的目标文件或目录
•实例
rm -f /test/1.txt
rm -i /test/1.txt
rm -r /test
rm的常用选项:
-r | :递归删除目标目录及其所有子目录及文件 |
-i | :删除目录或文件时提醒用户确认 |
-f | :删除目录或文件时不进行提醒,而直接强制删除 |
注:不要直接删除系统中已有的目录或配置文件,以免出现意外故障。
PS:rm -rf /etc/yum.repos.d/*
删除目录下文件时建议切换到到目录下再执行rm -rf命令。
cd /etc/yum.repos.d/
rm -rf ./*
3.3.3 剪切目录或文件移动到目标文件-mv
• mv [选项] 源文件或目录 目标文件或目录
• 可移动,可剪切,可改名
3.4 查找目录和文件:which、find
3.4.1 查找命令文件存放目录-which
• 搜索范围由环境变量PATH决定(echo $PATH)
which 命令或程序名 | 默认当找到第一个目标后不再继续查找 |
which -a 命令或程序名 | 在所有搜索路径中查找 |
• 实例
which ls
which history
注:使用which查找内部命令时,将找不到对应程序。
3.4.2 查找文件或目录-find
• 以递归的形式,根据查找条件进行精确查找
find [查找范围] [查找条件表达式]
查找范围:查找文件或目录的位置,即查找路径。
查找条件表达式:查找条件类型
• 实例
PS:查找opt目录下,所有大于1G的文件,然后把他们移动到etc目录下
find /opt/ -size +1G -type f -exec mv {} /etc \;
解析:
find [查找路径] [查找条件] [处理动作]
查找路径:指定具体路径;默认为当前目录。
查找条件:可以对文件名、大小、类型、权限的标准进行查找;默认为找出指定路径下的所有文件。
处理动作:对符合条件的文件做操作,默认输出至屏幕(print)
补充:
s:套接字文件 b:块设备文件 c:字符设备文件 p:管道文件
-user USERNAME #查找属主为指定用户(UID)的文件
-group GRPNAME #查找属组为指定组(GID)的文件
-uid UserID #查找属主为指定的UID号的文件
-gid GroupID #查找属组为指定用户GID号的文件
-nouser #查找没有属主的文件
-nogroup #查找没有属组的文件
3.4.3 使用find命令实现多个查找条件
• 各表达式之间使用逻辑运算符
"-a"表示 而且 (and) "-o" 表示 或者 (or)
示例:
find /boot -type f -a -name "cjw"
find /boot -type f -0 -name "cjw"
PS:
找寻/etc/目录下,满足文件属性,或者50k以上大小,以及以.ttb为结尾的任何对象
find /etc/ -type f -size +50k -name "*.ttb" | wc -l
解析:
wc -l :统计文件内容有多少行
| 管道符:一个命令的标准输出作为另一个命令的标准输入。通过使用管道符,可以将多个命令链接在一起,以便将一个命令的输出传递给另一个命令进行进一步处理。
总结
本文就是对Linux命令整个学习认知的过程,具体了解了Shell的概念、作用和工作原理,Linux命令的格式和分类,还有常用命令的具体学习运用。总体而言就是对目录和文件的增、删、查、看、切、移、复制。其中重点需要重点注意的就是命令处理的对象、命令进行的处理动作(命令功能)、命令处理后的结果属性(是目录,文件还是文本)、还有就是命令具体的使用格式。