Linux及shell基础

网友投稿 650 2022-05-29

Linux基础

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 -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 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为数字,

$n n为数字,$0为脚本名称 $1为第一个参数 10以上的参数${10} $ 获取所有输入参数的个数,常用于循环 $* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 $@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 $? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体哪个数,由命令自己来决定),则证明上一个命令执行不正确。

为脚本名称 为第一个参数 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[*]} 注释 # 多行注释 :<

shell参数传递

想脚本传递参数,脚本内容获取参数的格式为:$n ,n代表数字 echo "hello " echo "hello " 传递到脚本的个数 $# 以一个单字符串显示所有向脚本传递参数 $* 脚本运行的当前进程号 $$ 后台运行的最后一个进程ID $! 显示最后命令的推出状态。0表示没有错误,其他值表示有错误 $? 执行的文件名

想脚本传递参数,脚本内容获取参数的格式为:$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 值 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 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 [ 条件 ] 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(选项)(参数) 选项:-p:指定读取值时的提示符、-t:指定读取值时等待的时间(秒) 参数:变量名 read name read -t 10 -p "Enter your name in 10 seconds" NAME echo $NAME

跳出所有循环

跳出本次循环,判断是否下次啥都执行

函数

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(自定义脚本路径)

Linux及shell基础

创建脚本存放文件夹 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

创建脚本 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学习流程 变量->标识符,数据类型 运算符->让多个变量产生关系 逻辑语句->分支,循环,判断 方法-函数->将实现某一切能的代码封装到一起

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

shell-Cut

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【系列集合篇】浅谈OAuth二三事
下一篇:万物之始正则表达式全解析三部曲(上篇)-正则表达式基础知识及语法
相关文章