Linux及shell基础
【摘要】 Linux基础linux的文件系统/ 根目录/root 管理员/etc 配置文件目录/bin 可指导文件/boot 可引导分区/home 家/lib 32位系统库文件存放位置/lib64 64位系统库文件存放位置/sys 系统内核信息/mnt 硬盘挂载/sbin 超级的/opt 自定义软件安装/run 运行时的系统变量/srv 服务启动后需要提取的数据/tmp 临时文件目录/usr 用户共享...
linux的文件系统
/ 根目录
/root 管理员
/etc 配置文件目录
/bin 可指导文件
/boot 可引导分区
/home 家
/lib 32位系统库文件存放位置
/lib64 64位系统库文件存放位置
/sys 系统内核信息
/mnt 硬盘挂载
/sbin 超级的
/opt 自定义软件安装
/run 运行时的系统变量
/srv 服务启动后需要提取的数据
/tmp 临时文件目录
/usr 用户共享目录
/var系统运行时要改变的数据
/proc 进程信息
修改IP
/etc/sysconfig/network-scripts/ifcfg
systemctl restart network.server
防火墙配置
systemctl status firewalld
//下次开启,关闭防火墙
systemctl disable firewalld
//本次服务内关闭防火墙
systemctl stop fireword
安装限制
//解除安装软件限制、操作系统对未知软件的安装有可能拒绝或者告警,解除该功能
vim /etc/selinux/config
SELINUX=disabled
常用命令
关机
halt
poweroff
shutdown -h now
shutdown now
重启
reboot
查询命令文件的位置
whereis
whereis test.py
查看文件类型
file /etc/xx
查看当前在线用户
who
我是谁
whoami
我在哪?(当前路径)
pwd
查看内核信息
uname -a
打印,如C中的printf("xx");
echo
清屏
clear
查看历史命令
history
$变量
*通配符
显示出指定目录下的所有文件
ls ll
创建文件目录
mkdir
创建a下创建b下创建c
mkdir -p a/b/c
以shiren为前缀,创建3个相同前缀和不同后缀的文件目录
mdkir -p shiren{libai,baidu,dufu}
创建shiren文件夹下,同时创建三个文件夹
mdkir -p shiren/{libai,baidu,dufu}
删除文件夹
rm -rf xxx
rmdir 要求为空
rmdir xxx
cp拷贝命令
cp 原文件路径 拷贝目标路径
cp -r 文件前缀* /opt/
mv移动(剪切)命令
mv 文件名
mv 文件前缀* /opt/
mv改文件名
mv 原文件名 文件名
rm删除命令
rm xxx
强制删除
rm -f xx
删除文件夹
rm -r 文件夹
删除文件夹以及文件,如删除opt下所有文件
rm -rf /opt/*
touch创建文件
touch xx
查看文件状态
stat xxx
查看文件内容
cat 文件名
分页查看
more 文件名
less 文件名
查看前10行
head 10 文件名
查看后10行
tail -10 文件名
查看日记等
tail -f test.logo
tail -F test.logo
只显示第8行
head -8 文件名 | tail -1
将ping的数据追加至baidu
ping ww.baidu.com >> baidu
find搜索
以文件名全局搜索
find / -name 文件名
find / -name 文件名*
以文件名opt目录局部范围搜索
find /opt -name 文件名
挂载 mount
//将disk挂载至/usr/upload
mount /dev/disk /usr/upload
软硬链接
软链接-给文件创建链接
ln -s 原文件名 链接文件名
硬链接(保护恶意删除)
ln 原文件名 链接文件名
vi命令打开方式
打开文件
vi 文件名
打开文件,并将光标置于第8行
vi +8 文件名
打开最后一行
vi + 文件名
打开指定搜索单词位置
vi +/if 文件名
vi编辑器三种模式,编辑、输入、末行
dd 删除一行 3dd删除3行
p 复制粘贴一行 100p 100行
i 插入(输入模式)
:set nu显示行号
15 gg 第15行
Shift G 最后一行
查看分区信息
df -h
查看文件目录的大小
du -h --max-depth=1 /opt
文件传输
Windows-Linux
lrzsz命令 yum -y install lrzsz
rz 上传 sz下载
将文件从windows上传到Linux
rz
将文件从Linux传输到windows
sz
较为通用的文件传输方式
xftp
scp
scp -r grafana-7.2.0-1.x86_64.rpm root@192.168.3.35:/opt/
文件的压缩与解压
tar -zxvf解压
tar.gz压缩包
tar -zxvf xxxxtar.gz
tar -zcf压缩
tar -zcf 压缩名 目标文件夹
yum -y install unzip zip -y
.zip压缩包
unzip解压
unzip xxx.zip
zip压缩
zip -r 压缩名 目标文件夹
主机名
临时修改
hostname test
长久更改
vi /etc/hostname
hostnamectl set-hostname test
主机域名
/etc/hosts
网络相关命令
查看当前网卡的配置信息
ifconfig
查看当前网络的状态信息
netstat
netstat -anp
核心路由表
netstat -r
查看与目标IP的指定端口是否能够连通
telnet
yum install telnet -y
telnet 192.168.3.11 22
定位标识指定的资源
curl
curl -X GET http://www.baidu.com
防火墙
查看防火墙状态
systemctl status firewalld.server
临时停止firewalld
systemctl stop firewalld.server
禁止firewalld开机自启
systemctl disable firewalld.server
开放一个端口
firewalld-cmd --zone=public --add-port=80/tcp --permanent
重新载入
firewalld-cmd --reload
查看
firewalld-cmd --zone=public --query-port=80/tcp
删除
firewalld-cmd --zone=public --remove-port=80/tcp --permanent
加密算法
不可逆加密算法
加密后无法计算出原始数据 — 密码
Hash、md5
对称加密算法
原始文档-加密Bob-加密文档-解密Alice-原始文档
加密和解密使用相同的秘钥
DES、3DES、Blowfish、IDEA、RC4、RC5、RC6、RC7
非对称加密算法
原始文档-加密Bob-加密文档-解密Alice-原始文档
加密和解密使用两个秘钥
RSA、ECC、Diffie-Hellman、EI Gamal、DSA
主机相互免秘钥
公钥
/root/.ssh/
生成密钥
使用加密方式-t ras 输入密码-p
ssh-keygen -t ras -P "-f ~/.ssh/id_rsa
发送公钥
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.3.1
本次不需要
ssh -V -o GSSAPIAuthentication=no root@192.168.3.1
所有
vi + /etc/ssh/ssh_config 添加
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
日期与时间
查看时间
data
查看日历
cal
修改时间
date -s 12:11:10
dare -s 2021-12-1 12:11:10
自动同步
yum -y install ntp
service ntpd start
ntpdate 192.168.3.1
用户
用户名和密码 — 不可逆加密算法
cat /etc/shadow
用户编号
cat /etc/passwd
新增用户
useradd qgs
设置密码
passwd qgs
删除用户
userdel -r qgs
修改用户名
usermod -l qgs qgs1
锁定用户名
usermodz-L qgs
解锁用户名
usermod -U qgs
切换用户
su qgs
exit
麒麟V10以及UOS中切换root
sudo -i
组
创建组
groupadd qgs
删除组
groupdel qgs
修改组名字
groupmod -n qgs test
查看当前用户的组
groups
查看用户对应的组
groups qgs
修改用户组
usermod -g qgs test(主组)— usermod -g 组名 用户名
usermod -G qgs test(附属组)— usermod -G 组名 用户名
权限
读写执行-读写执行-读写执行
d rwx rwx rwx
文件类型-文件所有者-文件所属组用户-其他用户
-rw-------
r读
w写
x执行
-没有权限
修改文件所属
chown 用户名 文件
chown 用户名:组 文件
修改文件权限
chmod o+w 文件
chmod ug+rw 文件
chmod ugo-rw 文件
chomd 777 文件
chomd 655 文件
管道
将前面命令的结果作为参数传递给后面的命令
grep
cat profile | grep if
head -8 /etc/profile | tail -1
netstat -anp | grep 6862
ls / | grep^t
重定向
改变数据输出的位置,方向
1 标准输出
2 错误输出
ll /opt 1> test
ll /opt 2> test
有没有都追加
ll /opt 2> test 2>&1
覆盖
ll /opt > test
追加
ll /opt >> test
信息黑洞(不保留信息)
ll /etc >> /dev/nul
ll /etc >> /dev/nul 2>&1
进程信息
ps -ef
/proc/
查看mysql进程
ps -ef | grep mysql
所有信息
ps -aux
ps -aux --sort -pcpu
查看当前服务器内存使用率
top
杀死8605进程
kill -9 8605
后台进程
只需要在命令后面添加一个&符号
ping www.baidu.com >> baidu &
查看当前的后台进程
jobs -l
防止后台进程被挂起
nohup ping www.baidu.com >> baidu &
nohup ping www.baidu.com >> baidu 2>&1 &
环境变量
当执行命令时,默认从当前路径查找,若当前路径查找不到对应文件,则从环境变量¥PATH查找
$PATH 路径/etc/profile
在最后添加变量
vi + /etc/profile
重新加载文件
source /etc/profile
软件安装方式
rpm安装
rpm -ivh xxxx.rpm
查询
rpm -qa |grep jdk
rpm -q jdk
卸载
rpm -e xxxx.X86_64
解压包安装
tar.gz包
tar -zxvf解压
tar.gz压缩包
tar -zxvf xxxxtar.gz
tar -zcf压缩
tar -zcf 压缩名 目标文件夹
yum -y install unzip zip -y
.zip压缩包
unzip解压
unzip xxx.zip
zip压缩
zip -r 压缩名 目标文件夹
yum安装
查询命令或软件
yum search xxx
yum安装net-tools
yum install net-tools -y
查看包信息
yum info xxx
查询可安装的rpm包
yum list | grep xxx
yum list | grep jdk
更换yum源
配置文件
/etc/yum/yum.repos.d/
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repo.d/CentOS-Base.repo.backup
wget获取yum源配置文件,华为阿里源
wget -O /etc/yum/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-6-reg.repo
wget -O /etc/yum/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-6-anon.repo
wget -O /etc/yum/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-anon.repo
wget -O /etc/yum/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-7-reg.repo
wget -O /etc/yum/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-8-anon.repo
wget -O /etc/yum/yum.repos.d/CentOS-Base.repo https://repo.huaweicloud.com/repository/conf/CentOS-8-reg.repo
wget -O /etc/yum/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget -O /etc/yum/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清空yum缓存
yum clean all
获取新的缓存
yum makecache
切分
cut -d ':' -f1,2,3 passwd |grep root
排序
对文本中的行进行排序
sort passwd
对每一行的数据进行切分,按照第二列进行排序
sort -t ' ' -k2 passwd
逆序
sort -t ' ' -k2 -r passwd
按照数值大小进行排序
sort -t' ' -k2 -n passwd
统计
统计单词数量
wc passwd
wc -l 行
wc -w 单词(以空格分隔单词)
wc -c 字符
管道grep
ps -ef | grep 8088
对文本进行搜索,同时搜索多个文件
grep 查询目标 查找文件 查找文件
grep root passwd
grep root passwd /etc/shadow
显示行号
grep -n root passwd
sed过滤、转换文本内容
在第二行下追加内容
sed '第几行i hello' 文件
sed '2i hello' passwd
sed -i '2i hello' passwd
sed '1行到6行i hello' 文件
sed '1,6i hello' passwd
增加
sed '2a hello' 文件
删除
sed '3d' 文件
修改
sed '1c hello' 文件
Shell理论基础
Kernel
和硬件打交道
sh
Bourne shell (sh)
Bourne again shell(bash)
csh
C shell (csh)
tc shell (tcsh)
常用系统变量
$HOME 家目录
$PWD 当前路径
$SHELL 解释器
$USER 当前用户
shell脚本执行
/opt/helloworld.sh
./helloworld.sh
bash helloworld.sh
sh helloworld.sh
source helloworld.sh
exprot :可以将当前进程的变量传递给子进程去使用
Shell-变量
局部变量
环境变量
shell变量
声明#!
变量调用
echo $name
echo ${name}
只读变量
url="https://www.baidu.com"
声明静态变量
readonly 变量
readonly A=1
撤销变量(unset无法撤销静态变量)
unset 变量
B=2
unset B
特殊变量
$n
n为数字,$0为脚本名称
$1为第一个参数
10以上的参数${10}
$
获取所有输入参数的个数,常用于循环
$*
这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@
这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$?
最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体哪个数,由命令自己来决定),则证明上一个命令执行不正确。
shell字符串
声明字符串
stl1="hello word"
字符串拼接--双引号-解析
name = 'helloworld'
name1 = "hello, "$name" ! "
name2 = "hello, ${name} !"
字符串拼接- 单引号
passwd='1234'
paswd1='hello, '$passwd' !'
paswd2='hello, ${passwd} !'
echo $passwd2
字符串长度
email="1234@qq.com"
echo ${#email}
echo ${email:1:4}
Shell数组
数组名=("值1" "值2" "值3" "值4")
读取数组${数组名[下标]}
fav=${favs[1]}
使用@符号可以获取数组中的所有元素
echo ${favs[@]}
获取数组长度
length1=${#fava[@]}
length2=${#fava[*]}
注释
#
多行注释
:<<EOF
注释内容
注释内容。。
EOF
:<<!
注释内容
注释内容。。
!
shell参数传递
想脚本传递参数,脚本内容获取参数的格式为:$n ,n代表数字
echo "hello $1"
echo "hello $2"
传递到脚本的个数
$#
以一个单字符串显示所有向脚本传递参数
$*
脚本运行的当前进程号
$$
后台运行的最后一个进程ID
$!
显示最后命令的推出状态。0表示没有错误,其他值表示有错误
$?
执行的文件名
$0
运算符
val=`expr $a + $b`
echo "a + b : $val"
val=``
算术
/ + - * / % = == !=
等于
-eq
不等于
-ne
大于
-gt
小于
-lt
大于或等于
-ge
小于或等于
-le
23是否大于等于22
[ 23 -ge 22 ]
echo $?
逻辑
与
&&
或
||
字符串
等于=
不等于!=
-z字符串长度为0
-n字符串长度不为0
$a 字符串不能为空
文件测试运算符
if [-r $file]
-r可读
-w可写
-x可执行
-f普通文件
-d目录
-s文件不为空
-e文件存在
expr运算符间要有空格
expr 2 + 3
expr 3 - 2
expr `expr 2 + 3` / 2
echo打印数据
显示普通字符串
echo "hello"
显示转义字符
echo "\"hello"\"
显示变量
name= "qgs"
echo "$name hello"
显示换行
echo -e "OK! \n"
echo "hello"
显示不换行
echo -e "ok! \c"
echo "hello"
显示结果定向至文件
echo "hello" > test
追加至文件
echo "hello" >> test
原样输出字符串
echo '$name\" '
显示命令执行结果
echo `ll`
test命令
num1=110
num2=110
if test $[num1] -eq $[num2]
then
echo "相等"
else
echo "不相等"
等于
-eq
不等于
-ne
大于
-gt
小于
-lt
大于或等于
-ge
小于或等于
-le
逻辑
与
&&
或
||
字符串
等于=
不等于!=
-z字符串长度为0
-n字符串长度不为0
$a 字符串不能为空
文件测试运算符
if [-r $file]
-r可读
-w可写
-x可执行
-f普通文件
-d目录
-s文件不为空
-e文件存在
shell流程控制
if
if [ 条件 ]
then
命令
elif [ 条件 ]
then
命令
else
命令
fi
//
num1=110
num2=110
if test $[num1] -eq $[num2]
then
echo "相等"
else
echo "不相等"
//
case
多选择语句
case 值 in
模式1)
命令
命令
命令
;;
模式2)
命令
命令
命令
;;
esac
//
echo '输入1到3之间的数字:'
echo '你输入的数字为:'
read num
case $num in
1) echo'你选择了1'
;;
2) echo'你选择了2'
;;
3) echo'你选择了3'
;;
*) echo'没有选择1~3之间的数字'
;;
esac
for
for循环
for loop in 1 2 3 4 5
do
echo "the value is: $loop"
done
//
for str in 'this is a string'
do
echo $str
done
//
/#!/bin/bash
s=0
for((i=1;i<=100;i++))
do
s = $s+$i
done
echo $s
while
while [ 条件 ]
do
命令
done
int = 1
while(( $int<=5))
do
echo $int
let "int++"
done
无限循环//默认都为真
while true
do
命令
done
s=0
i=1
while [ $i -le 100 ]
do
s= s + $i
done
read读取
read(选项)(参数)
选项:-p:指定读取值时的提示符、-t:指定读取值时等待的时间(秒)
参数:变量名
read name
read -t 10 -p "Enter your name in 10 seconds" NAME
echo $NAME
break
跳出所有循环
continue
跳出本次循环,判断是否下次啥都执行
函数
shell可以用户定义函数,然后在shell脚本中可以随便调用
sum(){
echo"这个函数会对输入的两个数字进行相加"
echo"请输入第一个数字"
read num1
echo"请输入第二个数字"
read num2
echo"两个数字分别是$num1和$num2"
return $(($num1+$num2))
}
sum
/#函数返回值在调用函数后通过$?来获取
echo"输入的两个数之和为$?"
basename获取文件名称
basename /opt/test/test.txt
test.txt
basename /opt/test/test.txt .txt
test
dirname 文件绝对路径
系统启动
启动计算机的硬件BIOS
linux系统、/boot引导分区
读取配置文件 /etc/inittab
开机启动方式:rc3.d、rc.local
电源->BIOS(时间、启动的方式)-linux> /boot -> 运行级别(/etc/inittab3) ->执行对应启动(systemctl)-> 自定义服务rc.d ->init.d(要启动的服务)、rc3.d(软链接、S+NUM、K+NUM)、rc.local(自定义脚本路径)
开机自启动
借助rc.local
创建脚本存放文件夹
mkdir -p /usr/local/scripts
创建脚本文件
vim /usr/local/scripts/hello.sh
给予hello.sh、etc/rc.d/rc.local执行权限
chomd a+x hello.sh
chmod a+x etc/rc.d/rc.local
在etc/rc.d/rc.local添加脚本路径
vim etc/rc.d/rc.local
将路径追加至rc.local
echo "/usr/local/scripts/hello.sh" >> etc/rc.d/rc.local
借助rc3.d
创建脚本
vim hello.sh
添加声明
#! /bin/bash
#chkconfig: 2345 88 99
#description:auto_run
chmod a+x hello.sh
cp hello.sh /etc/init.d/
添加服务
chkconfig --add hello.sh
reboot
定时任务
crond负责周期任务
systemctl status crond.server
添加任务,编辑当前用户的任务列表
crontab -e
星星星星星 command
分 时日 月 周
*表示任意时间
周期中0表示周天
-区间,00 1-2 * * * cmd每天1,2点整点执行命令
,分隔时段 30 3,18 * * * cmd 每天3点30分和18点30分执行一次
/n,分割除法,*/5 * * * * cmd 每5分钟执行一次
1 * * * * 每小时的第一分钟执行
30 21 * * * /usr/local/etc/test.sh restart
systemctl restart crond.server
查看当前定时任务
crontab -l
查看任务的历史
/var/spool/mail/root
清除任务
crontab -r
先从当前进程查询变量,如果当前进程没有这个变量,默认去父进程查询变量
使用export修饰变量,那么这个变量对于子进程是可见的
export
shell学习流程
变量->标识符,数据类型
运算符->让多个变量产生关系
逻辑语句->分支,循环,判断
方法-函数->将实现某一切能的代码封装到一起
多命令处理
在opt/test/目录下创建一个test.txt,并在test.txt中添加" I LOVE LINUX
#! /bin/bash
cd /opt/test/
touch test.txt
#将 i love linux 内容追加至test.txt
echo "I LOVE LINUX" >> test.txt
cut‘剪’,在文本中剪切数据用。cut从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
cut 参数 文件名
-f 列号
-d 分隔符,安装指定分隔符分割列
cut -d " " -f 1 text.sh
获取第2和3列
cut -d " " -f 2,3 text.sh
cat text.sh | grep test | cut -d " " -f 1
选取系统PATH变量第一个:后面的路径
echo $PATH | cut -d : -f 2
获取地址
ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
shell-Sed
sed 参数 命令 文件名
参数
-e多项编辑
-n取消默认输出
-r使用扩展正则表达式
-i原地编辑
-f指定sed脚本的文件名
命令
p打印
i在指定行之前插入内容
a新增
d删除
s查找并替换
将内容插入至第二行下
sed "2a hello world" test.sh
删除文件中的test内容
sed " /test/d" test.sh
将文件中h替换成t,g是全局的意思
sed "s/h/t/g" test.sh
将文件中的第二行删除并将t替换为h
sed -e "2d" -e"s/t/h/g" test.sh
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)