Linux Shell
Linux Shell
shell是什么呢?
shell就是内核的一个外壳,用户通过shell来控制内核进而驱动硬件做事情
类似我们和朋友打电话,shell就充当电话的作用,通过命令向操作系统传递指令,告知它你想做什么,比如创建文件、管理程序等
1.命令
# 修改主机名【注意:修改完之后推出重新登录才能显示修改后的主机名】
hostname jaden
logout
# 查看主机名
hostname
# 查看主机的信息
hostnamectl
2.快捷键
Ctrl + a #光标跳转至正在输入的命令行的首部
Ctrl + e #光标跳转至正在输入的命令行的尾部
Ctrl + c #终止前台运行的程序,比如ping指令
Ctrl + d #在shell中,ctrl-d表示推出当前shell。
Ctrl + z #将任务暂停,挂至后台, 执行fg命令继续运行
Ctrl + l #清屏,和clear命令等效。
Ctrl + k #删除从光标到行末的所有字符
Ctrl + u #删除从光标到行首的所有字符
Ctrl + r #搜索历史命令, 利用关键字搜索
ctrl + w #光标往前删除一个参数,以空格为分割。
3.history
# 查看历史指令
history
# 查看历史命令后通过某个数字调用命令
!数字
# 自动匹配执行过的最近的一条命令
!某个命令的开头 然后回车
#清除历史记录【清除内存中的历史指令】
history -c
# 查看默认记录最近的指令条数
echo $HISTSIZE
# 修改默认记录最近的指令条数
vi /etc/profile
# 注意:
1.退出登录之后,内存中的历史指令才会同步到硬盘文件中
2..bash_history默认记录最近的1000条指令
注意:
对于history,操作系统的机制是执行各种各样的命令都是存储在内存中的,当清除了内存,退出登录后,内存中的记录会同步到硬盘中,当重新登录后,内存会从硬盘中读取记录,然后放到内存中
4.别名
# 查看别名
alias
# 添加别名【临时】
# alias 别名 = '指令'
alias ip='ip a|head -9|tail -1'
# 取消别名
unalias ip
注意:alias别名的优先级高于系统命令 别名一定要是可执行的,不能随便定义别名
# alias永久生效
cd /root
vi .bashrc
# 空白处,增加一行
alias ip='ip a|head -9|tail -1'
# 重新登录就生效了
vi 编辑器
1.光标
1.1 移动
进入编辑模式有三个按钮
- i ——> 在光标位置编辑
- o ——> 换行编辑,即新起一行编辑
- a ——> 在光标后一位编辑
vi /etc/services
:set number ——> 显示行号
# 快捷键
G(shift+g) ——> 跳到最后一行
gg ——> 跳到第一行
10gg/10G/:10 ——> 跳到第10行
$(shift+4) ——> 快速跳行尾
^ ——> 快速跳行首【第一个字符】
) ——> 快速跳行首【最前面】
ctrl+f 下翻一页
ctrl+b 上翻一页
ctrl+u 上翻半页
ctrl+d 下翻半页
1.2 删除复制
x删除单个字符【往后删】
10x删除10个字符
dd 删除光标所在行 # 其实dd是剪切的操作
6dd 从光标开始往下删除6行
dw 删除一个单词(word)
小p 粘贴粘贴板的内容到当前行的下面,比如将dd剪切的行黏贴到下面
大P 粘贴粘贴板的内容到当前行的上面
yy 复制行
5yy复制5行,复制的内容可以通过p\P来黏贴
# 恢复
u
1.3 搜索替换
搜索
/搜索内容 # 表示向后搜索字符串pattern 继续按小n向下和大N向上
替换
# 替换单个关键字
# 将第35行的qotd替换为xinyi
:35s/qotd/xinyi/g # :35s/旧的/新的/g
# 同时替换多行中的关键字
# 将第35行到40行之间的qotd替换为xinyi
:35,40s/qotd/xinyi/g # :35,40s/旧的/新的/g
# 从某行开始到末尾找到所有的关键字并替换掉
# 将第35行到末尾之间的qotd替换为xinyi
:35,$s/qotd/xinyi/g # :35,$s/旧的/新的/g
# 全文替换
# 搜索整个文件,将所有的old替换为new
:%s/old/new/g
# 全文替换【带有确认按钮】
# 搜索整个文件,将所有的old替换为new,每次都要你确认是否替换(y/n/a/..),
# y表示确认替换一个、n表示不替换、a表示全部替换
:%s/old/new/gc
1.4 保存退出
:w 将缓冲区写入文件,即保存修改到硬盘上,如果没保存,数据都只是在内存中
:wq 保存修改并退出
:x 保存修改并退出,和wq一样的效果。
:q 退出
:q! 强制退出,放弃修改
:wq! 强制保存修改并退出
2. vi原理
当vi
一个文件的时候,磁盘在创建该文件的时候,将会再一个创建.文件名.swp
隐藏文件,我们这个时候在进行编辑都是在内存中进行的,当:wq
保存后,磁盘将会删除源文件,然后把隐藏文件命名为源文件
输入输出重定向
输出重定向
不管用>
还是>>
,如果文件不存在,就自动创建
>
将命令执行结果不输出到屏幕上,输出到文件里,会清空原文件
# 将/etc/services中的前5行打印出来并写入到data.txt文件中
head -5 /etc/services > data.txt
echo 123 > data1.txt
>>
输出追加重定向,不会清空原文件
echo 111 >> data.txt
# 标准正确输出重定向
head -5 /etc/services > data.txt
# 标准错误输出重定向
head -5 /etc/services 1>right.txt 2>error.txt
# 清空文件内容
> data.txt
输入重定向
两者的区别在于
"""
前者直接把文件传递给cat命令
后者直接把文件内容传递给cat命令,即cat 仅接收到了内容,而不是文件本身
"""
cat data.txt
cat < data.txt
# 将data.txt中的数据输入过来并写入data1.txt中【写入data1.txt先将里面的数据清除掉】
cat < data.txt > data1.txt
# 基于cat实现不断的输出值【值都是打印到屏幕上】
cat << 0
# 基于cat实现不断的输出值并保存到data3.txt中【值都是打印到屏幕上】
cat << 0 > data3.txt
压缩和解压缩
tar
tar:能够解压的文件格式是xx.tar.gz
# 压缩:tar -zcf 压缩包路径 目标1 目标2 目标3【压缩到当前路径】
tar -zcf package.tar.gz data1.txt data2.txt data3.txt
# 压缩到指定路径
tar -zcf /tmp/package.tar.gz data1.txt data2.txt data3.txt
# 解压:tar -zxf 压缩包路径 -C 解压路径
# 注意:解压到指定路径必须要带-C参数;但是当前路径不需要带-C参数
tar -zxf package.tar.gz -C /tmp
# 归档并不压缩【和压缩的区别在于大小的区别】
tar -cf package.tar.gz data1.txt data2.txt
# 查看压缩包内容
tar -tf package.tar.gz
gzip
gzip
压缩文件,会自动删除原文件,和tar不同,tar会留着原文件
# 压缩【会自动删除原文件】
gzip 文件/目录
# 解压【会自动删除原压缩包】
gzip -d 压缩包
zip
zip
和tar
一样,会留着原文件
# 压缩【会保留原文件】
zip -r 压缩路径 文件/目录
# 解压【会保留原压缩包】
unzip data.zip
rar
windows上常见的rar格式的压缩包,在linux上其实比较难解压,需要安装专业的工具:
# 安装软件
yum install epel-release -y
yum install unar -y
# 解压rar包
unar -o 解压路径 被解压文件路径
eg: unar -o /opt 456.rar
文件传输
curl
与wget
# cur【自带】
curl -o ./utils https://github.com/atom/atom/archive/refs/heads/master.zip
# wget【需要自行安装】
yum install -y wget
wget 文件网址
wget https://github.com/atom/atom/archive/refs/heads/master.zip