什么是Shell
- 链接Linux的桥梁
- 是一个应用程序
- 是一个解释器
- 最常用的bash和sh
路径
- 绝对路径:从根路径开始
- 相对路径:从当前目录开始
- 特殊路径:
. : 当前目录
.. : 上级目录
~ : 家目录
- : 上一步目录
注:系统根指的是 /
查看当前系统的版本
cat /etc/redhat-release
# CentOS Linux release 7.9.2009 (Core)
查看当前系统内核
uname -a
# Linux localhost.localdomain 3.10.0-1160.15.2.el7.x86_64 #1 SMP Wed Feb 3 15:06:38 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
查看本地指定的DNS域名和IP
cat /etc/hosts
# 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
# ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- 优先级高于/etc/resolv.conf
查看系统指定的DNS服务器
cat /etc/resolv.conf
# Generated by NetworkManager
# nameserver 114.114.114.114
查看系统设置环境变量的目录
echo $PATH 以:进行分隔
# /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/nginx/sbin:/root/bin:/usr/local/nginx/sbin
添加环境变量
/etc/profile 所用用户的环境变量
/root/.bash_profile 当前用户的环境变量
cd
cd /opt 切换到opt目录下
cd cd后面不跟任何路径,默认切换到当前用户的家目录下面
tree
tree 显示当前目录的目录结构
bash解析器中的快捷键
Ctrl + C : 终止当前命令的操作
ctrl + d : 退出,相当于exit
ctrl + z : 杀死当前进程
ctrl + l : 清屏
ctrl + a : 跳转到行首
ctrl + e : 跳转到行尾
ctrl + r : 搜索历史
esc + . : 上一条命令最后一个参数
!$ : 也是获取上一条命令最后一个参数
wget
wget -o /etc/yum.repos.d/Centos-7.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 将Centos-7的源下载到/etc/yum.repos.d/目录下
wget -o 链接地址 不指定路径默认为当前路径下
history
查看系统执行的命令历史。
- 家目录下
.bash_histroy
文件是保存执行命令历史的文件。
history 查看系统执行的命令历史
cat .bash_history 查看执行命令历史文文件的内容
history -c 清空历史命令
修改主机名
方式一:
hostnamectl set-hostname svr7
bash 重新开启一个新的bash进程,相当于在当前的进程下开启了一个子进程
方式二:
echo svr7 > /etc/hostname
bash 重新开启一个新的bash进程,相当于在当前的进程下开启了一个子进程
重启与关机
reboot 立即重启
init 6 立即重启
shutdown -r 10 10分钟后重启
shutdown -r 8:30 8:30重启
poweroff 立即停止系统,并且关闭电源
shutdown -h 0 立即关机(now)
shutdown -h 10 10分钟后关机
- 取消正在进行的关机或重启
showdown -c
目录文件结构
- 淡蓝色指的是软连接(快捷方式)
- 绿色指的是可执行文件
cd / 切换到/下
ls -l 查看/下的目录
bin ---> usr/bin 存放普通用户可执行的命令
sbin ---> usr/sbin 存放超级管理员可执行的命令
boot 系统启动文件
root 超级管理员的家目录
home 普通用户的家目录
lib 32位使用的目录
lib64 64位使用的目录
tmp 系统文件目录,一般是第三方软件存放的目录,也是回收站目录
usr 存放系统执行文件的目录,相当于windows中的C盘的windows目录
etc Linux系统配置的目录
dev Linux系统的设备目录(/dev/null 黑洞设备,只进不出)
srv 物理设备产生的一些文件
sys 硬件设备的驱动程序信息
proc 虚拟文件系统,反映出来的是内核,进程信息或实时状态(临时信息)
/proc/meminfo: 内存信息 /proc/cpuinfo: cpu信息
run 存放一些进程编号的目录
opt 下载文件的目录
mnt 相当于windows系统的USB
var
1. 存放系统临时文件的目录
2. 存放系统日志的目录
3. 系统运行时产生的文件
lost+found
ext2/ext3的文件系统格式才会产生lost+found目录 孤儿文件
lost+found目录一般情况下时空的,当系统故障或者突然关机的时候,丢失的一些文件,在这里能找回,只有root用户才能打开。
Linux系统常用的配置文件
- /etc
/etc/sysconfig/network-script/ifcfg-* 网络配置文件
/etc/hostname 系统主机名配置文件
/etc/resolv.conf dns客户端配置文件
/etc/hosts 本地域名解析配置文件
/etc/fstab 系统挂载目录,开机启动挂载列表
/etc/passwd 系统用户文件
文件管理
- 文件的各种类型
drw------- d 代表目录
-rw------- - 代表普通文件
lrw------- l 代表软连接
prw------- p 管道文件
crw------- c 设备文件(字符设备)打印机,终端(/dev)
brw------- b 存储设备硬盘(/dev/sda1)
srw------- s 套接字文件, 进程间通信
- 增 删 改 查 移动 权限
- 增
· 目录
mkdir /dir
mkdir -p /dir/a/b/c (-p)递归创建
tree /dir 查看dir下的目录结构
# /dir
# └── a
# └── b
# └── c
mkdir -pv /dir/A/B/C (-v)打印出整个目录的创建过程
# mkdir: created directory ‘/dir/A’
# mkdir: created directory ‘/dir/A/B’
# mkdir: created directory ‘/dir/A/B/C’
-m 设置创建文件夹的权限
· 文件
touch a.txt b.txt c.txt 同时创建多个文件
touch {a..z}.txt 创建a.txt , b.txt , ... z.txt # {}必须是..
touch {abc,bcd,fgh}.txt 创建abc.txt , bcd.txt , fgh.txt
- 查
· 文件查询(ls)
ls -a /root 查看影藏文件
ls -l /root 查看root目录下文件和目录属性
ls -i /root 打印文件的索引号
ls -lh /root 显示可读文件大小(kb)
ls -ld /root 查看目录本身的属性
ls -F /root 给文件添加标识符
· 查看一个文件的内容(cat)
cat -n /root/a.txt 显示内容并加上行号
· 查看文件开头(head)
head /etc/passwd 从头开始打印文件,默认打印前10行
head -n 2 /etc/passwd 打印前2行
head -2 /etc/passwd 同上,打印前2行
head -c 100 /etc/passwd 打印前100字节的内容
head -c -100 /etc/passwd 去掉后100个字节的内容
· 查看文件结尾(tail)
tail /etc/passwd 从尾部开始打印文件,默认打印10行
tail -n 2 /etc/passwd 打印最后2行
tail -2 /etc/passwd 同上,打印最后2行
tail -c 100 /etc/passwd 打印最后100字节的内容
tail -f /opt/a.txt 实时监控文件新增内容(两个终端测试)
· 查看文件夹层级(tree)
tree 显示目录结构
pwd 查看当前目录绝对路径
- 修改(编辑)
vi/vim 编辑器,文本编辑工具(vim相当于vi的升级版)
vi/vim编辑器的编辑流程
1. 打开文件
2. 创建swp文件,用于临时存储文件修改内容
3. 选择输入模式进行修改内容
4. 进入末行模式,使用指令进行操作
5. 退出
· 输入模式
需要指定输入模式的方法
i : 在光标处之前插入内容
a : 在光标前之后插入内容
o : 在光标下一行输入内容
A : 在光标所在的行尾输入内容
· 保存内容
1. 按键盘上的Esc键
2. 按冒号键进入末行模式
3. 执行命令,对文本进行操作
4. w 保存当前编辑的内容 q 退出编辑器
- 命令模式
光标跳转到行尾
Shift + a 和 Shift + 4($)
光标跳转到行首
0键
删除一行
dd
删除多行
ndd 删除n行
复制一行
yy
复制多行
nyy 复制n行
粘贴
p(粘贴在光标的下一行)
P(粘贴在光标的上一行)
撤销
u 每按一次撤销一次
跳转到页尾
G
跳转到页首
gg
跳转到指定行
nG 跳转到n行
- 末行模式(:)
强制退出
q! 修改内容不保存退出
取消标记颜色
noh
显示行号
set nu
取消显示行号
set nonu
行内替换
s/old/new 替换当前行第一个"old"
s/old/new/g 替换当前行所有的"old"
区域内替换
n,m s/old/new/g 替换n-m行所有的"old"
% s/old/new/g 替换文件内所有的"old"
文件操作
w /opt/a.txt 另存为其它文件(其他文件必须是新建文件)
r /opt/b.txt 读入其他文件内容
Ctrl + v : 选中多行
第一步 : 选择多行
第二步 : 编辑模式进行文件(shift+i)
第三步 : 按ESC选择的多行数据同时发生变化
第四步 : 保存
需要复制文本13-20行,并粘贴在1行下面
第一步 : 把光标移动到第1行
第二步 : 复制13-20行(:13,20y)
第三步 : 按p
- 移动
mv a.txt /opt/ 将当前路径下的a.txt移动到/opt/目录下
mv a.txt A.txt 重命名a.txt为A.txt(移动到当前文件夹中)
- 删除
rm /opt/a.txt 不加选项需要确认是否要删除
# rm: remove regular file ‘/opt/a.txt’? y
rm -f /opt/A.txt -f取消确认交互,直接删除。
rm -r /opt -r递归删除(多层级删除)
-i增加删除前的提示
which rm 查看rm的执行文件
# alias rm='rm -i'
# /usr/bin/rm
/usr/bin/rm b.txt 使用执行文件可以直接删除
/usr/bin/rm -i B.txt 加了-i需要确认后才可以删除
# /usr/bin/rm: remove regular file ‘B.txt’? y
rm的简写
rm c.txt
# rm: remove regular empty file ‘c’? y
\rm c.txt 直接删除c.txt
# \rm 等价于 /usr/bin/rm
- 查
find查找
使用find查找包含当前目录本身和影藏文件
格式 : find 搜索路径 选项 选择匹配值 指令(-print)
- find指令
-print(输出结果,默认) -ls类似于ls -lhi (文件属性加上索引和大小)
· 在目录层次结构中搜索文件
- 根据名称查找文件
find / -name "redhat-release" 查询redhat-release文件路径
通配符*:匹配所有(包含空)
find / -name "eth0*" 查询/下以eth0开头的文件
find / -name "*eth0" 查询/下以eth0结尾的文件
find / -name "*eth0*" 查询文件名包含eth0的文件
通配符[]:匹配括号中的任意一个字符
touch abc{1..9}
find /root/ -name "abc[359]" 查询abc开头以3,5,9结尾的任意字符
# /root/abc3
# /root/abc5
# /root/abc9
通配符?:匹配任意一个字符(不包含空)
touch /root/abc /root/abc10
find /root/ -name "abc?"
# /root/abc[1-9]
find /root/ -name "abc*"
# /root/abc[1-10] /root/abc
通配符[^]:除了[]内的其他所有且与""相匹配的内容
find /root/ -name "abc[^359]"
# /root/abc1
# /root/abc2
# /root/abc4
# /root/abc6
# /root/abc7
# /root/abc8
! : 对整个搜索结果取反
find /root/ ! -name 'abc[359]' 匹配/root目录下出了abc3,abc5,abc9以外的所有内容
# /root/
# /root/.bash_logout
# /root/.bash_profile
......
i : 忽略大小写
touch /root/Abc{1..3}
find /root/ -iname "abc*"
/root/abc1
......
/root/abc10
/root/abc
/root/Abc1
/root/Abc2
/root/Abc3
- 根据文件大小查找(不精确查找)
· size 单位: b(默认:字节) c(文件显示的默认单位) K M G
size n(单位)
+n : 大于n个单位
-n : 小于n个单位
n : 等于n个单位,但是不精确,且只支持整型
# 查询2k大小的文件等于大于1k且小于等于2k的文件
find /root -size +1k 查询root目录下大于1k的文件
find /root -size -1k 查询root目录下小于1k的文件
find /root -size 1k 查询root目录下等于1k的文件
find /root -size -500c 查询root目录下小于500c的文件
选项 -a(默认使用)和-o
find /root/ -size +2k -a size -10k 查询root目录下大于2k且小于10k的文件
find /root/ -size +2k size -10k -a可以不需要写
find /root/ -size -10k -o size +100k 查询root目录下小于10k或者大于100k的文件
- 按照时间查找
按照文件的创建时间,修改时间以及访问时间进行筛选查找
mkdir /test
cd /test
创建三条今天以前创建的数据
date -s "2021-3-26 19:30:10" 将系统时间修改成3-26
# Fri Mar 26 19:30:10 CST 2021
touch 03-26.txt 创建一个文件03-26.txt
date -s "2021-3-25 19:30:10" 将系统时间修改成3-25
# Thu Mar 25 19:30:10 CST 2021
touch 03-25.txt 创建一个文件03-25.txt
date -s "2021-3-24 19:30:10" 将系统时间修改成3-24
# Wed Mar 24 19:30:10 CST 2021
touch 03-24.txt 创建一个文件03-24.txt
ntpdate ntp.aliyun.com 同步互联网时间
touch 03-27.txt 创建一个文件03-27.txt
ls -lh
total 0
# -rw-r--r-- 1 root root 0 Mar 24 19:30 03-24.txt
# -rw-r--r-- 1 root root 0 Mar 25 19:30 03-25.txt
# -rw-r--r-- 1 root root 0 Mar 26 19:30 03-26.txt
# -rw-r--r-- 1 root root 0 Mar 27 19:43 03-27.txt
-mtime 文件和目录内容修改的时间
find ./ -mtime 2 2天前当天修改过的文件和目录
# ./03-25.txt
find ./ -mtime -2 2天以内修改过的文件和目录
# ./03-26.txt
# ./03-27.txt
find ./ -mtime +2 2天以外修改过的文件目录
# ./
# ./03-24.txt
-ctime 文件和目录变更属性时间(修改了位置(mv)、所属组、所有者)
查询文件创建时间-ctime
find ./ -ctime 2 2天前当天变更属性的文件和目录
find ./ -ctime -2 2天以内变更属性的文件和目录
find ./ -ctime +2 2天以外变更属性的文件和目录
-atime 文件和目录访问时间(cat,vim)
find ./ -atime 2 2天前当天被查看的文件和目录
find ./ -atime -2 2天以内被查看的文件和目录
find ./ -atime +2 2天以外被查看的文件和目录
- 按照属性查找(-type)
f : 普通文件
d : 目录文件
l : 快捷方式
b : 设备文件
s : 套接字文件
p : 管道文件
cd /root
find ./ -type f 查找当前目录下的文件
find ./ -type d 查找当前目录下的目录
cd /dev
find ./ -type b 查找当前目录下的设备文件
find / -type s 查找/下的套接字文件
find / -type p 查找/下的管道文件
find指令
常用的find指令
find ./ -type f -print (默认)打印当前目录下的文件
find ./ -type f -ls (ls -lhi)打印当前目录下的结果详情
# 34292038 4 -rw-r--r-- 1 root root 18 Dec 29 2013 ./.bash_logout
# 34292039 4 -rw-r--r-- 1 root root 176 Dec 29 2013 ./.bash_profile
find ./ -name "adc*" -delete 删除结果集
find和xargs命令配合
find [路径] [选项] 参数 | xargs -I {} ...(其他命令做处理)
find ./test -name "a.txt" | xargs -I {} cat {}
上传与下载
- 从互联网上下载
格式:
wget 需要被下载的链接 # 默认下载到当前目录
--no-check-cretificate 取消验证ssl证书(当ssl链接不安全情况下使用)
wget https://repo.huaweicloud.com/python/3.7.1/python-3.7.1.exe python软件下载到当前目录下
选项: -O 下载到指定路径
wget -O /opt/python.exe https://repo.huaweicloud.com/python/3.7.1/python-3.7.1.exe
将python软件下载到opt目录下取名为python.exe
curl 需要被访问的链接
-k 取消验证ssl证书(当ssl链接不安全情况下使用)
选项-o 下载到指定路径
curl -o /opt/python.exe https://repo.huaweicloud.com/python/3.7.1/python-3.7.1.exe
curl与wget的区别
wget 下载文件
-O : 指定保存路径
curl 访问链接 # 打印源代码链接,并保存成一个文本文件
-o : 指定文件路径,从而达到下载文件的功能
- 从服务器上上传下载到本地
上传下载到主机和个人电脑
需要安装 : lrzsz
安装命令 : yum -y install lrzsz
上传rz -E
格式 : rz调出长传窗口,选择需要被上传的文件
下载sz a.txt
格式 : zs服务器中的文件路径
字符处理命令
- sort
sort 需要排序的对象
vim A.txt
cat A.txt
# c 5
# a 2
# k 6
# s 13
# j 23
#
# m 9
sort A.txt
#
# a 2
# c 5
# j 23
# k 6
# m 9
# s 13
注: sort命令默认情况下对需要排序的对象第一列进行排序,空排在第一位
选项
-k(n): 指定列进行排序,默认情况下是以空格进行分割
sort -k2 A.txt 指定第二列进行排序,默认情况下是空格后面的第一个数进行排序
#
# s 13
# a 2
# j 23
# c 5
# k 6
# m 9
注: -k参数只对第一个字符进行排序,空排在第一位
-n : 按照数值的大小进行排序排序
sort -nk2 A.txt
#
# a 2
# c 5
# k 6
# m 9
# s 13
# j 23
-r : 倒序
sort -rnk2 A.txt
# j 23
# s 13
# m 9
# k 6
# c 5
# a 2
#
-t : 指定分隔符,后面的排序按照分隔符分隔的列进行排序
sort -t ":" -rnk3 /etc/passwd
# 将/etc/passwd按照第三个":"后面的第一个数值的大小进行倒序
- uniq
对结果集进行去重
格式 : uniq [选项] 需要去重的对象
sort A.txt
# a 2
# a 2
# m 9
# s 13
# s 13
sort A.txt | uniq 去重
# a 2
# m 9
# s 13
sort A.txt | uniq -c -c显示重复的次数
# 2 a 2
# 1 m 9
# 2 s 13
sort A.txt | uniq -c -d -d 显示重复的列
# 2 a 2
# 2 s 13
sort A.txt | uniq -u -u 只显示不重复的列
# m 9
- cut 切割
选项 : -d 指定切割符
-f 指定显示的列
sort /etc/passwd -t ":" -nk3 | uniq -u | cut -d ":" -f1,7
# /ect/passwd以第三个":"进行排序,只显示不重复的列,以":"进行切割,只显示第一列和第七列
# root:x:0:0:root:/root:/bin/bash root:/bin/bash
- tr 删除或替换结果集
格式 tr [选项] [操作对象]
cat /etc/passwd | tr "root" "ROOT" 将打印结果的root改成ROOT
# ROOT:x:0:0:ROOT:/ROOT:/bin/bash
选项
-d 删除结果集中的某个字符
cat /etc/passwd | tr -d "root" 删除root字符
# :x:0:0::/:/bin/bash
- wc 统计,计算数字
格式 wc [选项] [操作对象]
选项
-l 统计行数
cat /etc/passwd | wc -l -l 打印出行号数
# 21
-c 统计字节数
cat /etc/passwd | wc -c -c 统计字节数
# 974
echo a b c > s.txt
cat s.txt | wc -w -w 统计单词数(以空格分隔)
# 3
- 案例练习
- 查看/etc/passwd文件,以:切割,取出第7段,进行排序,并且出重(-c显示重复次数)
cat /etc/passwd | cut -d ":" -f7 | sort | uniq -c
# 1 /bin/bash
# 1 /bin/sync
# 1 /sbin/halt
# 16 /sbin/nologin
# 1 /sbin/shutdown
- 查看历史命令的使用次数并且排序
history | cut -d " " -f6 | sort | uniq -c
管道中的tee技术
- tee和重定向的区别 : tee会将管道前的输出结果写入文件中,并且会打印在当前终端
ps -ef | grep systemed | tee a.txt 将管道的输出结果覆盖的形式写入a.txt
# root 14600 7416 0 18:44 pts/0 00:00:00 grep --color=auto systemed
ps -ef | grep systemed | tee -a a.txt 将管道的输出结果追加的新式写入a.txt
# root 14606 7416 0 18:44 pts/0 00:00:00 grep --color=auto systemed
cat a.txt
# root 14600 7416 0 18:44 pts/0 00:00:00 grep --color=auto systemed
# root 14606 7416 0 18:44 pts/0 00:00:00 grep --color=auto systemed