Linux

Linux

1 迎合企业需求,学习Linux,把该有的功能,学好更加灵活的面对各种企业的招聘岗位.

一、虚拟机操作

网络连接三种方式

1. 桥接模式 相当于虚拟机的IP和外部系统是一个网段,但是有个弊端是因为一个网段里面 最多只有255个IP 如果多个就不够用了
2. NAT模式可以理解为转换模式,在虚拟机内部开启了一个独立网段,这样就避免了IP不够使用,但是外部的系统无法访问虚拟机的
3. 一个机器一个IP 普通模式

虚拟机克隆

1. 克隆可以理解为拷贝,从新 整一份,通常用来做集群。拷贝之前需要关机状态,使用正拷贝拷贝完还需要从新设置网卡
2. 修改Linux静态ip vi /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR=192.168.78.1
GATEWAY=192.168.78.2
NETMASK=255.255.255.0
DNS1=192.168.78.2
# 重启路由
systemctl restart network
#2开放 22端口
#添加指定需要开放的端口:
firewall-cmd --add-port=22/tcp --permanent
#重载入添加的端口:
firewall-cmd --reload
#查询指定端口是否开启成功:
firewall-cmd --query-port=22/tcp
#移除指定端口:
firewall-cmd --permanent --remove-port=123/tcp
#查看所有端口号
firewall-cmd --zone=public --list-ports

快照

快照可以理解为时空转移
简单来说例如 我在配置一个环境,当我感觉有问题的时候,我可以先拍一个快照
如果真的在配的过程中 出现了问题我们可以使用快照 还原 

二、目录结构

1. /bin-> /usr/bin (存放的是经常使用的命令)
2. /sbin (存放的是管理员使用的系统管理程序)
3. /home (存放普通用户主目录,在Linux中每个用户都有自己一个目录,一般是以自己名命名)
4. /root (存放的是root角色下用户主目录)
5. /dll (开机所需要的一些dll文件)
6. /etc (系统所需要的配置文件)
7. /usr (用户很多应用程序和文件都放这个目录下)
8. /boot 存放的是Linux启动时一些核心文件和一些镜像文件
9. /dev 把linux电脑中的硬件以文件形式存储
10. /media Linux会识别一些设备例如 U盘 光驱 识别之后会挂在到这个目录下
11. /mnt 系统提供目录 用来挂载一些别的系统的文件
12. /opt 这是主机,额外安装软件包的目录  
13. /usr/local 这是主机安装软件目录的地方
14. /var 存放日志的地方

三、基本操作

1. VIM

  1. 查看状态
  2. 编辑状态
  3. 命令行状态
1. 复制拷贝
该模式必须是在查看状态下
例如我需要复制当前行 则 输入 1YY 
此时会显示复制了一行 
粘贴则是P
**输入1YY是不显示的** 你需要复制几行 就输入几个yy
2. 删除
该模式必须是在查看状态下
例如我需要复制当前行 则 输入 1dd
此时会直接删除一行
粘贴则是P
**输入1YY是不显示的**你需要删除几行 就输入几个yy
3. 撤回
在windows中 撤回是ctrl+z 而在 Linux则是u 
4. 查找某内容
该模式必须是在查看命令行状态
进入命令行状态很简单直接 输入一个/ 即可
然后 输入内容之后 回车进入
N 则是下一个
5. 设置行号
进入命令行模式输入set nu ,取消行号 set nonu
6. 进入行首,或者行尾
大写G进入行尾,小写gg进入行首
7. 快速定位到某行 
首先输入行号(这一步是看不见的
),然后shift+G 

2.开关机

#立刻关机
shutdown -h now
#1分钟之后关机
shutdown 
#重启
reboot
#注销
logout

3. 用户管理

// 添加用户
1. 默认添加一个用户,该用户在/home 下
useradd XX 
2. 添加一个指定目录的 用户
useradd -d xx(指定目录) xx(用户名)
3. 设置用户的密码
passwd XX(用户名) **注意** 如果这里用户名为空 则修改的是当前登录人的用户密码
4. 添加一个用户并且指定用户组
useradd -g XX(组名) XX(用户名)
5. 改变用户所在组
usermod -g 新组名 用户名
6. 改变用户登录的初始目录
usermod -d 目录名 用户名
// 删除用户
1. 删除用户,但是保留/home 下的 家目录
userdel XX
2. 完全删除 不保留家目录
userdel -r xx
** 来回切换时候,可能会报端口占用 currently used by process 此时需要Ctrl+D ,退出该用户 **
// 查询某个组是否存在
cat /etc/group | grep XX 
// 切换用户
su - XX (要切换的用户名)

### 用户组操作
1. 添加一个用户组
 groupadd XX
2. 删除一个用户组 
groupdel。 XX
3. 修改一个用户组
usermod -g 用户组 用户名

4.文件、目录

#显示当前文件绝对路径
pwd
#查看内容
# ls [选项] [目录或者文件]
# -a: 显示当前目录所有文件和目录,包括隐藏的
# -l:以列表方式显示
#创建目录
rm -rf XX (循环递归删除)
#新建一个空文件
touch XX
#文件拷贝
cp [选项] 要拷贝的文件 要拷贝到指定地方的文件
#文件移动或文件改名
mv XX xx
这里到底是移动还是改名取决于,是否在同一文件夹下如果是在同一文件夹下则是改名。否则就是移动!!
#浏览文件
cat -n xxx | more
-n是带上行号
| 代表管道,管道可以理解为,把上个处理结果交给下一个执行 
关于more 操作如下
空格 翻一页
enter 翻一行
q 代表立刻离开more
Ctrl+F 向下滚动一屏
Ctrl+B 返回上一屏
#浏览大文件
less
向下    pagedown
向上    pageup
/字符 搜索,n 向下查找N 向上查找
离开 q
#控制台输出
echo xx
echo >  a.txt(重定向写入到覆盖a.txt)
echo >> a.txt(重定向写入到追加a.txt)
#查看文件前几行
head 文件(默认是前10行)
head -n 5 (查看前5行)
#查看文件后面几行
tail -n 
tail -f 实时
#软连接(文件指向)
ln -s [要转发的文件或目录] [软链接名]
#查看历史指令
history

5.时间日期指令

#显示当前时间
date
#只显示当前年份
date +%Y
#显示当前月份
date +%m
#date +%m
date +%d
#显示年月日时分秒
date "+%Y-%m-%d %H:%M:%S"
#设置日期
date -s 字符串日期
例如:date -s "2020-11-23 20:23:21"
#显示日历
cal
cal 2021

6.查找指令

  1. 基本递归查找
find [搜索范围] [选项]
-name 按照文件名查找
例如:find /home  -name *.txt  查找
-user 按照指定用户查找
-size 按照文件大小查找
例如查找整个Linux 文件大于20M的
find / -size +20M   (单位有 K M G)
ls -lh 查看文件大小 
  1. 全局查找
查找某文件时候需要先进行
updatedb
locate XX
  1. 管道查找
grep [选项] 查找内容 源文件
-n 显示匹配行及行号
-i 忽略字母大小写
1. 配合cat 使用例如
cat /home/a.txt | grep "yes"
2. 直接使用
grep -n "yes" /home/a.txt

7.压缩和解压

zip格式

  1. 压缩解压文件
1. gzip 文件 (压缩文件)
2. gunzip 文件 (解压文件)
  1. 压缩解压文件夹
1. 压缩文件夹 zip -r XX(压缩成什么名字) XX(目录)
例如:zip -r myZip /home/ : 表示 把/home 下所有的文件包括home 打包成zip
2. 解压文件夹
unzip XX 解压到当前位置
unzip -d XX  (-d 指的是解压到指定位置)

tar.gz格式

 -zcvf (压缩)
 -zxvf(解压)
 打包和解压 都是tar开头,通过选项区分
tar [选项] XXX.tar.gz 打包的内容

1. 压缩多个文件 例如将/home/pig.txt 和 /home/cat.txt 压缩为XX.tar.gz
tar -zcvf XX.tar.gz /home/pig.txt /home/cat.txt
2. 将/home的文件夹压缩成XX.tar.gz
tar -zcvf xx.tar.gz /home/
3. 将 xx.tar.gz 解压到当前目录
tar -zxvf xx.tar.gz
4. 将 myhome.tar.gz 解压到 /opt/tmp2目录下 
tar -zxvf /home/myhome.tar.gz -C /opt/temp2  
-C 代表指定目录

8.用户权限

1. 用户权限
用户对应用户组
2. 文件权限
文件对于 所有者、所在组、其他组
3. 修改文件所有者
chown 要修改成什么 文件
例如要把a.txt 所有者改为root1
chown a.txt root1
chown -R  这个针对的是文件夹 -R是递归的意思
4. 修改文件所在组
chgrp 组名 文件名
chgrp -R  这个针对的是文件夹 -R是递归的意思
5. 权限标识
-rwxrw-r-- 
拆分理解
- (文件类型) -:普通文件 d:文件夹 l:链接
rwx:代表 所有者权限 (123)
rw- 代表 所在组权限(456)
r-- 代表其他组权限(789)
r:可读 : 表示可以列出内容显示可以 ls
w:可写:表示可以删除或者创建内容
x:可执行:表示可以进入该目录 例如cd
6. 修改权限
+ :增加权限的意思
- : 删除权限的意思
= : 初始化权限 (重置,第一次使用)
u:所有者
o:其他人
g:所在组
a:所有人(u、o、g总和)

chmod
案例1:
给XX文件。所有者读写执行权限、所在组读写权限、其他组执行权限
chmod u=rwx,g=rw,o=x xx
案例2:
给xx文件,所有者去除执行权限。增加组写权限
chmod u-x,g+w xx
案例3:
给xx文件所有用户添加读写权限
chmod a+rw xx

第二种方式
r=4
w=2
x=1
chmod 755 = chmod rwxrxrx
更方便

9.定时任务管理

* * * * *
第一个:一个小时当中第几分钟 (0-59)
第二个:一天中第几个小时 (0-23)
第三个:一个月中第几天 (1-31)
第四个:一年中地几个月 (1-12)
第五个:一周中第几天(0-7 0和7都代表周末)

2.认识表达式符号


1. *代表任何时间 例如第一个* 是 代表一个小时中每分钟都去执行
2. , 代表 不是连续的日期 比如"0 8,12,16 * * * " 代表 每天的8点 12 点 16点去执行一次
3. - 代表 连续日期范围 比如"0 5 * * 1-6" 代表 一周中的 星期一到星期六 去 每 五点执行一次
4. */n  代表每隔多少分钟执行一次 例如 "*/1 * * * *" 代表每隔1分钟执行一次  

3.定时任务常用命令

1. 添加定时任务
crontab -e  
2. 终止任务调度
crontab -r
3. 列出当前有哪些任务调度
crontab -l
4. 重启任务调度
service crond restart

4.atd(只执行一次)

1. 用之前需要确认atd是否在启动,必须是在启动状态才可以
ps -ef | grep atd 
2. 如何执行?
at [选项] [时间]
Ctrl+D 结束at命令的输入(输入两次)
3. 查看任务队列
atq
4. 删除指定任务
 atrm xx(编号)

5 atd时间详解

1. 接受当天的时间,如果已经过了那么就第二天 执行 hh:mm 例如 04:00
2. 使用一些单词去例如 midnight(深夜) noon(中午) teatime(饮茶时间) 等模糊的词语
3. 采用12小时计时 ,就是在时间后面加上 AM(上午)PM(下午) 来说明 是上午还是下午 例如12PM 就是下午12点
4. 具体日期 注意这个日期必须跟在时间后 例如 04:00 2021-03-1
5. 相对计时 now + 5 minutes(分钟) 就是现在到五分钟后, 还可以加 hours(小时) days(天) weeks(星期)

5 atd案例

1. 明天17点钟,输出时间到指定文件内 例如 /root/date100.log
at 5pm tomorrow
date > /root/date100.log 
// 之后输入两次 Ctrl+D 结束at命令的输入(输入两次)

10.磁盘分区

一、 硬盘分类

  1. IDE硬盘(hdx~)
  2. SCSI硬盘(sdx~)
  3. x: a为基本盘 b为从属盘 c 为辅助主盘 d为辅助从属盘
  4. ~:代表分区 1-4代表主分区或者扩展分区5以后代表逻辑分区
  5. 例如hda3代表 IDE硬盘上第三个主分区或者扩展分区

二、查看硬盘分区
lsblk
lsblk -f

三、虚拟机分配硬盘、挂载操作

  1. 首先在vmvear新增硬盘
  2. fdisk /dev/xx (这里xx需要指向一块硬盘) ?? 通过 lsblk查看刚才添加的一块scsi硬盘
  3. 输入n
  4. 输入p
  5. 1-4 随便输入一个这里我输入一个分区即可 Ctrl+W 进行删除
  6. 回车
  7. 回车即可
  8. 输入w 写入操作
  9. 初始化增加uuid刚操作的硬盘 mkfs -t ext4 /dev/XX
  10. 进行挂载 mount /dev/xx xx(需要挂载到哪个目录下)

11.进程管理

1.查看所有进程信息
ps -aux
ps -aux
2.进程信息字段详情
1. user 进程执行用户
2. PID 进程号
3. MEM 占用CPU的百分比
4. VSZ:占用物理内存百分比
5. STAT 运行状态 sleep休眠状态 r:运行状态
6. TIME 占用CPU时间
7. START:执行开始时间
3.进程类型
1. 前台进程
所谓前台进程就是指在电脑屏幕能够直接有效看见的内容的软件
2. 后台进程
后台进程指的是用户看不到的服务,是在支撑软件运行的进程
4. 父子进程
所谓父子进程指的是,一个父进程 繁衍下的子进程,一个父进程对应多个子进程
5. 杀进程
kill -9 进程id (-9强制意思,因为通常linux不支持直接杀死,会导致正在工作 -9保证杀死进程切)
killall 进程名(通常杀死父进程)
6. 进程树管理
pstree -p 显示pid
pstree -u 显示用户
netstat -lnp|grep 5000

12.服务管理

1.systemctl服务

1. systemctl [start || stop || restart || status]  
2. 查看管理服务列表 /usr/lib/systemctl/system

2.systemctl设置服务自启动状态

2. systemctl enable 设置服务开机启动 
3. systemctl disable 关闭服务开机启动
4. systemctl is-enabled 服务名(查询某个服务是否是自启动)

3.防火墙打开指定端口

1. firewall-cmd --zone=public --add-port=3344/tcp --permanent
zone=public:表示作用域为公共的;
add-port=8080/tcp:添加tcp协议的端口8080;
permanent:永久生效,如果没有此参数,则只能维持当前服务生命周期内,重新启动后失效;
2. firewall-cmd--permanent--remove-prot= 端口/协议
3. firewall-cmd --reload(重载)
4. firewall-cmd --query-port=端口/协议
协议如何查看?
netstat -anp | grep xx

13.rpm和yum管理

1.查看本机已安装的rpm

rpm -qa|grep xx

2.安装rpm包

rpm -ivh
i=install
v=verbose提示
h=进度条

3.卸载rpm包

rpm -e 包名称

yum操作

1.查看yum服务可以安装的软件

yum list | grep xx

2.下载依赖包

yum install XX

四、shell脚本

1.语法基本介绍

#!/bin/bash //语法头
echo // 文字输出
A=10 //定义变量 (临时变量-> 变量名=变量值)
echo A=$A // 调用变量 $变量名
unset A // 撤销变量 (unset 要撤销的变量名字)
readonly 变量名=值(定义静态变量,不能撤销)例如 readonly A=100

2.全局变量

// 主要是为了配置一些公用的方法,为了让脚本执行一些通用的值

1.export 变量名(通常大写)=变量值
2.进行配置文件刷新 source /etc/profile (重新加载的意思)
3.用的时候直接$变量名即可

3.shell传参

//  主要是为了获取到用户执行脚本时候的,入参
$0 :代表的是脚本名本身
$1 : 代表脚本第一个参数
$2: 代表脚本第二个参数
$*:代表拿到整个参数 相当于一个整体
$@:代表拿到整个参数 相当于一个整体,供循环使用
$#:代表有几个参数

4.shell运算符

1.第一种

$((表达式))

2.第二种

$[表达式]

5.判断语句

1.判断分类

1. 字符串比较
2. 数字类型比较
3. 文件比较

2.判断语句

1. 字符串比较
 = 
2. 整数比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
3. 文件权限比较
-r 有读权限
-w 有写权限
-x 有执行权限
4. 文件类型判断
-e文件是否存在
-d 文件存在并且是一个目录

3.语法定义,和细节

if [ a = b ]
then
        echo "ok"
fi 
*细节说明*
1. [] a左边有一个空格 
2. = 号两边有空格
3. b右边有一个空格
4. 如果结果为真,就会执行then下
5. fi是必须加的 

4.经典案例

1. "OK“是否等于"OK"
#!/bin/bash
if [ "OK" = "OK" ]
then
        echo ”OK“
fi
2. 23 是否大于22
#!/bin/bash
if [ 23 -gt 22 ]
then
        echo ”大于“
fi
3. /root/a.txt 是否存在?
#!/bin/bash
if [ -e /root/a.txt ]
then
        echo ”存在“
fi

6判断语句

1. if  elif
​~~~shell
#!/bin/bash
if [ $1 -gt 60 ]
then
    echo "及格"
elif [ $1 -lt 60 ]
then
    echo "不及格"
fi
  1. case
#!/bin/bash
case $1 in
"1")
echo "1"
;;
"2")
echo "2"
;;
*)
echo "3"
;;
esac

3.for循环

1. fore循环
#!/bin/bash
#遍历循环输出你传入的值有几个输出几个
for a in $@
do
        echo $a
done


2. fori循环
#!/bin/bash
#遍历循环你输100次,直到他结束 返回一个SUM
sum=0
for (( a=1; a<=100; a++ )) //这里括号两边必须有空格
do
        sum=$[$sum+$a]
done
echo $sum 

3. while循环
#!/bin/bash
#遍历循环你输入的值,直到他结束 返回一个SUM
SUM=0
I=0
while [ $I -le $1 ]
do
        SUM=$[$SUM+$I]
        I=$[$I+1]
done
        echo $SUM

7.函数定义

basename /root/a.txt 得到的就是a.txt
dirname /root/a.txt 得到的就是dirname

2. 自定义函数
#!/bin/bash
function getSum() {
        echo "123"
        SUM=$[$1 + $2]
        echo $SUM
}
getSum 23 25
posted @ 2021-08-16 10:31  小风仔  阅读(39)  评论(0编辑  收藏  举报