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

ziptar一样,会留着原文件

# 压缩【会保留原文件】
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

文件传输

curlwget

# 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
posted @ 2024-10-26 02:00  清风拂山岗(小高同学)  阅读(7)  评论(0编辑  收藏  举报