shell基础命令
一:Shell
1.Shell 是一种脚本语言
Shell 是一种脚本语言,和Python语言类似,是一种解释型语言
任何代码最终都要被“翻译”成二进制的形式才能在计算机中执行
脚本语言的优点是使用灵活、部署容易、跨平台性好,非常适合 Web 开发以及小工具的制作
Shell 就是一种脚本语言,我们编写完源码后不用编译,直接运行源码即可
2.Shell 也支持编程
Shell 并不是简单的堆砌命令,我们还可以在 Shell 中编程 Shell 虽然没有 C++、Java、Python 等强大,但也支持了基本的编程元素,例如: if...else 选择结构,case...in 开关语句,for、while、until 循环; 变量、数组、字符串、注释、加减乘除、逻辑运算等概念; 函数,包括用户自定义的函数和内置函数(例如 printf、export、eval 等)
3.Shell 还能连接其它程序
内置命令
在 Shell 中输入的命令,有一部分是 Shell 本身自带的,这叫做内置命令
外部命令
有一部分是其它的应用程序(一个程序就是一个命令),这叫做外部命令
每个程序就是一个命令
Shell 本身支持的命令并不多,功能也有限,但是 Shell 可以调用其他的程序,每个程序就是一个命令
这使得 Shell 命令的数量可以无限扩展,其结果就是 Shell 的功能非常强大,完全能够胜任 Linux 的日常管理工作
1 文本或字符串检索
2 规模软件的自动部署
3 更改系统设置、监控服务器性能
4 发送报警邮件
5 抓取网页内容
6 压缩文件等
4.Shell命令的组成
命令 + 参数 + 选项 参数:一般带有-或者-- 选项:一般为文件目录或者文件的路径(绝对路径和相对路径皆可
二:文件管理命令
基本命令
选项 | 全称 | 作用 |
---|---|---|
pwd | Print Work Directory | 查看当前目录 |
ls | List | 列出当前目录的内容 |
cd | Change Direcory | 切换目录 |
cp | Copy | 复制 |
mv | Move | 移动 |
rm | Remove | 删除 |
mkdir | Make Direcories | 创建文件夹 |
rmdir | Remove Direcories | 删除文件夹 |
touch | Touch | 创建文件/更新文件时间戳 |
vi / vim | Visual editor / VI improved | 创建/编辑文件 |
tree | Tree | 查看目录树 |
cat | Concatenate files and print on the standard output | 查看内容较少的纯文本文件 |
less | Less | 查看文件内容 分页显示 可以向前、向后浏览 |
more | More | 查看文件内容 分页显示 只能向前浏览 |
tail | Tail | 动态查看 查看尾部信息 |
head | Head | 以行为单位,取文件的内容 |
grep | Global search Regular Expression and Print out the line | 全面搜索正则表达式 |
echo | Echo | 输出字符串或提取Shell变量的值 |
pwd
作用:
查看当前
所在的目录
(绝对路径)
语法格式:
pwd [选项]
常用选项:
选项 | 作用 |
---|---|
-L | 显示逻辑路径 |
实例:
pwd # /root
pwd -L # /root
ls
作用:
列出
指定目录下的内容及其相关属性信息
语法格式:
ls [选项] [目录名]
常用选项:
选项 | 作用 |
---|---|
-a | 显示所有文件及目录 (包括以“.”开头的隐藏文件) |
-l | 使用长格式列出文件及目录信息 |
-r | 将文件以相反次序显示(默认依英文字母次序) |
-t | 根据最后的修改时间排序 |
-A | 同 -a ,但不列出 “.” (当前目录) 及 “..” (父目录) |
-S | 根据文件大小排序 |
-R | 递归列出所有子目录 |
实例:
ls # 列出当前目录所有文件:anaconda-ks.cfg ls -l # 列出当前目录所有文件(详细):-rw-------. 1 root root 932 Nov 18 17:44 anaconda-ks.cfg ls -a # 列出当前目录所有文件(包括隐藏文件):. .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .pki .tcshrc .viminfo ls / # 列出根目录下所有文件:bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
ll
就相当于ls -l
cd
作用:
从当前目录切换
到指定目录(该目录可以是绝对路径,也可以是相对路径)
语法格式:
cd [参数] [目录名]
常用选项:
选项 | 作用 |
---|---|
-P | 如果切换的目标目录是一个符号链接,则直接切换到符号链接指向的目标目录 |
-L | 如果切换的目标目录是一个符号链接,则直接切换到符号链接名所在的目录 |
- | 切换到之前的目录 |
-- | 仅使用”-“选项时,当前目录将被切换到环境变量”OLDPWD”对应值的目录 |
~ | 切换至当前用户目录 |
.. | 切换至当前目录位置的上一级目录 |
. | 切换至当前目录(敲了和没敲一样) |
实例:
cd file1 # 切换到file1目录 cd .. # 切换到上级目录 cd ../.. # 切换到上上级目录 cd ~ # 切换到当前用户目录 cd - # 切换到之前的目录 cd . # 切换到当前目录(有点鸡肋....)
cp
作用:
复制
文件或目录
语法格式:
cp [参数] [文件/目录]
常用选项:
选项 | 作用 |
---|---|
-f | 若目标文件已存在,则会直接覆盖原文件 |
-i | 若目标文件已存在,则会询问是否覆盖 |
-p | 保留源文件或目录的所有属性 |
-r | 递归复制文件和目录 |
-d | 当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录 |
-l | 对源文件建立硬连接,而非复制文件 |
-s | 对源文件建立符号连接,而非复制文件 |
-b | 覆盖已存在的文件目标前将目标文件备份 |
-v | 详细显示cp命令执行的操作过程 |
-a | 等价于“dpr”选项 |
实例:
cp 1.txt 2.txt # 将当前文件夹下的1.txt 复制到 当前文件夹 名为2.txt cp 1.txt /usr/local/2.txt # 将当前文件夹下的1.txt 复制到 /usr/local目录 名为2.txt cp /media/song.mp3 /root/song2.mp3 # 将/media目录下的song.mp3 复制到 /root目录 名为song2.mp3
mv
作用:
移动
文件或对其重命名
语法格式:
mv [参数] [文件/目录]
常用选项:
选项 | 作用 |
---|---|
-i | 若存在同名文件,则向用户询问是否覆盖 |
-f | 覆盖已有文件时,不进行任何提示 |
-b | 当文件存在时,覆盖前为其创建一个备份 |
-u | 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作 |
实例:
mv 1.txt /media/ # 将当前目录下的1.txt 移动到 /media目录 mv 1.txt 11.txt # 将当前目录下的1.txt 重命名为 11.txt mv 11.txt file1/2.txt # 将当前目录下的11.txt 移动到 file1目录 重命名为2.txt mv new_file/ file1/ # 将当前目录下的new_file目录(空) 移动到 file1目录
如果移动的路径下有1个同名的目录,则会覆盖那个目录
rm
作用:
删除
一个目录中的一个
或多个文件或目录
,它也可以将某个目录及其下的所有文件及子目录均删除
语法格式:
rm [参数] [文件/目录]
常用选项:
选项 | 作用 |
---|---|
-f | 忽略不存在的文件,不会出现警告信息 |
-i | 删除前会询问用户是否操作 |
-r/R | 递归删除 |
-v | 显示指令的详细执行过程 |
实例:
rm 1.txt # 删除当前目录下的1.txt,需要再输入yes rm 1.txt -f # 删除当前目录下的1.txt,无需再输入yes rm /var/3.ini -f # 删除/var目录下的3.ini,无需再输入yes rm file1 -r # 递归删除当前目录下的flle1目录(包括该目录和目录下的所有文件) rm -rf * # 删除当前目录下所有文件 rm -rf /* # 删库跑路(且行且珍惜)
mkdir
作用:
创建
文件夹(如果要创建的目录已经存在,则提示已存在,而不会继续创建目录)
语法格式:
mkdir [选项] [目录]
常用选项:
选项 | 作用 |
---|---|
-p | 递归创建多级目录 |
-m | 建立目录的同时设置目录的权限 |
-z | 设置安全上下文 |
-v | 显示目录的创建过程 |
rmdir
作用:
删除
空目录(只能删除空目录;删除非空目录时,就要使用带有“-R
”选项的rm命令)
语法格式:
rmdir [选项] [目录名称]
常用选项:
选项 | 作用 |
---|---|
p | 用递归的方式删除指定的目录路径中的所有父级目录,非空则报错 |
-- -- ignore-fail-on-non-empty | 忽略由于删除非空目录时导致命令出错而产生的错误信息 |
-v | 显示命令的详细执行过程 |
-- -- help | 显示命令的帮助信息 |
-- -- version | 显示命令的版本信息 |
主要用于删除空目录,如果要删非空目录,建议直接用:rm -r 目录名
touch
作用:
- 创建新的空文件
- 改变已有文件的时间戳属性
语法格式:
touch [选项] [文件]
常用选项:
选项 | 作用 |
---|---|
-a | 改变档案的读取时间记录 |
-m | 改变档案的修改时间记录 |
-r | 使用参考档的时间记录,与 --file 的效果一样 |
-c | 不创建新文件 |
-d | 设定时间与日期,可以使用各种不同的格式 |
-t | 设定档案的时间记录,格式与 date 命令相同 |
--no-create | 不创建新文件 |
--help | 显示帮助信息 |
--version | 列出版本讯息 |
实例:
touch 3.txt # (如果3.txt不存在)创建3.txt文件(只会创建,不会打开文件) touch 3.txt # (如果3.txt已存在)更新3.txt文件的时间戳(只会更新文件的时间戳,不会打开文件) touch file{1,2,3}.txt # 批量创建1-3.txt/批量更新1-3.txt时间戳 touch file{1..5}.txt # 批量创建1-5.txt/批量更新1-5.txt时间戳
vi / vim
作用:
文本编辑器
(对文本进行创建、查找、替换、删除、复制和粘贴等操作)
语法格式:
vi [选项] [文件名]
常用选项:
选项 | 作用 |
---|---|
-s | 静默模式 |
-- -cmd<命令> | 加载任何vimrc文件之前执行指定命令 |
-R | 只读模式 |
-v | Vi模式 |
-e | Ex模式 |
-y | 简易模式 |
-- -- | 之后只有文件名 |
-c<命令> | 加载第一个文件之后执行指定命令 |
-s<脚本输入文件> | 从指定脚本输入文件阅读普通模式命令 |
-w<脚本输出文件> | 追加所有类型的命令写入脚本输出文件 |
-W<脚本输出文件> | 写入所有类型的命令到指定脚本输出文件 |
+ | 从文件末尾开始 |
+<行数> | 从指定行开始 |
-- -noplugin | 不要加载插件脚本 |
-p<数量> | 打开指定数量的标签页(带文件名) |
-r<文件名> | 恢复崩溃的会话 |
-L | 等同于-r |
-r | 列出交换文件并退出 |
-u<vimrc> | 熟用指定vimrc,而不是.vimrc |
-T<终端> | 设置使用指定终端 |
-o<数量> | 打开指定数量的窗口 |
-n | 不使用交换文件,只用内存 |
-Z | 受限模式 |
-m | 不允许修改(写入) |
-b | 二进制模式 |
-M | 在文本中不允许修改 |
实例:
vi 1.log # (如果1.log不存在)创建并打开1.log文件 vi 1.log # (如果1.log已存在)打开1.log文件 vi -R 1.log # 以只读模式打开1.log文件 vi # 进入vi编辑器
文件查看命令
选项 | 全称 | 作用 |
---|---|---|
tree | Tree | 查看目录树 |
cat | Concatenate files and print on the standard output | 查看内容较少的纯文本文件 |
less | Less | 查看文件内容 分页显示 可以向前、向后浏览 |
more | More | 查看文件内容 分页显示 只能向前浏览 |
tail | Tail | 动态查看 查看尾部信息 |
head | Head | 显示文件开头内容 |
grep | Global search Regular Expression and Print out the line | 全面搜索正则表达式 |
echo | Echo | 输出字符串或提取Shell变量的值 |
tree
作用:
以树状图
形式列出目录的内容
(包括目录里的文件,显示出指定目录的文件目录结构)
语法格式:
tree [选项]
常用选项:
选项 | 作用 | |
---|---|---|
-a | 显示所有文件和目录 | |
-A | 使用ASNI绘图字符显示树状图而非以ASCII字符组合 | |
-C | 在文件和目录清单加上色彩,便于区分这种类型 | |
-d | 显示目录名称而非内容 | |
-D | 列出文件或目录的更改时间 | |
-f | 在每个文件或目录之前,显示完整的相对路径名称 | |
-F | 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上“*”,“/”,“=”,“@”,“ | ”号 |
-g | 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码 | |
-i | 不以阶梯状列出文件或目录名称 | |
-I<范本样式> | 不现实符合范本样式的文件或目录名称 | |
-l | 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录 | |
-n | 不在文件和目录清单上加上色彩 | |
-N | 直接列出文件和目录名称,包括控制字符 | |
-p | 列出权限标示 | |
-P<范本样式> | 只显示符合范本像是的文件或目录名称 | |
-q | 用“?”号取代控制字符,列出文件和目录名称 | |
-s | 列出文件或目录大小 | |
-t | 用文件和目录的更改时间排序 | |
-u | 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码 | |
-x | 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外 | |
-L | 层级显示 |
实例
tree tree -L 2 # 只显示2层目录 tree -t # 用文件和目录的更改时间排序 tree -r # 以相反次序排序 tree -f # 在每个文件或目录之前,显示完整的相对路径 tree -d # 只显示目录 tree -a # 显示所有文件和目录
cat
作用:
在终端设备上显示文件内容
语法格式:
cat [选项] [文件]
常用选项:
选项 | 作用 |
---|---|
-n | 显示行数(空行也编号) |
-s | 显示行数(多个空行算一个编号) |
-b | 显示行数(空行不编号) |
-E | 每行结束处显示$符号 |
-T | 将TAB字符显示为 ^I符号 |
-v | 使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外 |
-e | 等价于”-vE”组合 |
-t | 等价于”-vT”组合 |
-A | 等价于 -vET组合 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
实例:
cat filename.txt # 查看文件的内容 cat -n filename.txt # 查看文件的内容,并显示行数编号 cat -n linuxcool.log > linuxprobe.log # 查看文件的内容,并添加行数编号后输出到另外一个文件中 cat /dev/null > /root/filename.txt # 清空文件的内容
less
作用:
分页显示工具
用less命令显示文件时,PageUp
键向上翻页,PageDown
键向下翻页,要退出less程序,应按Q
键。
less的作用与more十分相似,不同点为less命令允许用户向前或向后浏览文件,而more命令只能向前浏览 。
语法格式:
less [选项] [文件]
常用选项:
选项 | 作用 |
---|---|
-b | 置缓冲区的大小 |
-e | 当文件显示结束后,自动离开 |
-f | 强迫打开特殊文件,例如外围设备代号、目录和二进制文件 |
-g | 只标志最后搜索的关键词 |
-i | 忽 略搜索时的大小写 |
-m | 显示类似more命令的百分比 |
-N | 显示每行的行号 |
-o | 将less 输出的内容在指定文件中保存起来 |
-Q | 不使用警告音 |
-s | 显示连续空行为一行 |
-S | 在单行显示较长的内容,而不换行显示 |
-x | 将TAB字符显示为指定个数的空格字符 |
命令内部操作:
按键 | 作用 |
---|---|
b | 向后翻一页 |
d | 向后翻半页 |
h | 显示帮助界面 |
Q | 退出less 命令 |
u | 向前滚动半页 |
y | 向前滚动一行 |
空格 | 滚动一页 |
回车 | 滚动一行 |
实例:
less test.py # 查看文件 ps -ef |less # ps查看进程信息并通过less分页显示 history | less # 查看命令历史使用记录并通过less分页显示 less 001.log 002.log # 浏览多个文件 less file1 # 当正在浏览一个文件时,也可以使用 :e file2 # :e命令 打开另一个文件
more
作用:
显示文本文件内容
将内容较长的文本文件内容(不能在一屏显示完)进行分屏显示,并且支持在显示时定位关键字
对于内容较少的文本文件内容则推荐使用cat命令查看
语法格式:
more [选项] [文件]
常用选项:
选项 | 作用 |
---|---|
-num | 指定每屏显示的行数 |
-l | more在通常情况下把 ^L 当作特殊字符, 遇到这个字符就会暂停,-l选项可以阻止这种特性 |
-f | 计算实际的行数,而非自动换行的行数 |
-p | 先清除屏幕再显示文本文件的剩余内容 |
-c | 与-p相似,不滚屏,先显示内容再清除旧内容 |
-s | 多个空行压缩成一行显示 |
-u | 禁止下划线 |
+/pattern | 在每个文档显示前搜寻该字(pattern),然后从该字串之后开始显示 |
+num | 从第 num 行开始显示 |
命令内部操作:
按键 | 作用 |
---|---|
空格 | 显示文本的下一屏内容 |
回车 | 向下n行,需要定义,默认为1行 |
斜线符 | 接着输入一个模式,可以在文本中寻找下一个相匹配的模式 |
H | 显示帮助屏 |
B | 显示上一屏内容 |
Q | 退出more命令 |
Ctrl+F、空格 | 向下滚动一屏 |
Ctrl+B | 返回上一屏 |
= | 输出当前的行号 |
:f | 输出文件名和当前的行号 |
V | 调用vi编辑器 |
! | 调用Shell,并执行命令 |
实例:
more -dc file # 显示文件file的内容,显示之前先清屏,附已显示的百分比 more -c -10 file # 显示文件file的内容,每10行显示一次,而且在显示之前先清屏 more -p -5 file # 显示文件file的内容,每5行显示一次,而且在显示之后再清屏 more -s file # 逐页显示 file 文档内容,如有连续两行以上空白行则以一行空白行显示 more +20 file # 从第 20 行开始显示 file 之文档内容
tail
作用:
查看文件尾部内容
tail用于显示文件尾部的内容,默认在屏幕上显示指定文件的末尾10行
如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题
如果没有指定文件或者文件名为“-”,则读取标准输入。
语法格式:
tail [选项]
常用选项:
选项 | 作用 |
---|---|
--retry | 即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用 |
-c<N>或——bytes=<N> | 输出文件尾部的N(N为整数)个字节内容 |
-f<name/descriptor> | --follow<nameldescript>:显示文件最新追加的内容 |
-F | 与选项“-follow=name”和“--retry”连用时功能相同 |
-n<N>或——line=<N> | 输出文件的尾部N(N位数字)行内容 |
--pid=<进程号> | 与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令 |
--help | 显示指令的帮助信息 |
--version | 显示指令的版本信息 |
实例:
tail file # 显示文件file的最后10行 tail +20 file # 显示文件file的内容,从第20行至文件末尾 tail -c 10 file # 显示文件file的最后10个字符 tail -f 10 file # 一直变化的文件总是显示后10行 tail --help # 显示帮助信息
head
作用:
显示文件开头内容
以行为单位,取文件的内容,后面不接参数时默认打印前10行
语法格式:
head [选项] [文件]
常用选项:
选项 | 作用 |
---|---|
-n | 后面接数字,代表显示几行的意思 |
-c | 指定显示头部内容的字符数 |
-v | 总是显示文件名的头信息 |
-q | 不显示文件名的头信息 |
实例:
head 1.txt # 显示前10行文件内容 head -n 3 install.log # 显示前3行文件内容 head -v -n 2 test.txt # 显示文件名信息,并显示文件前两行 head -c 5 test.txt # 显示文件前5个字符
grep
作用:
全面搜索正则表达式,并将其打印出来
这个命令可以结合正则表达式使用,它也是linux使用最为广泛的命令
grep命令的选项用于对搜索过程的补充,而其命令的模式十分灵活,可以是变量、字符串、正则表达式
需要注意的是:一当模式中包含了空格,务必要用双引号将其引起来
语法格式:
grep [选项]
常用选项:
选项 | 作用 |
---|---|
-i | 搜索时,忽略大小写 |
-c | 只输出匹配行的数量 |
-l | 只列出符合匹配的文件名,不列出具体的匹配行 |
-n | 列出所有的匹配行,显示行号 |
-h | 查询多文件时不显示文件名 |
-s | 不显示不存在、没有匹配文本的错误信息 |
-v | 显示不包含匹配文本的所有行 |
-w | 匹配整词 |
-x | 匹配整行 |
-r | 递归搜索 |
-q | 禁止输出任何结果,已退出状态表示搜索是否成功 |
-b | 打印匹配行距文件头部的偏移量,以字节为单位 |
-o | 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位 |
实例:
grep test test* # 查找前缀有“test”的文件包含“test”字符串的文件
grep -r /root/mine dir # 用递归的方式查找/root/mine目录下的包含dir的文件
echo
作用:
输出字符串或提取Shell变量的值
语法格式:
echo [选项] [字符串]
常用选项:
选项 | 作用 |
---|---|
-n | 不输出结尾的换行符 |
-e “a” | 发出警告音 |
-e “b” | 删除前面的一个字符 |
-e “c” | 结尾不加换行符 |
-e “f” | 换行,光标扔停留在原来的坐标位置 |
-e “n” | 换行,光标移至行首 |
-e “r” | 光标移至行首,但不换行 |
-E | 禁止反斜杠转移,与-e参数功能相反 |
—version | 查看版本信息 |
--help | 查看帮助信息 |
实例:
echo "123" > 1.txt # 把123写入1.txt echo "456" > 1.txt # 把456写入1.txt,覆盖之前的内容 echo "789" >> 1.txt # 把789写入1.txt,追加到下一行
关机相关
冷关机
直接断电进行关机/强制关机(非正常关机
)
热关机
正常关机
shutdown -h now # 立刻关机 shutdown -h 0 # 立刻关机 shutdown -h 10 # 10分钟后关机 shutdown -h 14:00 # 下午14点关机 shutdown -c # 取消关机 shutdown -r now # 立刻重启 shutdown -r 0 # 立刻重启 shutdown -r # 10分钟之后重启 reboot # 立刻重启 halt # 立刻关机,需要人工关闭电源 poweroff # 立刻关机,并且关闭电源
解压缩相关
方式1 - tar
# 压缩 tar -czvf 1.tar.gz 1 # 把目录1打包成1.tar.gz # 解压 tar -xvf 1.tar.gz -C /usr/
cd /usr/local/ # 切换到/usr/local目录 mkdir 1 # 创建目录1 cd 1 # 切换到目录1 touch {1..20}.txt 1/ # 在目录1下创建1-20.txt 共20个文件 tar -czvf 1.tar.gz 1/ # 把 目录1 打包成 1.tar.gz rm -rf 1 # 删除目录1 tar -xvf 1.tar.gz # 解压 1.tar.gz tar -xvf 1.tar.gz -C /usr/ # 解压 1.tar.gz到/usr
方式2 - unzip
安装
yum install unzip -y
使用
zip 1.zip 1
1.解压tar.gz
文件
语法格式:
tar -zxvf
2.解压tar.xz
文件
Ⅰ.可以先将 外层用xz
解压 方式解压,,然后 里层用tar解压 方式解压:
xz -d *****.tar.xz
tar -xvf *****.tar
Ⅱ.直接使用如下命令解压:
tar xvJf ***.tar.xz