文章目录
前言
- Linux命令是对Linux系统进行管理的命令
- 对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件(万物皆文件),Linux系统管理的命令是它正常运行的核心
- linux命令在系统中有两种类型:内置Shell命令和Linux命令
一、Linux命令基础
- 在Linux系统中,凡是在字符操作界面中输入的能够完成特定操作和任务的字符串,都可以称之为“命令”
- 严格一点来说,“命令”通常只代表了实现某一功能的指令或者程序的名称
1.Shell概述
- Linux命令的执行必须依赖于Shell命令解释器
- 用户:我们输入命令的界面
- shell实际上是在Linux系统中运行的一种特殊程序,在用户和内核之间充当"翻译官"的角色,负责接收用户输入的命令并进行解释,将需要执行的操作(翻译成二进制计算机语言)传递给系统内核执行
- 用户登录Linux系统时,Shell程序会自动加载,以便给用户提供可以输入操作命令的操作系统
- Bash是Linux系统中默认使用的Shell程序,文件位于/bin/bash
- 内核:是构成Linux操作系统最关键的组成部分,执行翻译后的命令,用于实现CPU和内存分配、进程调度、设备驱动等核心操作,面向硬件为主
2.Linux命令的分类
2.1 内部命令与外部命令的区别
- 根据Linux命令和Shell程序的关系,一般分为以下两种类型
内部命令 | 外部命令 |
---|---|
集成于Shell解释器程序(如Bash)内部的一些特殊指令 | Linux系统中能够完成特定功能的脚本文件或者二进制文件 |
属于Shell的一部分 | 属于Shell解释器程序之外的命令 |
没有单独对应的系统文件 | 每个外部命令对应了系统中的一个文件 |
自动载入内存,无需从硬盘中重新读取文件,用户可以直接使用 | Linux系统必须知道外部命令对应的文件位置,才能够由Shell加载并执行 |
- Linux默认会将存放外部命令、程序的目录(如/bin、/usr/bin、/usr/local/bin等)添加到用户的“搜索路径”中,当使用位于这些目录的外部命令时,用户不需要指定具体的位置,方便使用并增加效率
- 大多数情况下,不用刻意的去分辨内部命令和外部命令,其使用方法是类似的
2.2 Linux命令行的格式
- 在使用内部命令或外部命令时,参照一个通用的命令行格式使用格式,可方便理解Linux命令行的作用和工作方式
- 通用的命令行格式:
命令字 [选项] [参数] - Linux的命令(也包括文件名等等)对大小写是敏感的,也就是说,如果你输入的命令大小写不对的话,系统是不会做出你期望的响应的,所以英文要区别大小写
- 在实际使用Linux命令行的过程中,“选项”和“参数”的称谓经常混淆,甚至前后顺序也允许颠倒,但一般不会影响命令的执行效果,所有很多时候并不做严格区分
2.2.1命令字
- 命令字即命令名称,是整条命令中最关键的一部分
- 唯一确定一条命令,一定要确保输入正确没有错,如大小写等
执行的是操作,比如新建、删除、重命名等
2.2.2 选项
- 选项的作用是调节命令的具体功能,决定这条命如何执行
- 短格式选项:一般在选项前使用“-”符号引导,如“-”
多个单字符选项可以组合在一起使用,如“-al”等同于“-a -l” - 长格式选项:使用多个字符的选项时,一般在选项前使用“–”符号引导,如“–help”
- 长格式的选项意义明确,容易记忆,短格式的选项结构简单、输入快捷,且两种格式可以混用
- 若不使用选项,将执行命令字的默认功能
2.2.3 参数
- 命令字的处理对象
- 可以是文件名、目录(路径)名或用户名等内容
- 根据所使用的命令字的不同,命令参数的个数可以是零到多个
3.编辑Linux命令行
编辑Linux命令的时候,可以使用一下几个辅助操作,以提高输入效率
3.1 编辑Linux命令行的辅助操作
按键 | 作用 |
---|---|
Tab 键 | 自动补齐(命令字、文件或目录),按两次系统将输出可用的列表 |
反斜杠“\” | 如果输入的一行命令太长,终端会自动换行,有时为了显示美观及方便查看,可以使用“\强制换行(注:可能不能Tab),在下一行出现的“>”提示符后继续输入内容(+空格+\)作为上一行的延续 |
Ctrl+U | 清空至行首 |
Ctrl+K | 清空至行尾 |
Ctrl+L | 清屏 |
Ctrl+C | 取消本次命令编辑 |
Ctrl+a | 切换到行首 |
Ctrl+e | 切换到行尾 |
3.2 命令行提示字符
例:[root@localhost~]#
- root:当前登录系统的用户
- @:分隔符
- localhost:主机名称
- ~:当前所在的目录
- #:表示为管理员登录($:表示为普通用户登录)
二、Linux命令帮助
1.概述
- help提供内部命令的帮助
- man或info提供外部命令的帮助
- 如果你的英文足够好,那完全可以不靠任何人就精通linux,只要你会用man
- man实际上就是查看指令用法的help,学习任何一种UNIX类的操作系统最重要的就是学会使用man这个辅助命令
- man是manual(手册)的缩写字,它的说明非常的详细,但是因为它都是英文,看起来非常的头痛
- 建议大家需要的时候再去看man,平常嘛,记得一些基本用法就可以了
2.使用help命令
- help命令是Linux Shell中的一个内建指令,其用途是查看Shell内部命令的帮助信息
- 使用help命令时,只需要添加内部指令的名称作为参数即可
- 例如:直接输入“help pwd”指令可以查看Shell内部命令pwd的帮助信息(pwd命令用于显示当前用户所在的工作目录)
[root@localhost ~]# help pwd
pwd: pwd [-LP]
打印当前工作目录的名字。
选项:
-L 打印 $PWD 变量的值,如果它命名了当前的
工作目录
-P 打印当前的物理路径,不带有任何的符号链接
默认情况下,`pwd' 的行为和带 `-L' 选项一致
退出状态:
除非使用了无效选项或者当前目录不可读,否则
返回状态为0。
2.使用“- -help”选项
- 对于大多数Linux外部命令,可以使用一个通用的命令选项“- -help”,用于显示对应命令字的格式及选项等帮助信息
- 若该命令字没有“- -help”选项,一般只会提示简单的命令格式
- 例如:输入“ls --help”命令可以查看ls命令的帮助信息(ls命令用于显示文件或目录列表信息)
[root@localhost ~]# ls --help
用法:ls [选项]... [文件]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
Mandatory arguments to long options are mandatory for short options too.
-a, --all 不隐藏任何以. 开始的项目
-A, --almost-all 列出除. 及.. 以外的任何项目
--author 与-l 同时使用时列出每个文件的作者
......//省略部分内容(太多了,可以自己再打一遍慢慢看)
3.使用man手册页
- man手册页(Manual Page)是Linux系统中最为常用的一种在线帮助形式,绝大部分的外装软件在安装时为执行程序、配置文件提供了详细的帮助手册页
- 这些手册页中的信息按照特点的格式进行组织,通过统一的手册页浏览程序man进行阅读
- 例如:输入“man 命令”可以查看所输入命令的手册页信息(超级多,真特么详细看,这里就不列出来)
- 阅读man手册页时将以全屏的文本方式显示,并且提供了交互式的操作环境
按键 | 功能 |
---|---|
“↑”或者“↓” | 向上或者向下滚动一行文本内容 |
“Page up”和“Page Dowd(或空格键)” | 可以向上或者向下翻页显示 |
“Q”或者“q” | 退出手册页的阅读环境 |
"/"键 | 查找内容,例如“/-v”可以查找到“-v”选项的帮助信息,若找到内容过多,还可以按“n”键或者“N”键分别向下、向上进行定分选择 |
三、目录与文件基本操作
1.显示当前工作目录-pwd
- 显示用户当前所在的工作目录位置
##示例:
[root@localhost ~]# pwd
/root ##当前工作目录为管理员目录
[root@localhost ~]# cd /
[root@localhost /]# pwd
/ ##当前工作目录为根目录
2.切换工作目录-cd
- 将用户的工作目录更改到其他位置
格式 | 说明 |
---|---|
cd 目标位置 | 切换到目标位置 |
cd ~(家目录) | 若不指定目标位置,则切换到当前用户的宿主目录(家目录) |
cd | 同上 |
cd - | 切换到上一次执行cd命令之前所在的目录 |
- 通常使用需要切换到的目标位置(文件夹路径)作为参数
- 若不指定目标参数,默认将切换到当前用户的宿主目录(家目录)
- 宿主目录是Linux用户登录系统后默认的工作目录
- 在Linux操作系统中表示某个目录(或文件)的位置时,根据其参照的起始目录不同可以使用两种不同的形式,被称为绝对路径和相对路径
2.1 绝对路径
- 指明了文件在整个文件系统中的确切位置,不会有什么歧义,从文件系统的根目录"/"开始
- 因为Linux操作系统中的根目录只有一个,所以不管出于哪个目录中,使用绝对路径都可以非常准确地表示一个目录(或文件)所在的位置
- 但如果路径较长,输入的时候会比较繁琐
2.2 相对路径
- 由调用时的上下文给出(当前所在位置),在开头不使用“/”符号
因此使用的时候更加简单、便捷 - 相对路径主要包括如下几种形式:
表现形式 | 说明 |
---|---|
直接使用目录名或文件名 | 表示当前工作目录中的子目录、文件的位置 |
以一个点号“.”开头 | 表示以当前的工作目录作为起点 |
以两个点号“…”开头 | 表示以当前目录的上一级目录(父目录)作为起点 |
以“~用户名”形式开头 | 表示以指定用户的宿主目录作为起点 |
2.3 小结
- 相对而言,使用相对路径表示目录(文件)的路径形式灵活多变,通常用来标识当前目录“附近”的目录(文件)位置
- 而绝对路径常用来表示Linux操作系统中目录结构相对稳定(不经常改变)的目录
- 在选择相对路径或绝对路径时,应根据实际情况进行选择
3.列表显示目录内容-ls
- 显示目录中的内容,包括子目录和文件的相关属性信息等
ls [选项] [文件或目录…]
3.1常用选项
选项 | 作用 |
---|---|
-l | 显示文件(目录)的详细信息 |
-a | 查看隐藏文件(目录) |
-A | 查看隐藏文件,除了表示当前目录“.”和父目录“. .” |
-d | 显示目录本身的属性,而不是显示目录中的内容 |
-h | 更人性化的显示文件(目录)大小的单位信息 |
-R | 递归显示(如果有子目录,则会把子目录中的文件依次展现) |
–color | 以颜色区分文件类型 |
黑色:数据文件
白色:一般文件
蓝色:目录/文件
红色:压缩包
绿色;可执行的文件/命令文件/脚本
淡蓝色:链接文件/快捷方式
黄色:设备文件/磁盘文件
执行不带任何选项、参数的ls命令,可以显示当前目录中包含的子目录、文件列表信息(不包含隐藏目录、文件)
ls
执行“ls -ld”命令可以只显示当前目录的详细属性,而不显示目录下的内容
执行“ls -lh”可以以更易读(带单元格式)的长格式来查看文件信息
3.2结合通配符
- 使用ls命令时,还可以结合通配符“?”或“*”等以提高命令编写效率
- "?"∶ 代表任意一个字符,且至少1个
- "*"∶代表任意数个字符,可以是0个或者1个或者多个
- "[]"∶表示可以匹配字符组中的任意一个字符
[abc]、[a-f]
例:以下操作将以长格式列出/etc/目录下以“ns”开头、“.conf”结尾的文件信息
[root@localhost ~]# ls -lh /etc/ns*.conf
-rw-r--r--. 1 root root 1.8K 11月 25 18:47 /etc/nsswitch.conf
4.设置别名-alias
- 通过别名机制来简化常用的、比较长的命令,以提高使用效率
alias 命令别名=‘命令’(“=”两边不能有空格) - 示例:
- 设置myls为ls -alh的别名
alias myls=‘ls -alh’ - 可以定义一个名为myls的命令别名,以后再执行“myls”时即等同于执行“ls-alh”命令
- 这个相当于以前玩魔兽的改建,懂的都懂
- 设置myls为ls -alh的别名
- 取消别名
- unalias 命令别名
5.统计目录及文件空间占用情况-du
- 统计指定目录(或文件)所占用磁盘空间的大小
du [选项] [文件或目录….]
5.1 常用选项
选项 | 说明 |
---|---|
-a | 统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录 |
-h | 以更人性化的方式(默认以KB计数,但不显示单位)显示出统计结果 |
-s | 只统计所占用空间总的大小,而不是统计每个子目录、文件的大小(选项-a和-s不可同时使用) |
–max-depth=n | 统计所有小于等于第n层的目录的总大小 |
5.2 示例:
如果需要统计出这个文件夹内所有文件总共占用的空间大小,可以结合“-sh”选项,将要统计的目录“/var/log”为参数,
[root@localhost ~]# du -sh /var/log
7.6M /var/log/
如果需要分别统计多个文件所占用的空间大小,可以结合“-ah”选项
使用目录作为参数时,最后将列出该目录总共占用的空间大小
6.创建新目录-mkdir
- 创建新的空目录
mkdir [选项] 目录位置及名称… - 如果需要一次性创建嵌套的多层目录,必须结合“-p”选项,否则只能在已经存在的目录中创建一层子目录
- 示例
##在当前目录下创建名为 public_html 的子目录
[root@localhost ~]# ls
anaconda-ks.cfg 公共 视频 文档 音乐
initial-setup-ks.cfg 模板 图片 下载 桌面
[root@localhost ~]# mkdir public_html
[root@localhost ~]# ls
anaconda-ks.cfg 公共 图片 音乐
initial-setup-ks.cfg 模板 文档 桌面
public_html 视频 下载
##创建目录/aa,在/aa目录下创建子目录bb,在/aa/bb目录下创建子目录cc
[root@localhost ~]# mkdir -p /aa/bb/cc
[root@localhost ~]# cd /aa/bb/cc/
[root@localhost cc]# pwd
/aa/bb/cc
7.创建空文件-touch
- touch命令本来用于更新文件的时间标记,但在实际使用中经常用于创建新的测试文件
- 使用文件名作为参数,可以同时创建多个文件
- 当目标文件已存在时,将更新该文件的时间标记,否则将创建指定名称的空文件
- 格式:
touch 文件… - 示例
##创建两个空文件,文件名分别为aa.txt和bb.txt
[root@localhost /]# touch aa.txt bb.txt
[root@localhost /]# ls
aa.txt boot home media proc sbin tmp
bb.txt dev lib mnt root srv usr
bin etc lib64 opt run sys var
##或
##touch {a,b}.txt
8.创建链接文件-ln
- 为文件或目录建立连接文件,类似于windows系统的快捷方式
- 链接文件类型
- 软链接(又称为符号链接)
- 硬链接
软链接相当于快件方式
硬链接相当于给文件起了个别名
- 格式:
ln [-s] 源文件或目录… 链接文件或目录位置 - 示例:
(链接文件颜色为淡蓝色)
拓展
- 在Linux中,文件名和文件的数据是分开存储的,所以可能你只是删除了它,但是它还任然存在着
- 当一个文件拥有多个硬链接时,对文件内容修改,会影响到所有文件名
但是删除一个文件名,不会影响别的文件名的访问,只会使得"硬链接数"减 1 - 需要注意的是不能对目录做硬链接,且在日常工作中几乎不会建立文件的硬链接,了解即可
文件类型 | 软链接文件 | 硬链接文件 |
---|---|---|
删除源文件后 | 失效 | 仍然可用(文件占用空间与源文件相同) |
使用范围 | 适用于文件目录 | 仅适用于文件 |
保持位置 | 与源文件可在不同的文件系统中 | 必须与源文件在同一个文件系统(即同一个分区)中 |
与源文件的关系 | 相当于快捷方式 | 相当于给文件起了一个别名 |
inode号码 | inode号不同 | inode号相同 |
9.复制文件或目录-cp
- cd命令用于复制文件或目录,将需要复制的文件或目录(源)重建一份并保存为新的文件或目录(可保存在其他目录中)
- 格式:
cp [选项] …源文件或目录 …目标文件或目录… - 常用选项
选项 | 作用 |
---|---|
-f | 覆盖目标同名文件或目录时不进行提醒,而直接强制复制 |
-i | 覆盖目录同名文件或目录时提醒用户确认 |
-p | 复制时保持源文件的权限、属主及时间标记等树形不变 |
-r | 复制目录时必须使用此选项,表示递归复制所有文件及子目录 |
- 注∶复制多个文件或目录时,目标位置必须是目录,且目标目录必须已存在
10.删除文件或目录-rm(慎用!)
- 删除指定的文件或目录
- 格式
rm [选项] 要删除的文件或目录… - 常用选项
选项 | 作用 |
---|---|
-f | 删除文件或目录时不进行提醒,而直接强制删除 |
-i | 删除文件或目录时提醒用户确认(y表示删除,n表示不删除) |
-r | 删除目录时必须使用此选项,表示递归删除整个目录树(应谨慎使用) |
- 注∶ 不要直接删除系统中已有的目录或配置文件,以避免出现意外故障
- rm -rf:删除目录下文件最好先切换到目录下再执行该命令
- 使用rm相关命令一定要谨慎!
11.移动文件或目录-mv
- mv命令用于将指定的文件或目录转移位置,如果目标位置与源位置相同,则效果相当于为文件或目录改名
- 格式
mv [选项] … 源文件或目录 … 目标文件或目录 - 需要移动多个文件或目录时,目标位置必须是目录,而且目标目录必须已存在
- 如果在同一个目录下移动文件或者目录,则相当于执行重命名操作
[root@localhost ~]# ls
anaconda-ks.cfg 公共 图片 音乐
initial-setup-ks.cfg 模板 文档 桌面
yum_bak 视频 下载
[root@localhost ~]# mv yum_bak/ yum-bak
[root@localhost ~]# ls
anaconda-ks.cfg 公共 图片 音乐
initial-setup-ks.cfg 模板 文档 桌面
yum-bak 视频 下载
- mv命令只能对单个文件重命名,可使用rename命令批量修改文件名
- 格式:rename 旧格式 新格式 .旧格式
其中“.txt”表示以“.txt”结尾的所有文件 - 例∶
- 格式:rename 旧格式 新格式 .旧格式
12.查找命令文件存放目录-which
- which命令用于查找Linux命令程序并显示所在的具体位置,其搜索范围主要由用户的环境变量PATH决定(可执行“echo $PATH"命令查看),这个范围也是Linux系统在执行命令或程序时的默认搜索路径
[root@localhost /]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
- which命令使用要查找的命令或者程序名作为参数,默认当找到第一个目标后即不再继续查找,若希望在所有搜索路径中查找,则可以添加“-a”选项
- 使用which查找内部命令时,将找不到对应的程序
13.查找文件或目录-find
- find命令时Linux系统中功能非常强大的查找命令,可根据目标的名称、类型、大小等不同属性进行精细查找
- find命令在查找时采用递归的方式,其使用形式相当灵活,也可以相当复杂
- 格式:
find [查找范围] [查找条件表达式]- 查找范围对应在其中查找文件或者子目录的目录位置(可以有多个)
- 查找条件决定了find命令根据哪些属性、特征来进行查找
13.1 常用的几种查找条件类型
查找类型 | 关键字 | 说明 |
---|---|---|
按名称查找 | -name | 根据目标文件的名称进行查找,允许使用“*”及“?”通配符 |
按文件大小查找 | -size | 根据目标文件的大小进行查找,一般使用“+”、“-”号设置超过或小于指定的大小作为查找条件 |
按文件属主查找 | -user | 根据文件是否属于目标用户进行查找 |
按文件类型查找 | -type | 根据文件的类型进行查找:文件类型包括普通文件(f)、目录(d)、块设备文件(b;成块读取数据的设备,如硬盘、内存和光驱)、字符设备文件(c;按单个字符读取数据的设备,如键盘和鼠标)等 |
- 设置find命令的查找条件时,若需要使用“*”“?”通配符,最好将文件名用双引号括起来,避免当前目录下符合条件的文件干扰查找结果
例如,以下操作将在/etc目录中递归查找名称以“resol”开头、以“.conf”结尾的文件
[root@localhost ~]# find /etc/ -name "resol*.conf"
/etc/resolv.conf
- 使用“-type”查找条件可以过滤出指定类型的文件
例如,在以下目录中查找出所有的文件夹(对应类型为d),而忽略其他类型的文件
[root@localhost ~]# find /boot/ -type d
/boot/
/boot/efi
/boot/efi/EFI
/boot/efi/EFI/centos
/boot/grub2
/boot/grub2/i386-pc
/boot/grub2/locale
/boot/grub2/fonts
/boot/grub
- 系统管理员还可以根据文件属主(-user)查找,也就是根据文件是否属于目标用户进行查找
例如,执行以下命令即可递归查找/var/目录中属主为apache用户的文件
[root@localhost ~]# find /var/ -user apache
/var/lib/dav
/var/cache/httpd
/var/cache/httpd/proxy
13.2 使用find命令实现多个查找条件
- 各表达式之间使用逻辑运算符
- "-a"表示而且(and),即两个条件都需满足
- "-o"表示或者(or),即只需满足其一条件即可
- 示例
[root@localhost ~]# find /boot/ -size +1024k -a -name "vmlinuz"
[root@localhost ~]# find /boot/ -size +1024k -o -name "vmlinuz"
/boot/grub2/fonts/unicode.pf2
/boot/System.map-3.10.0-693.el7.x86_64
/boot/vmlinuz-3.10.0-693.el7.x86_64
/boot/initramfs-0-rescue-ebfb6260d8404c749ff81bfdbdf7a3be.img
/boot/vmlinuz-0-rescue-ebfb6260d8404c749ff81bfdbdf7a3be
/boot/initrd-plymouth.img
/boot/initramfs-3.10.0-693.el7.x86_64.img
/boot/initramfs-3.10.0-693.el7.x86_64kdump.img
13.3 find之exec用法
- find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了
- -exec参数后面跟的是Linux命令,它是以分号";“为结束标志,由于各个系统中分号会有不同的意义,因此在分号前面加上反斜杠转义符”\"
{}代表前面find查找出来的文件名 - 例:find 命令匹配到了当前目录下的所有普通文件,并在“-exec”选项中使用“ls -l”命令将它们列出
[root@localhost ~]# find ./ -type f -exec ls -l {} \;