Linux基于CentOS 7的学习笔记,喜欢的拿走。

4 篇文章 0 订阅
2 篇文章 0 订阅

1.1 Linux基础命令:

内部命令:指集成在shell的命令,即系统自带,如cd,pwd等

外部命令:独立于shell之外的命令,用户后面安装的,如cp,ls等

普通命令:路径,如etc/word/password

**-:**用于非单词【选项】 **–:**用于单词【选项】

win+R:开启运行界面输入 gpedit.msc 组策略编辑器 regedit 注册表编辑器

设置Linux临时ip:ifconfig ens33 ip地址

设置Linux永久ip:vim /etc/sysconfig/network-scripts/ifcfg-ens33

网络重启:systemctl restart network.service

退出:exit

清屏:clear

查看文件:ls

查看网关:route -n

立即关机:1.shutdown now (时间:延迟关机) 2.shutdown -h now 3.halt 4.reboot

取消关机:shutdown -c

重启:shutdown -r (+时间:延迟重启)

切换目录:cd

查看当前目录:pwd

查看目录:ls +文件路径

查看帮助文档:ls --help

查看目录属性:ls -l

查看目录文件(包括隐藏):ls -a

查看目录本身属性:ls -ld

人性化显示文件容量:ls -lh

创建文件:touch

创建目录:mkdir -p(一次性创建多级目录)

删除文件:rm -r(删除目录有提示)

无提示删目录:rm -rf

复制目录或文件:cp 在哪复制 复制到哪里

复制目录下所有子目录:cp -r

复制目录时不改变原有属性:cp -p

移动文件(改名):mv+从哪移动+移动到哪里

查看文本文件内容(显示所有):cat -n(带行号)

查看文本文件内容(分页显示只能往下翻看(按s键),可以自动退出):more

查看文本文件内容(分页显示可以上下翻看,按q退出):less

查看文本文件内容头部:head -n(n代表行数)

查看文本文件内容尾部:tail -f(实时的查看文本文件的内容)

统计行数,列数,字符数:wc -l(只统计行数) 文本文件

屏幕输出:echo $a(输出变量) $SHELL(字母大写表示环境变量,是linux定义好的)

文件内容查找:grep “root”(关键字) +查找的文件 注意:不支持通配符,支持正则表达式

查找结果带行号:grep -n -v(取反查找) -i(不区分大小写) -w(精确匹配关键字) -r(针对目录查找文件内容)

比较文件(显示文件区别:其中a,d,c表示增删改,>开始行属于文件2,<开始行属于文件1):diff 文件1 文件2

显示系统时钟:date -s(设置时间) “%F %T”

显示硬件时钟:hwclock

显示日历:cal

查看文件元数据(元数据:文件属性):stat

查找文件(依赖于事先建立好的索引数据库):locate 文件名

查找文件:

在这里插入图片描述
按名称查找:find /etc -name “config”(精确查找不是模糊查询,可以配合通配符)

不区分大小写:find /etc -iname “config”

按文件类型查找:find /etc -type d("-"普通文件(f), "d"目录(d), "l"软连接(l), "b"块设备文件(b), "c"字符设备文件©)

加处理动作:find /etc -name “config” -ls【处理动作】

按文件大小查找:find /etc -size +1M (+表示超过,-表示小于)

取反:find /etc -not -type d

按时间戳查找:

例:表示查找7天之前被访问过的文件

find /etc  -atime   +7   //(time:天  min:分钟,a(access time) m(modify time) c(change time))

例:表示查找60分钟之内被改动过的文件

find  /etc  -ctime  -60

对查找结果进行进一步处理:

例:查找etc目录下带.txt文件名 并且删除文件

find /etc -name "*.txt"  -exec  rm -rf {} /etc  \;      ("{}":查找返回的结果集,"\;":表结束)

exec是将结果集的文本信息转化为文件去处理。

xargs:|  xargs作用几乎等价于-exec。

区别是:
-exec一次性处理所有查询参数,可能会导致参数溢出,导致有些查询的文本信息没有转化为文件去处理
find  /etc -name   "*.txt"  -exec  grep  "password"  {}   \;			//只返回查询信息

xargs会分批次处理传来的查询参数,适合处理大量数据。
find   /etc  -name  "*.txt"   |   xargs  grep   "password"  {} //返回查询信息并且返回信息所在路径


按文件属性查找

查找所有者是teacher的文件:find  /  -user  teacher
查找所属组是student的文件:find  /  -group  -ls  2>  /dev/null
uid查找文件:find  / -uid  1001 
gid查找文件:find  / -gid  1002
没有所有者文件:find  /  -nouser
没有所属组文件:find  /  -nogroup

按文件权限查找:

按权限精确查找文件:find  /  -perm  755
按权限模糊查找文件:find  /  -perm -220(0代表可忽略,与关系)(-perm/220或关系)
例子:
查找所有者或者所属组有写权限的文件类型且为普通文件的文件:find  / -perm/220 type -f
查找特殊权限文件:find  /  -perm  /4000

查看命令位置:which

查看当前shell缓存的命令文件路径:hash

判断内部还是外部命令:tpye

建立软连接:ln -s [源文件] [软连接名]

设置命令别名:alias cew=‘cat /etc/word’

自动设置颜色:[命令名] --color=auto

查看历史命令(上限1000):history -d(删除历史命令) -c(清除缓存的历史命令)

缓存历史命令到“.bash_history”操作:history -w(写) -r(读)

查看内部命令帮助信息:help 命令名

查看外部命令:命令名 --help

查看命令帮助手册:man [命令名]

覆盖重定向:ls /home>home.txt(将屏幕输出转到指定文件输出)

追加重定向:ls /home>>home.txt (0标准输入(stdin),1标准输出(stdout),2标准错误(stderr))

标准输入重定向(无结束符需要按ctrl+q):cat <etc/password

标准输入重定向(EOF为结束符):cat <<EOF

错误信息重定向:ls /homedd 2>home.txt (默认是正确信息)

过滤(/dev/null)全部信息(&>重定向错误和正确信息):find / -user student &> /dev/null(黑洞)

管道(将上一个命令执行结果传给下一个命令):ll -h /etc | grep net

vi编辑器:

进入vi编辑器:vim [文件名]
在这里插入图片描述
命令模式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
输入(插入)模式:

i,在光标所在处输入;
a,在光标所在处后方插入;
o,在光标所在处下方打开一个新行,光标处在行首。

末行模式:
在这里插入图片描述在这里插入图片描述
可视模式:

​ 在命令模式下按下v键便可以进入可视模式,此时左右移动方向键,就会将光标所经过区域的字符选中,然后可以用y键进行复制,用d键进行删除,或是用p键进行粘贴。不论执行何种操作,在操作结束之后,都会自动退出可视模式。

查看vi编辑器教程:vimtutor

创建快捷图标:

[Desktop Entry]
Name[zh_CN]=IntelliJ IDEA
Name=IntelliJ IDEA
GenericName[zh_CN]=idea
GenericName=idea
X-GNOME-FullName[zh_CN]=IntelliJ IDEA
X-GNOME-FullName=IntelliJ IDEA
Comment[zh_CN]=java IDE
Keywords[zh_CN]=idea;java;dev;ide;
Keywords=idea;java;dev;ide;
# 启动路径
Exec=/home/wsm/Downloads/idea-IU-203.6682.168/bin/idea.sh 
# 图标路径
Icon=/home/wsm/Downloads/idea-IU-203.6682.168/bin/idea.png
Terminal=false
Type=Application
Categories=GNOME;GTK;Utility;Clock;
StartupNotify=true
DBusActivatable=true
X-GNOME-UsesNotifications=true
X-Geoclue-Reason[zh_CN]=Java

1.2 用户,组和权限管理

用户和组

组概念

Linux系统每创建一个用户会自动为这个用户创建一个同名的组,被称为基本组。每个用户也可以加入不同的组,加入的组被称为附加组,此用户也会拥有组中的所有权限。

用户账户类型

●超级用户: root 是Linux系统中默认的超级用户帐号,对系统拥有至高无上的完全权限。
使用root帐号,管理员可以突破系统的一切限制,方便地维护系统。
●普通用户:普通用户帐号需要由root用户或其他管理员用户创建,拥有的权限受到一定限
制,一般只在用户自己的家目录中有完全权限。系统安装时创建的用户属于普通用户。
●系统用户:这类用户最大的特点是不能登录系统,而主要是用于让后台进程或服务类进程
以非管理员的身份运行。它们大多是在安装系统及部分应用程序时自动添加的。

UID:用户唯一标识,root用户UID为0,系统用户UID为:1999,普通用户:100060000

GID:组唯一标识,同上

/etc/passwd文件:

passwd文件含义:用户名:密码:UID:GID:注释描述:家目录:默认启动shell(/bin/nologin:系统用户 /bin/bash)

/etc/shadow文件:

概念:用于存放用户密码的,shadow文件会对改密码进行加密,一般使用MD5或者SHA1等,在CentOS7使用SHA512进行加密,同时也会对密码进行加盐(指的是在密文中加一串随机数,防止密码相同的用户密文一样)

创建用户

创建用户:useradd 【用户名】

查看用户UID和GID命令(基本组和附加组):id [用户名]

设置用户UID:useradd -u 【UID】【用户名】

设置用户家目录:useradd -d 【指定目录】 【用户名】

设置用户GID:useradd -g (-G附加组) 【GID】 【用户名】

设置用户失效时间:useradd -e 2019-01-25 user

设置用户shell并且不设置家目录:useradd -s /sbin/nologin -M user

设置用户密码:passwd 【用户名】

切换用户改变环境变量(推荐):su - 【用户名】

清除密码:passwd -d 【用户名】

锁定用户:passwd -l -u(解锁)

改变用户密码标准输入:echo ‘en123’ | passwd --stdin user

修改用户家目录:usermod -m -d /home/admin admin

修改用户账号:usermod -l [新用户名] [原用户名]

修改用户基本组:usermod -g [组名] [用户名]

用户加入到附加组:usermod -a -G(修改附加组) [组名] [用户名]

创建组

将用户加入到组:gpasswd -a [用户名] [组名] (-d删除成员)

创建组:groupadd -g(指定GID) 2000 【组名】

删除组(没有基本组成员):groupdel

更改用户登录相关属性:vim /etc/login.defs

权限管理

在这里插入图片描述
在这里插入图片描述
第一组权限是所有者权限,第二组是所有组权限,第三组是其他用户权限,两个root(一个所有者,一个所属组)

chmod命令

格式:chmod 【ugoa(所有者,所属组,其他用户,所有用户)】 【-+=(删增设置)】 【rwx】 【目录名或文件名】

for exmple:chmod u=rwx /etc/root chomod o=— /etc/root

可以用数字表现权限(二进制表示4代表读,2代表写,1代表执行,0代表无)

例如:chmod 755(三组) /tmp/test

改目录或文件所有者和所属组:chown 【所有者】:【所属组】 /tmp/test

ACL规则
在这里插入图片描述
设置了ACL的图中的“.”会变成“+”,且被设置了acl的第二组会变成mask权限(设置acl用户权限的最大值)。

设置一个用户对文件的权限:setfacl -m -x(去除某一个用户acl规则) u:【用户名】:【rwx】 【文件路径】

去除所有用户acl规则:setfacl -b 【文件路径】

查看ACL:getfacl 【文件路径】

设置特殊权限

set位权限,符号为s:

只能针对可执行文件或者目录进行设置,针对所有者设置为SUID,针对文件所属组设置SGID。

设置SUID作用:使执行该文件的用户自动获得所有者的所有权限。

设置SUID权限:chmod u+s 【文件路径】

设置SGID一般针对所属目录设置,作用:在此目录下创建的文件或子目录都拥有此目录所属组的权限

设置SGID权限:chmod g+s 【目录路径】

删除文件需要拥有文件目录操作的写权限,进入退出需要执行权限。

SBIT权限,粘滞位权限作用:只能对自己的文件进行操作(包括删除)。

设置SBIT权限:chmod o+t 【目录路径】

转化为数字SUID为4,SGID为2,SBIT为1.

umask

默认权限=最大权限-umask

修改临时默认权限:umask 022

设置扩展属性

扩展属性是建立在root用户之上的设置的权限。
在这里插入图片描述
例子:增加只读属性:chattr +i /etc/passwd

限制用户切换

vim /etc/pam.d/su
在这里插入图片描述
让这行注释生效

指定用户可以切换到root用户:gpasswd -a 【指定用户名】 wheel

权限提升(此用户拥有授权的权限):sudo

sudoers文件

格式:
在这里插入图片描述
vim /etc/sudoers行末添加
在这里插入图片描述
!:指不能执行的命令

1.3 磁盘文件系统管理

磁盘分区格式化

在这里插入图片描述
0柱面,0磁道,1扇区被称为主引导扇区,用于记录分区信息。

Linux是将磁盘按文件划分,所有设备文件都是统一放在/dev目录下,光驱设备文件用/dev/cdrom表示。

主分区-》扩展分区(容器,用于创建逻辑分区)-》逻辑分区

**硬盘:**对于硬盘SATA或SCSI采用"sdX"方式命名X代表a,b,c,d等,如第一块表示"sda".

分区: 用序号来表示区号,如第一块分区"sda1",主分区和扩展分区最多为4,逻辑分区序号都是从5开始。

**查看分区信息:**fdisk -l /dev/sda

**对硬盘分区:**fdisk /dev/sdb

低级格式化:重新划分磁道和扇区,会屏蔽损坏的区域,物理层面。

高级格式化:创建文件系统,逻辑层面。Linux使用由ext->xfs文件系统类型,Windows使用NTFS或FAT32类型

交换分区:虚拟内存。Windows在中
在这里插入图片描述
分页文件和虚拟内存。

高级格式化命令:mkfs -t 【文件系统类型xfs】 【分区设备/dev/sdb】

**挂载:**将分区设备关联到目录中,目录作为挂载点,对硬盘分区进行访问和操作。

挂载命令:mount [硬盘分区/dev/sdb] [挂载点目录 /data] (注意:作为挂载点目录尽量为空,否则目录原有数据会转移到硬盘分区中)。

取消挂载命令:umount 【挂载点目录】(/mnt:作为自动挂载点,/media:作为手动挂载点)

查看已挂载设备:df -hT

挂载镜像文件:mount -o loop 【镜像文件】 【挂载点目录】

挂载光盘:mount /dev/cdrom [挂载点目录]

查看硬盘分区的UUID:blkid /dev/sda1

自动挂载:vim /dev/fstab
在这里插入图片描述
第一项:挂载分区设备 2 挂载点目录 3挂载类型 4选项 5是否备份 6是否检测存储设备(0否1,2检测)

磁盘管理

磁盘配额:限制用户对磁盘容量和上传文件数。

设置磁盘配额:

启动磁盘配额:vim /dev/fstab修改配置文件行末添加
在这里插入图片描述
对用户设置磁盘配额:edquota -u -g(针对组配额) [用户名]
在这里插入图片描述
圆圈部分代表对容量设置,方框部分对文件数量设置。blocks指的是用户已用容量,inodes指用户已上传文件数量,一般只设置硬限额度,因此,只需设置hard部分。

生成可控大小的文件:dd if=[指定输入的设备(文件)] of=[指定输入的设备文件] bs=[块大小] count=[块数量]

查看用户或组配额情况:quota -u [用户名]

查看磁盘配额情况:requota [磁盘分区设备]

RAID

概念:将多个磁盘组合在一起形成硬盘组。

RAID 0级别:将数据分成n块放入n个硬盘中,提高存储速度。

RAID 1级别:将数据备份其他硬盘。

RAID 10级别:至少需要4块硬盘,按0和1方式共同存储。

RAID 5级别:至少3块硬盘,将数据分为两块存储在两块硬盘中,第三块硬盘记录校验值用于计算缺失数据。

配置RAID:

mdadm命令基本格式
在这里插入图片描述
在这里插入图片描述

1.4 系统软件包管理

Linux基本的存储单位:block:由8个扇区组成,大小为4kb。

查看文件占用磁盘大小命令:du -h [文件名]

查看目录占用磁盘大小命令:du -hs [目录名]

文件的打包(gzip : z后缀.gz,bzip2 : j后缀.bz2,xz : J后缀.xz):tar -cf [打包文件名] 【需要打包的文件】

文件压缩:tar -zcf etc.tar.gz /etc

解压:tar -xf [解包名] -C(指定存放位置) 【存放路径】

软件安装

源码安装

首先要安装gcc:yum install gcc

安装lrzsz:yum install lrzsz用于远程传输文件

window上传文件到Linux命令:rz

Linux上传到Windows文件命令:sz [文件名]

1.下载文件:wget 【文件网址】

2.指定安装位置: ./configure --prefix=/usr/local/ntf(指定的目录位置)

3.源码包进行编译:make

4.安装软件:make install

yum文件

yum配置文件:

/etc/yum.conf  #为所有仓库提供公共配置

[root@chaogelinux yum.repos.d]# cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0                                    #本地缓存是否保留,0否,1是
debuglevel=2                                #调试日志级别
logfile=/var/log/yum.log        #日志路径
exactarch=1                                    #精确系统平台版本匹配
obsoletes=1            
gpgcheck=1                                    #检查软件包的合法性
plugins=1                
installonly_limit=5                    #同时安装几个工具包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release        


#  This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
#  It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m

#请放置你的仓库在这里,并且命名为*.repo类型
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d

baseurl:指定yum源访问路径,指向网络web服务器:http://…,指向FTP服务器:ftp://…,指向本地:file://…

enabled:是否启用yum源,启用为1,禁用为0

gpgcheck:是否检查rmp包来源合法性,1表示检查,0表示不检查。设置为1必须加这行

repo仓库文件

/etc/yum.repos.d/*.repo #提供仓库的地址文件

CentOS-Base.repo
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com        #仓库文件的说明
failovermethod=priority    #存在多个url的时候,按顺序来连接,如果是roundrobin,意为随机挑选
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/    #指定仓库的网站地址
        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1    #是否检测秘钥
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7      #公钥文件存放路径

#released updates  指定rpm包需要升级的地址,此处可以去网页上寻找对应的包
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7


epel.conf
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
failovermethod=priority
enabled=1        #是否启用此仓库
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

自定义repo仓库

先切换到:cd /etc/yum.repos.d目录下在开始定义yum源文件

touch chaoge.repo #写入

[base]
name=Chaoge repo 
baseurl=http://chaoge.com/centos/7/os/x86_64/
gpgcheck=0

[epel]
name=Chaoge epel repo
baseurl=http://chaoge.com/epel/7/os/x86_64/
gpgcheck=0

配置yum源

1.备份现有repo仓库
2.下载新的repo文件
CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

3.清空旧yum缓存,生成新的缓存
yum clean all
yum makecache

4.针对阿里云镜像,可能出现无法解析地址的异常
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

5.配置epel源
epel(RHEL 7)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
epel(RHEL 6)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
epel(RHEL 5)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-5.repo

yum命令使用

yum命令的用法:
    yum [options] [command] [package ...]

   command is one of:
    * install package1 [package2] [...]
    * update [package1] [package2] [...]
    * update-to [package1] [package2] [...]
    * check-update
    * upgrade [package1] [package2] [...]
    * upgrade-to [package1] [package2] [...]
    * distribution-synchronization [package1] [package2] [...]
    * remove | erase package1 [package2] [...]
    * list [...]
    * info [...]
    * provides | whatprovides feature1 [feature2] [...]
    * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    * makecache
    * groupinstall group1 [group2] [...]
    * groupupdate group1 [group2] [...]
    * grouplist [hidden] [groupwildcard] [...]
    * groupremove group1 [group2] [...]
    * groupinfo group1 [...]
    * search string1 [string2] [...]
    * shell [filename]
    * resolvedep dep1 [dep2] [...]
    * localinstall rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use update)
    * reinstall package1 [package2] [...]
    * downgrade package1 [package2] [...]
    * deplist package1 [package2] [...]
    * repolist [all|enabled|disabled]
    * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
    * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    * check
    * help [command]

显示仓库列表:
    repolist [all|enabled|disabled]

显示程序包:
    list
        # yum list [all | glob_exp1] [glob_exp2] [...]
        # yum list {available|installed|updates} [glob_exp1] [...]

安装程序包:
    install package1 [package2] [...]

    reinstall package1 [package2] [...]  (重新安装)

升级程序包:
    update [package1] [package2] [...]

    downgrade package1 [package2] [...] (降级)

检查可用升级:
    check-update

卸载程序包:
    remove | erase package1 [package2] [...]

查看程序包information:
    info [...]

查看指定的特性(可以是某文件)是由哪个程序包所提供:
    provides | whatprovides feature1 [feature2] [...]

清理本地缓存:
clean [headers|packages|metadata|dbcache|plugins|expire-cache|all]

构建缓存:
    makecache

搜索:
    search string1 [string2] [...]

    以指定的关键字搜索程序包名及summary信息;

查看指定包所依赖的capabilities:
    deplist package1 [package2] [...]

查看yum事务历史:
    history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

安装及升级本地程序包:
    * localinstall rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use update)

包组管理的相关命令:
    * groupinstall group1 [group2] [...]
    * groupupdate group1 [group2] [...]
    * grouplist [hidden] [groupwildcard] [...]
    * groupremove group1 [group2] [...]
    * groupinfo group1 [...]

如何使用光盘当作本地yum仓库:
    (1) 挂载光盘至某目录,例如/media/cdrom
        # mount -r -t iso9660 /dev/cdrom /media/cdrom
    (2) 创建配置文件
    [CentOS7]
    name=
    baseurl=
    gpgcheck=
    enabled=

yum的命令行选项:
    --nogpgcheck:禁止进行gpg check;
    -y: 自动回答为“yes”;
    -q:静默模式;
    --disablerepo=repoidglob:临时禁用此处指定的repo;
    --enablerepo=repoidglob:临时启用此处指定的repo;
    --noplugins:禁用所有插件;

yum的repo配置文件中可用的变量:
    $releasever: 当前OS的发行版的主版本号;
    $arch: 平台;
    $basearch:基础平台;
    $YUM0-$YUM9

[base]
name=Chaoge repo 
baseurl=http://chaoge.com/centos/7/os/x86_64/  #使用变量替换,就很方便了
baseurl=http://chaoge.com/centos/6/os/x86_64/
baseurl=http://chaoge.com/centos/5/os/x86_64/
gpgcheck=0

查看软件包信息:yum info 【软件包名】

软包安装:yum install 【软件包名】 -y(无需确认)

卸载软件:yum remove 【软件包名】

清除本地缓存:yum clean all

查看yum下的软件包:yum list 【软件包】(支持通配符)

rpm命令

rpm命令:rpm  [OPTIONS]  [PACKAGE_FILE]
# i表示安装 v显示详细过程 h以进度条显示,每个#表示2%进度
安装软件的命令格式                rpm -ivh filename.rpm    
升级软件的命令格式                rpm -Uvh filename.rpm
卸载软件的命令格式                rpm -e filename.rpm
查询软件描述信息的命令格式         rpm -qpi filename.rpm
列出软件文件信息的命令格式         rpm -qpl filename.rpm
查询文件属于哪个 RPM 的命令格式   rpm -qf filename

查询软件包:rpm -q 【软件包】

查询含有ssh软件包:rpm -qa | grep ssh

查询安装软件的配置文件:rpm -qc [软件包名]

查看安装的位置:rpm -ql 【软件包名】

1.5 系统进程和服务管理

进程相关概念

Linux进程状态

可运行态R表示:运行态

可中断的等待状态S表示:阻塞态

不可中断的等待状态D表示:阻塞态

僵死状态Z表示:如果父进程在子进程结束之前就退出了,那么它的子进程就变成了孤儿进程,这些孤儿进程就会一直处于 僵死状态,资源无法释放。需要找到一个启动进程作为其父进程,也可以让systemd作为其父进程来释放占用的资源。

暂停状态T表示:进程暂停再内存中,不会被调度,等待某种特殊处理。

父子进程

除了初始进程systemd(PID为1,采用并发启动,按需启动服务,通过unit实现管理)之外,Linux中的每个新的进程都必须由已经在运行的进程来创建。systemd是Linux启动的第一个进程,系统中其它的所有进程都是systemd进程的子进程。除了systemd之外,每个进程都必须有一个父进程,父进程和子进程之间的关系是管理和被管理的关系,当父进程终止时,子进程也随之而终止,但子进程终止,父进程并不一定终止。

PID:操作系统为进程的分配唯一编号

PPID:父进程编号

进程划分

●系统进程: 可以执行内存资源分配和进程切换等管理工作,这些进程的运行不受用户的干预。
●用户进程: 通过执行用户程序、应用程序或内核之外的系统程序而产生的进程。
用户进程主要分为:交互进程和守护进程。
●交互进程:由Shell启动的进程,即在终端通过输入命令启动的进程。交互进程既可以在前台运行,也可以在后台运行。
●守护进程: 一般在后台运行,通常是在Linux系统启动的同时启动,在系统关闭的同时终止。由于守护进程是一直运行着的, 一般所处的状态是等待处理请求任务。

Windows守护进程举例:

如下图所指的DHCP和DNS服务用于自动分配IP和解析域名的两个进程便是守护进程。
在这里插入图片描述
在这里插入图片描述

进程相关命令

查看程序的所有进程编号:pidof [程序名]

查看当前用户在当前终端所启动的进程:ps

查看所有进程详细信息(BSD风格):ps aux

●USER,启动进程的用户。
●%CPU,进程的CPU占用率。
●%MEM,进程的内存占用率。
●VSZ,进程占用的虚拟内存集的大小,单位KB。
●RSS,进程常驻内存集的大小,单位KB (这部分数据不允许被调度到swap分区中)
●TTY, 启动进程的终端。“?” 表示该进程由系统内核启动。
●STAT,进程的状态。“+”表示前台进程;“l” 表示多线程进程;“N”表示低优先级进程:“<” 表示高优先级进程;“s" 表示该进程是会话领导者(sessionleader),如果把这样的进程关闭,那么由该进程所派生出来的子进程也都将关闭。

●START, 进程的开始时间。
●TIME, 进程从启动以来占用CPU的总时间。
●COMMAND, 启动该进程的命令名称。如果命名名称带有方括号[],则表示该进程由系统

查看所有进程详细信息(systemV风格):ps -ef

显示目前所在的终端编号:tty

终端表示方式tty,通过远程连接的终端称为伪终端pts。

查看进程动态信息:top(按P占用CPU百分比,按N进程启动时间排序,按M内存占用百分比排序,按T占用CPU时间排序,按H切换显示线程,按q退出)

查看某个进程的所有线程:top -H -p

查看当前登录用户详细信息:who

/proc目录:用于保存内存中进程信息。

将进程切换到后台执行(会给一个作业号用于切换到前台):在命令最后面加一个&

查看后台执行的进程:jobs

将进程切换到前台:fg 【作业号】

将后台停止进程转为运行:bg 【作业号】

取消进程和当前终端的关联:nonub nc -lp 6000 &

终止进程:kill -9(强制终止) [进程号]

终止一组进程:kill all 【程序名】

查看当前登录的用户名:users

查看当前登录用户执行的操作:w

查看曾经登录的用户:last

查看CPU使用情况:uptime

查看内存占用情况:free -h -s(刷新结果)

查看进程树:pstree

服务管理

服务概念:服务是一种后台运行,并且等待用户或者其他软件调用的进程。

systemctl命令
格式:systemctl start | stop | status | restart | reload 【服务名.service】
start:启动服务,stop:停止服务,status:查看服务运行状态,restart:重启服务,reload:重新加载服务。
例如:重启某服务:systemctl restart ssh.service

查看服务某类型单元:systemctl list-units --type=service --all(列出所有服务包括没有运行的)

设置开机是否自动启动:systemctl enable|disable [服务名]

查看开机是否自动启动:systemctl is-enable [服务名]

查看Windows非微软服务的启动
在这里插入图片描述
查看系统默认运行级别:systemctl get-default

设置系统默认运行级别:systemctl get-default 【运行级别名,其中234一样】
在这里插入图片描述
设置系统默认运行级别: init 【0-6】

重置Root密码

在这里插入图片描述
输入红框字

在这里插入图片描述
按下ctrl+f重启,输入以下命令
在这里插入图片描述
配置一次性计划任务:at 【14:00 2021-09-06】(systemctl status atd需要保证atd服务启动)

查看邮寄:mailx

列出计划任务:at -l

查看某编号的计划任务内容:at -c

删除某编号计划任务:at -d [编号]

设置周期性计划任务:crontab -l -r(删除)

例如:
在这里插入图片描述
在这里插入图片描述

1.6 shell脚本编程

1.创建shell脚本文件一般后缀为.sh,首句一般加上#!/bin/bash表示脚本解释器

2.设置执行权限:chmod a+x test.sh

3.再执行shell脚本:bash test.sh【脚本文件名】

查看系统执行文件路径:echo $PATH

执行shell脚本文件:./test.sh

shell脚本三大部分:解释器+代码+注释

shell变量

自定义变量

定义变量:变量名=变量值(如果变量值带空格需要加"":强引用会提取变量值,或者’’:弱引用不会提取变量值)

再变量后面追加值:echo ${day}moring等价于echo day moring

$(命令):可以将变量值中的命令执行。

打包压缩为一个当前日期的命名文件:tar zcf etc_$(date +%F).bak /etc

批量输入变量:read a b c

屏幕输入变量(相当于c++的cin):read -p “请输入一个值:” num[变量名]

显示变量(相当于c++的cout):echo $num[变量名]

乘方运算:**

显示算术运算结果:echo let num= a + a+ a+b等价于echo [ [ [a+$b]

查看环境变量
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
**自定义环境变量:**export NAME=“student”

位置变量
在这里插入图片描述
预定义变量

$?:上有一条命令的执行状态(0为真,1~255为假)

$#:传递位置参数的数量

$0:当前脚本的名称

条件测试与比较

条件测试格式:[ 条件表达式 ](两边必须带空格)

条件测试状态:

●-d: 测试是否是目录。
●-f:测试是否为文件。
●-e:测试目录或文件是否存在。
●-r:测试当前用户是否有读取权限。
●-W: 测试当前用户是否有写入权限。
●-x:测试当前用户是否有执行权限。
●-L:测试是否为符号连接文件。

整数值比较符

通过转义字符:[ 3 /> 2 ]

通过双括号:[[ 3 > 2 ]]

比较操作符

●-eq:等于;
●-ne:不等于;
●-gt:大于;
●-It:小于;
●-le: 小于等于;
●-ge:大于等于。

字符串比较

shell默认将所有变量看成字符型,字符串必须加""

=:字符串是否匹配

!=:字符串不匹配

-z:字符串是否为空

逻辑测试

逻辑操作符:

用于条件

●-a:逻辑与,表示前后两个条件都成立时整个测试结果才为真。
●-0 :逻辑或,表示前后两个条件只要有一个成立时整个测试结果即为真。
●! :逻辑非,表示当指定的条件不成立时,整个测试结果为真。

用于命令

●&&: 当前面的命令执行成功后才会执行后面的命令;
●||:当前面的命令执行失败后才会执行后面的命令。

选择语句

格式:

if 条件测试命令
then
	命令序列1
else
	命令序列2
fi

例子

#!/bin/bash
LogFile="/var/log/messages”
if [ -e $LogFile ]
then
		wc -l $LogFile
else
		echo "$LogFile不存在"
fi

case语句

#!/bin/ bash
read -p "请任意输入一个字符,并按回车键: " key
case  "$key"  in
		[a-z]  |  [A-Z])
				echo "这是英文字母"
				; ;
		[0-9])
				echo "这是数字";;
		*)
				echo "这是功能键或其它字符"
esac

循环语句

for语句格式

for 变量名 in 取值列表 
do
	命令序列
done

扩展符:{},写法:{1…100}表示1到100

产生序列的命令:seq

用法: seq [选项]... 尾数
或: seq[ 选项]... 首数 尾数
或: seq [选项]... 首数 增量 尾数

while循环格式

while 条件测试命令
do
	命令序列
done

截取文件内容名:cut -d’:’ -f3(以:为分隔符,截取第三行的内容)

break语句:跳出当前循环体但不退出程序。

continue语句:用于暂停本次操作,跳至循环体顶部重新执行操作。本次操作continue后面命令将会被忽略。

exit语句:直接退出程序

shift语句:
在这里插入图片描述
多任务并发执行:shell只支持多进程,将未执行完的任务转到后台执行,先去执行其他命令,比如:在后面加一个&。

shell函数

格式:
在这里插入图片描述

正则表达式

●字符匹配元字符, 用于匹配其它字符,主要包括:点号“.”和 方括号“[]”。

“.”:可以匹配任意一个字符。 “[]”:可以匹配指定范围内任意一个字符

●匹配次数元字符,用在指定次数的字符后面,用于指定前面的字符要出现的次数,包括:星号“*”、加号“+”、大号括“{}”,问号“?”(后面三个都需要用\转义)。

"*":匹配前面字符任意次数可以为0次,例如:grep “r.*t” /etc/passwd(表示查找r开头以t结尾文件)

“?”:匹配前面的字符次数0或1次,例如:grep “ro?t” /etc/passwd(表示查找rot或者rt文件名的文件)

“+”:表示前面的字符至少出现1次 “{}”:表示指定前面字符出现次数,例如*"{1,3}"*(表出现次数1-3次)

●分组元字符,用于对关键字进行分组,主要是小括号“()”(将括号内字符作为整体)。(需要用\转义)
●位置锚定元字符, 用于指定关键字的位置,比如之前已经介绍过的“^”(指定开头字符)和“$”。

扩展正则表达式:在命令面前加一个-E选项,或者将grep命令改为egrep

**"=~":**判断一个变量值是否匹配一个正则表达式,但正则表达式必须使用[[]],也可以用于匹配变量值是否包含某个字符串。

例子:
在这里插入图片描述

sort命令

对文本信息进行排序(默认以首字母的ASCii码值大小排序):sort /etc/passwd

降序排序:sort -r /etc/passwd

以:为分隔符第三行按数值大小排序:sort -t":" -k3 -n /etc/passwd

-f:忽略大小写 -u:去重复行

去重并且统计去重的行数:uniq -c

字符替换:tr [原有字符] [目标替换字符] 例如:echo “abdefba” | tr ab 12输出结果为:12def21

sed命令

一次仅处理一行文本。 sed 通过文件或管道读取文件内容,但它并不直接修改源文件,而是将读取的内容一行一行的复制到缓冲区中,这个缓冲区被称为sed的模式空间(patternspace),然后在模式空间中设置匹配条件,条件符合则进行相应的编辑操作并输出处理结果,如果不符合则不做编辑直接输出文件内容。
在这里插入图片描述
地址定界有以下几种表示方法(#用具体数字代替) :。
(1)如果不指定地址,默认表示全文编辑。。
(2)单地址: #表示第几行,$表示最后一行。
(3) /PATTERN/:表示被此模式所匹配到的行,PATTERN可以是正则表达式。
(4)地址范围: ##表示从第几行到第几行,#,+# 表示从第几行向下几行。。
(5)步进: #~#表示从第几行开始每几行。

编辑命令主要包括:。
(1) d表示删除。
(2) p表示输出模式空间中被匹配到的内容。
(3) a表示在指定行之后追加内容。

(4) i表示在指定行之前插入内容。
(5) c表示将指定的行替换为新的内容。
(6) w表示将指定的内容另存为新的文件。
(7) r表示读取某文件的内容至指定的行之后。
(8) !表示取反。
(9) s///表示查找并替换指定字符串,其中的分隔符///也可以用@@@或###代替,与vim中的
替换命令非常相似。

awk命令

格式:awk 选项 ‘模式{动作}’ 文件

截取指定字段类似与java的sout(默认以空格和TAB键作为分隔符,第一个为 1... 1... 1...n):awk ’ “ip:”,{print $2}’

指定分隔符:awk -F":" ‘“ip:”,{print $2}’

指定多个分隔符如/#:awk -F"[/#]+" ‘{print $3}’

支持正则表达式,但是需要//作为定界,如:/正则表达式/

内置变量

NF:表示分割后字段数量,awk ‘{print NF}’

NR;每一行数据的行号

可以作为数学运算,并且数学符号是常规符号。

BEGIN模式和END模式

BEGIN指处理文件前需要做的动作,END处理之后要做的动作。
在这里插入图片描述

1.7 Linux扩展

VMware操作

快照:恢复之前步骤,保留备份

克隆:可以克隆完全一样的子盘,占用磁盘小,对母盘没有损害。

桥接模式:虚拟机直接连接到物理网络中。

**仅主机模式:**只能可以和自己主机通信,

**NAT模式:**只能虚拟机单向和外部网络通信

shell概念

包括图形界面GUI和命令行(字符)界面CLI。
在这里插入图片描述
Linux默认使用的shell是Bash。

windows和Linux系统:

任务管理器:操作进程的

资源管理器:操作管理图形化界面的

重启资源管理器
在这里插入图片描述
查看windows密码,可以通过WindowPE删除Windows删除不了的文件:

在这里插入图片描述
**物理终端:**一套输入输出设备,比如键盘和显示器统称为终端。

Linux是真正的多用户系统,一般的windows是多任务系统非真正意义的多用户系统。

Linux中shell转换:Ctrl+Alt+F1:图形界面 F2~F6: 字符界面,这些称为虚拟终端(tty)。

**虚拟终端:**多个虚拟终端之间互不干扰。

**云:**服务器的群集。

Xshell: 远程终端。

设置永久ip:

输入命令:vim /etc/sysconfig/network-scripts/ifcfg-ens33
在这里插入图片描述
让window10允许让其他网络ping通
在这里插入图片描述
**命令提示符:**用户名+主机名+目录+权限(#管理员权限,$用户权限(无法修改ip))

Shell命令格式:

命令名+选项+参数

命令名:命令的英文单词或缩写

选项:调用命令的具体功能

参数:需要处理的对象

通配符:

*:代表任意数量的任意字符

?:代表任意一个字符

[]:指定范围的任意一个字符

!:取反

{}:可以包含多个文件和路径名,如rm -r etc/{a,b,c}实现同时删除多个目录

-:范围号

Windows可执行文件:.bat .com .exe

Linux可执行文件:.sh

Linux目录含义

​ ●/boot: 存放Linux系统启动所必需的文件,Kernel 便存放在这个目录里。出于系统安全考
​ 虑,/boot目录通常被划分为独立的分区。
​ ●/etc: 存放Linux系统和各种程序的配置文件,Linux 中的很多操作和配置都是通过修改配
​ 置文件实现的。/etc 目录的作用类似于Windows系统中的注册表。
​ ●/dev: 存放Linux系统中的硬盘、光驱、鼠标等硬件设备文件。
​ ●/bin: 存放Linux系统中最常用的基本命令,任何用户都有权限执行。
​ ●/sbin:存放Linux系统基本的管理命令,只有管理员权限才可以执行。
​ ●/usr: 软件的默认安装位置,类似于Windows中的Program Files目录。
​ ●/home: 普通用户家目录(也称为主目录)。例如用户帐号“student”对应的家目录位于
​ “/home/student

​ ●/root: 超级用户root的家目录。
​ ●/mnt:一般是空的,用来临时挂载存储设备。
​ ●/media: 用于系统自动挂载可移动存储设备。
​ ●/tmp: 临时目录,用于存放系统或程序运行时产生的一些临时文件,可供所有用户执行写
​ 入操作。
​ ●/var: 存放系统运行过程中经常变化的文件,如/var/log 用于存放日志文件,/var/spoo/mail
​ 用于存放邮件等。

​ ●/lib、 /lib64:存放各种链接库文件。
​ ●/proc: 用于存放进程文件。
​ ●/run: 用于存放一些进程产生的临时文件,系统重启后会消失。
​ ●/lost+found: 存放一些 当系统意外崩溃或关机时产生的文件碎片。

bash配置文件

●profile 类文件,这类文件只在用户登录时执行一-次。。
●bashre类文件,这类文件不仅在用户登录时会执行,而且每当用户打开新的Shell或者创建子Shell时也会被执行,也就是说bashre类文件会被反复执行多次。

另外,无论profile类还是bashre类文件又都细分为全局配置和局部配置两个类别,这样Bash
配置文件具体就包括以下四种类别:。
●profile 类的全局配置文件: /etc/profile、 /etc/profile.d/*.sh (目录中所有以“.sh"结尾的文
件)。
●profile 类的局部配置文件: ~/.bash_ profile (“~/” 泛指用户家目录)。。
●bashrc类的全局配置文件: /etc/bashrc. 。

元数据

简单来说元数据就是文件属性
在这里插入图片描述
●最近访问时间(access time):查看、读取文件内容的时间。
●最近更改时间(modify time):文件内容改变的时间。
●最近改动时间(change time) :文件元数据改变的时间。

1.8 Linux网络通信

基础网络命令

ifconfig命令

​ 用于配置网卡ip地址信息,等网络参数信息或者查看显示网络接口信息,类似于windows的ipconfig命令还能够临时性的配置ip地址、子网掩码、广播地址、 网关信息等,**注意:**ifconfig命令只能用root去操作。

启动网络配置:systemctl restart network.service

自动分配ip:dhclient

1.安装命令:yum install net-tools

2.查看网络地址信息
ifconfig #查看所有的网络接口信息
ifconfig ens33 #查看指定的网卡信息

//第一块网卡的信息,设备名是ens33,网卡配置文件路径是/etc/sysconfig/network-scripts/ifcfg-ens33
root@chaogelinux ~]# ifconfig ens33
ens33: 	flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
		inet 192.168.178.189		//ipv4的地址
		netmask 255.255.255.0		//子网掩码地址
		broadcast 192.168.178.255 		//广播地址
		inet6 fe80::22c3:376e:b0ae:5076	prefixlen 64	scopeid 0x20<link>
		//RX /TX packages 代表网卡收发的流量数据包大小
		ether 00:0c:29:a0:87:d4	txqueuelen 1000  (Ethe rnet )
		RX packets 13065 bytes 7279028 (6.9 MiB )
		RX errors e	dropped 0	overruns 0 frame 0
		TX packets 6616	bytes 872431 (851.9 KiB)
		TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

3.指定开启、或者关闭网卡
#关闭网卡,注意不得在服务器上执行(注意学习在vmware中操作)
ifconfig 设备名字 up/ down
ifconfig ens33 down #停止网卡
ifconfig ens33 up #启用网卡

3.修改、设置ip地址
#添加一个新ip地址
ifconfig ens33:0 192.168.178.111 netmask 255.255.255.0 up
#第二种添加方式
ifconfig ens33:1 192. 168.178.120/24 up

4.修改机器的MAC地址信息
原本的MAC地址信息: ether 00: 0c:29: a0:87 :d4
修改MAC地址: ifconfig ens33 hw ether 00: 0c:29:13:10:CF

5.永久修改网络设备信息,ifconfig命令只是临时修改网络配置,要永久修改还得写入到配置文件中
/etc/sysconfig/network-scripts/ifcfg-设备名

route命令

路由分为静态和动态路由,Linux中配置的路由器是静态路由是手动配置,动态路由是由路由器自动配置。
在这里插入图片描述
参数解析:
Destination:表示网络号,netwo rk的意思
Gateway :表示网关地址,网络是通过该IP出口,如果显示0.0.0.0的ip,表示该路由信息,是从本机转发出去的
Genmask:子网掩码地址的表示,IP地址配合子网掩码,才是一个完整的网络信息
Flags:路由标记,标记当前的网络状态
Up 运行的状态
G 表示这是一个网关路由器
H 表示这个网关是一个主机
! 表示当前这个路由已近禁止

2.添加删除网关信息
网卡:就是数据包不经过任何的设定由路由表最后经过的地址关口。
网关:网络的关口,就好比家里的门,外出就得通过这个门,才能出去,数据也是一样,只能通过这个网关地址出外网。
在这里插入图片描述

ip命令

​ ip命令是iproute软件包中强大的网络管理工具,ifconf ig和route命令的作用,查看系统路由、网络设备,设置策略等功能。
在这里插入图片描述
在这里插入图片描述
查看ip路由表信息:ip route

ip检查arp缓存(显示网络邻居的信息),检查MAC地址信息:ip neighbour

netstat命令

显示网络连接信息,路由表信息,端口状态,网络连接情况等信息。

一个进程运行时,会暴露端口号以及产生响应的进程信息。
在这里插入图片描述
套接字连接情况的参数:
在这里插入图片描述
使用:
在这里插入图片描述
6.linux还有一个在cengtos7之后出现的网络查看工具
yum install iproute -y #安装ss工具
ss -an #显示所有的socket套接字连接情况

7.显示出所有正在监听中的套接字情况:ss -tunlplgrep 80

ping命令

可以用于对域名和ip地址进行ping命令,查看能否进行通信。与Windows不同ping会一直刷新结果。
在这里插入图片描述
解决本机无法DNS域名解析问题:
在这里插入图片描述

telnet命令

原用于远程登录的命令以及检查远程端口是否打开,但由于采用明文传输被弃用,选择了ssh命令。

使用:
在这里插入图片描述
例如:检查远程服务器是否打开数据库端口:telnet 123.206.16.61 3306

ssh命令

​ ssh命令是openssh软件包中的一个套件命令,使用ssh加密的协议进行远程登录,并且实现对服务器的运程管理。在windows平台,常用xshell, CRT具进行远程登录linux、macos,可以直接在命令行终端,输入ssh指令即可,ssh连接的是服务器上运行的sshd这个应用程序,且后台监听的是22端口。
在这里插入图片描述
远程执行服务器(未登录的情况下):ssh root@123.206.16.61 “free -m” #查看远程服务器的内存占用情况

wget命令

​ 用于网络稳定下载指定url资源文件,支持断点续传,支持ftp和http协议下载,还支持添加代理。

安装wget命令:yum install wget -y;

下载资源:wget 【url地址】

下载资源到本地指定文件:wget -0 [指定本地文件路径] [url地址]

限速下载:wget --limit-rate=1k [url地址]

断点续传:wget -c --limit-rate=1k [url地址]

后台下载:wget -b --limit-rate=1k [url地址]

伪代理下载:

在这里插入图片描述
检查网站是否存活:
在这里插入图片描述
具体使用:

用法: wget [选项]... [URL]...

长选项所必须的参数在使用短选项时也是必须的。

启动:
  -V,  --version           显示 Wget 的版本信息并退出。
  -h,  --help              打印此帮助。
  -b,  --background        启动后转入后台。
  -e,  --execute=COMMAND   运行一个“.wgetrc”风格的命令。

日志和输入文件:
  -o,  --output-file=FILE    将日志信息写入 FILE。
  -a,  --append-output=FILE  将信息添加至 FILE。
  -d,  --debug               打印大量调试信息。
  -q,  --quiet               安静模式 (无信息输出)。
  -v,  --verbose             详尽的输出 (此为默认值)。
  -nv, --no-verbose          关闭详尽输出,但不进入安静模式。
  -i,  --input-file=FILE     下载本地或外部 FILE 中的 URLs。
  -F,  --force-html          把输入文件当成 HTML 文件。
  -B,  --base=URL            解析与 URL 相关的
                             HTML 输入文件 (由 -i -F 选项指定)。
       --config=FILE         Specify config file to use.

下载:
  -t,  --tries=NUMBER            设置重试次数为 NUMBER (0 代表无限制)。
       --retry-connrefused       即使拒绝连接也是重试。
  -O,  --output-document=FILE    将文档写入 FILE。
  -nc, --no-clobber              skip downloads that would download to
                                 existing files (overwriting them).
  -c,  --continue                断点续传下载文件。
       --progress=TYPE           选择进度条类型。
  -N,  --timestamping            只获取比本地文件新的文件。
  --no-use-server-timestamps     不用服务器上的时间戳来设置本地文件。
  -S,  --server-response         打印服务器响应。
       --spider                  不下载任何文件。
  -T,  --timeout=SECONDS         将所有超时设为 SECONDS 秒。
       --dns-timeout=SECS        设置 DNS 查寻超时为 SECS 秒。
       --connect-timeout=SECS    设置连接超时为 SECS 秒。
       --read-timeout=SECS       设置读取超时为 SECS 秒。
  -w,  --wait=SECONDS            等待间隔为 SECONDS 秒。
       --waitretry=SECONDS       在获取文件的重试期间等待 1..SECONDS 秒。
       --random-wait             获取多个文件时,每次随机等待间隔
                                 0.5*WAIT...1.5*WAIT 秒。
       --no-proxy                禁止使用代理。
  -Q,  --quota=NUMBER            设置获取配额为 NUMBER 字节。
       --bind-address=ADDRESS    绑定至本地主机上的 ADDRESS (主机名或是 IP)。
       --limit-rate=RATE         限制下载速率为 RATE。
       --no-dns-cache            关闭 DNS 查寻缓存。
       --restrict-file-names=OS  限定文件名中的字符为 OS 允许的字符。
       --ignore-case             匹配文件/目录时忽略大小写。
  -4,  --inet4-only              仅连接至 IPv4 地址。
  -6,  --inet6-only              仅连接至 IPv6 地址。
       --prefer-family=FAMILY    首先连接至指定协议的地址
                                 FAMILY 为 IPv6,IPv4 或是 none。
       --user=USER               将 ftp 和 http 的用户名均设置为 USER。
       --password=PASS           将 ftp 和 http 的密码均设置为 PASS。
       --ask-password            提示输入密码。
       --no-iri                  关闭 IRI 支持。
       --local-encoding=ENC      IRI (国际化资源标识符) 使用 ENC 作为本地编码。
       --remote-encoding=ENC     使用 ENC 作为默认远程编码。
       --unlink                  remove file before clobber.

目录:
  -nd, --no-directories           不创建目录。
  -x,  --force-directories        强制创建目录。
  -nH, --no-host-directories      不要创建主目录。
       --protocol-directories     在目录中使用协议名称。
  -P,  --directory-prefix=PREFIX  以 PREFIX/... 保存文件
       --cut-dirs=NUMBER          忽略远程目录中 NUMBER 个目录层。

HTTP 选项:
       --http-user=USER        设置 http 用户名为 USER。
       --http-password=PASS    设置 http 密码为 PASS。
       --no-cache              不在服务器上缓存数据。
       --default-page=NAME     改变默认页
                               (默认页通常是“index.html”)。
  -E,  --adjust-extension      以合适的扩展名保存 HTML/CSS 文档。
       --ignore-length         忽略头部的‘Content-Length’区域。
       --header=STRING         在头部插入 STRING。
       --max-redirect          每页所允许的最大重定向。
       --proxy-user=USER       使用 USER 作为代理用户名。
       --proxy-password=PASS   使用 PASS 作为代理密码。
       --referer=URL           在 HTTP 请求头包含‘Referer: URL’。
       --save-headers          将 HTTP 头保存至文件。
  -U,  --user-agent=AGENT      标识为 AGENT 而不是 Wget/VERSION。
       --no-http-keep-alive    禁用 HTTP keep-alive (永久连接)。
       --no-cookies            不使用 cookies。
       --load-cookies=FILE     会话开始前从 FILE 中载入 cookies。
       --save-cookies=FILE     会话结束后保存 cookies 至 FILE。
       --keep-session-cookies  载入并保存会话 (非永久) cookies。
       --post-data=STRING      使用 POST 方式;把 STRING 作为数据发送。
       --post-file=FILE        使用 POST 方式;发送 FILE 内容。
       --content-disposition   当选中本地文件名时
                               允许 Content-Disposition 头部 (尚在实验)。
       --auth-no-challenge     发送不含服务器询问的首次等待
                               的基本 HTTP 验证信息。

HTTPS (SSL/TLS) 选项:
       --secure-protocol=PR     选择安全协议,可以是 auto、SSLv2、
                                SSLv3 或是 TLSv1 中的一个。
       --no-check-certificate   不要验证服务器的证书。
       --certificate=FILE       客户端证书文件。
       --certificate-type=TYPE  客户端证书类型,PEM 或 DER。
       --private-key=FILE       私钥文件。
       --private-key-type=TYPE  私钥文件类型,PEM 或 DER。
       --ca-certificate=FILE    带有一组 CA 认证的文件。
       --ca-directory=DIR       保存 CA 认证的哈希列表的目录。
       --random-file=FILE       带有生成 SSL PRNG 的随机数据的文件。
       --egd-file=FILE          用于命名带有随机数据的 EGD 套接字的文件。

FTP 选项:
       --ftp-user=USER         设置 ftp 用户名为 USER。
       --ftp-password=PASS     设置 ftp 密码为 PASS。
       --no-remove-listing     不要删除‘.listing’文件。
       --no-glob               不在 FTP 文件名中使用通配符展开。
       --no-passive-ftp        禁用“passive”传输模式。
       --retr-symlinks         递归目录时,获取链接的文件 (而非目录)。

递归下载:
  -r,  --recursive          指定递归下载。
  -l,  --level=NUMBER       最大递归深度 (inf 或 0 代表无限制,即全部下载)。
       --delete-after       下载完成后删除本地文件。
  -k,  --convert-links      让下载得到的 HTML 或 CSS 中的链接指向本地文件。
  -K,  --backup-converted   在转换文件 X 前先将它备份为 X.orig。
  -m,  --mirror             -N -r -l inf --no-remove-listing 的缩写形式。
  -p,  --page-requisites    下载所有用于显示 HTML 页面的图片之类的元素。
       --strict-comments    用严格方式 (SGML) 处理 HTML 注释。

递归接受/拒绝:
  -A,  --accept=LIST               逗号分隔的可接受的扩展名列表。
  -R,  --reject=LIST               逗号分隔的要拒绝的扩展名列表。
  -D,  --domains=LIST              逗号分隔的可接受的域列表。
       --exclude-domains=LIST      逗号分隔的要拒绝的域列表。
       --follow-ftp                跟踪 HTML 文档中的 FTP 链接。
       --follow-tags=LIST          逗号分隔的跟踪的 HTML 标识列表。
       --ignore-tags=LIST          逗号分隔的忽略的 HTML 标识列表。
  -H,  --span-hosts                递归时转向外部主机。
  -L,  --relative                  只跟踪有关系的链接。
  -I,  --include-directories=LIST  允许目录的列表。
  --trust-server-names             use the name specified by the redirection
                                   url last component.
  -X,  --exclude-directories=LIST  排除目录的列表。
  -np, --no-parent                 不追溯至父目录。

基础网络协议

直观图:
在这里插入图片描述
在这里插入图片描述
DNS协议
在这里插入图片描述
公网地址和局域网地址区别:

​ 公网地址是全球唯一标识的地址ip,局域网ip地址是在某一个局域内使用的ip地址(离开局域网则ip失效)

浏览网页原理:

通过域名解析ip地址找到对应ip地址的服务器,从服务器下载对应的文件到本地,通过浏览器对数据进行渲染。

nslookup命令
在这里插入图片描述
在这里插入图片描述
DNS劫持
在这里插入图片描述
dnsmasq

适用于小型网络,用于配置DNS服务器和DHCP服务器的工具。

配置文件
在这里插入图片描述
主配置文件:

#过滤文件中排除空行^$和  ^#或者^;的行 
[root@local-pyyu ~]# grep -Ev '^$|^[#;]' /etc/dnsmasq.conf
#定义dnsmasq从哪里获取上游DNS服务器的地址,默认是从/etc/resolv.conf获取
resolv-file=/etc/resolv.dnsmasq.conf
#访问baidu.com时的所有域名都会被解析成123.206.16.61
address=/baidu.com/123.206.16.61
address=/taobao.com/123.206.16.61
#定义dnsmasq监听的地址,默认是监控本机的所有网卡上。局域网内主机若要使用dnsmasq服务时,指定本机的IP地址
listen-address=192.168.178.180
#本地域名配置文件(不支持泛域名),添加内部需要解析的地址和域名(重新加载即可生效)
addn-hosts=/etc/dnsmasq.hosts
#记录dns查询日志服务器
log-queries
##设置日志记录
log-facility=/var/log/dnsmasq.log
#包含其他文件夹下所有配置文件
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig

内部解析地址配置

#添加需要内部解析的域名
[root@local-pyyu ~]# cat /etc/dnsmasq.hosts
123.206.16.61 testchaoge.com

添加dns上游服务器

#当某个域名无法解析的时候,发给上游服务器查询
[root@local-pyyu ~]# cat /etc/resolv.dnsmasq.conf
nameserver 223.5.5.5
nameserver 223.6.6.6

配置日志切割

[root@local-pyyu ~]# cat /etc/logrotate.d/dnsmasq
/var/log/dnsmasq.log {
    daily
    copytruncate
    missingok
    rotate 30
    compress
    notifempty
    dateext
    size 200M
}

启动dnsmasq服务

systemctl start dnsmasq

配置dns客户端地址

# 此时我们本地机器,以及是dns的服务端
[root@local-pyyu ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.178.180

测试dns域名解析

[root@local-pyyu ~]# tail -f  /var/log/dnsmasq.log
#安装dns客户端软件  dig与nslookup
yum install bind-utils -y 

dig www.4399.com|grep -i 'query time'  #第二次访问就能够缓存加速了

[root@local-pyyu ~]# nslookup baidu.com  #用本地dns
Server:        192.168.178.180
Address:    192.168.178.180#53

Name:    baidu.com
Address: 123.206.16.61

[root@local-pyyu ~]#
[root@local-pyyu ~]#
[root@local-pyyu ~]# nslookup baidu.com 223.5.5.5 #用公网dns
Server:        223.5.5.5
Address:    223.5.5.5#53

Non-authoritative answer:
Name:    baidu.com
Address: 39.156.69.79
Name:    baidu.com
Address: 220.181.38.148

[root@local-pyyu ~]# nslookup taobao.com  #用本地dns
Server:        192.168.178.180
Address:    192.168.178.180#53

Name:    taobao.com
Address: 123.206.16.61

[root@local-pyyu ~]# nslookup www.jd.com  #转发给上游服务器
Server:        192.168.178.180
Address:    192.168.178.180#53

Non-authoritative answer:
www.jd.com    canonical name = www.jd.com.gslb.qianxun.com.
www.jd.com.gslb.qianxun.com    canonical name = www.jdcdn.com.
www.jdcdn.com    canonical name = img2x-v6-sched.jcloudedge.com.
Name:    img2x-v6-sched.jcloudedge.com
Address: 117.131.205.3
Name:    img2x-v6-sched.jcloudedge.com
Address: 2409:8c02:11c:20:8000::3
ssh协议

基于口令的安全登录
在这里插入图片描述
ssh重要的配置文件
在这里插入图片描述
基于公钥的安全登录
在这里插入图片描述
免密登录实战

1.客户端本地生成一对公私钥
ssh-keygen -t rsa	#这个命令输入后,默认直接回车即可

2.客户端发送自己的公钥,发给服务器,存在服务器的authorized_keys文件中
ssh-copy-id root@192.168.178.142

3.此时直接输入登录命令,即可免密登录了ssh root@192.168.178.142

4.登录服务器,检查客户端的公钥信息

在这里插入图片描述

FTP协议

​ 文件传输协议,有两个默认端口20端口(用于传输数据),21端口(用于接收FTP客户端发来的指令和参数)。

FTP工作模式主要分为两种
主动模式: FTP服务器主动向客户端发起连接请求
被动模式: FTP服务器在等待,等待客户端发来请求

安装ftp服务
linux系统下,有一款工具实现ftp协议,名为vsftpd 非常安安全的FTP守护进程服务。

#基于centos平台,直接yum安装
yum install vsftpd -y

#注意关闭防火墙规则
iptables -F

vsftpd配置文件

#过滤出非注释行,非空行
grep -vE '^#|^$' /etc/vsftpd/vsftpd.conf	#配置文件位置
anonymous_enable=YES  #是否开启匿名用户允许访问
local_enable=YES    #是否允许本地用户登录FTP
write_enable=YES    #write_enable=YES #全局设置,是否容许写入,开启允许上传的权限
local_umask=022     #本地用户上传文件的umask
dirmessage_enable=YES    #允许为目录配置显示信息,显示每个目录下面的message_file文件的内容
xferlog_enable=YES    #开启日志功能,以及存放路径
xferlog_file=/var/log/vsftpd.log  #日志路径
connect_from_port_20=YES    #使用20端口进行连接
xferlog_std_format=YES    #标准日志格式
listen=YES        #绑定到监听端口
listen_ipv6=YES    #开启ipv6
pam_service_name=vsftpd    #设置PAM的名称
userlist_enable=YES    #设置用户已列表,允许或是禁止
tcp_wrappers=YES    #控制主机访问,检查/etc/hosts.allow  hosts.deny的配置达到防火墙作用

vsftpd允许用户三种认证的模式登录到FTP服务器。
●本地用户模式,基于Linux本地账号密码进行认证,配置简单,但是一旦被破解, 服务器信息就很危险
●匿名用户模式,任何人无需密码直接登录
●虚拟用户模式,单独为FTP创建用户数据库,基于口令验证账户信息,只适用于FTP,不会影响其他用
户信息,最为安全。

安装ftp客户端

yum	install	ftp	-y

ftp命令客户端

ftp> ascii  # 设定以ASCII方式传送文件(缺省值) 
ftp> bell   # 每完成一次文件传送,报警提示. 
ftp> binary # 设定以二进制方式传送文件. 
ftp> bye    # 终止主机FTP进程,并退出FTP管理方式. 
ftp> case   # 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母. 
ftp> cd     # 同UNIX的CD命令. 
ftp> cdup   # 返回上一级目录. 
ftp> chmod  # 改变远端主机的文件权限. 
ftp> close  # 终止远端的FTP进程,返回到FTP命令状态, 所有的宏定义都被删除. 
ftp> delete # 删除远端主机中的文件. 
ftp> dir [remote-directory] [local-file] # 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件. 
ftp> get [remote-file] [local-file] # 从远端主机中传送至本地主机中. 
ftp> help [command] # 输出命令的解释. 
ftp> lcd # 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录. 
ftp> ls [remote-directory] [local-file] # 同DIR. 
ftp> macdef                 # 定义宏命令. 
ftp> mdelete [remote-files] # 删除一批文件. 
ftp> mget [remote-files]    # 从远端主机接收一批文件至本地主机. 
ftp> mkdir directory-name   # 在远端主机中建立目录. 
ftp> mput local-files # 将本地主机中一批文件传送至远端主机. 
ftp> open host [port] # 重新建立一个新的连接. 
ftp> prompt           # 交互提示模式. 
ftp> put local-file [remote-file] # 将本地一个文件传送至远端主机中. 
ftp> pwd  # 列出当前远端主机目录. 
ftp> quit # 同BYE. 
ftp> recv remote-file [local-file] # 同GET. 
ftp> rename [from] [to]     # 改变远端主机中的文件名. 
ftp> rmdir directory-name   # 删除远端主机中的目录. 
ftp> send local-file [remote-file] # 同PUT. 
ftp> status   # 显示当前FTP的状态. 
ftp> system   # 显示远端主机系统类型. 
ftp> user user-name [password] [account] # 重新以别的用户名登录远端主机. 
ftp> ? [command] # 同HELP. [command]指定需要帮助的命令名称。如果没有指定 command,ftp 将显示全部命令的列表。
ftp> ! # 从 ftp 子系统退出到外壳。
匿名用户模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本地用户模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以查看无法登陆ftp的用户:

[root@chaogelinux vsftpd]# pwd
/etc/vsftpd
[root@chaogelinux vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh

#文件中写入的名字,都是禁止登录的
[root@chaogelinux vsftpd]# cat ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

####如此,禁止登录的用户
yumac: ~ yuchao$ftp 123.206.16.61
Connected to 123.206.16.61.
220 (vsFTPd 3.0.2)
Name (123.206.16.61:yuchao): root
530 Permission denied.
ftp: Login failed.
虚拟用户模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

samba服务

用于Linux和Windows文件共享。

安装:

#安装samba
yum install samba -y

#默认主配置文件
cat /etc/samba/smb.conf -n

配置文件:

[root@chaogelinux ftpdir]# ls /etc/samba/
lmhosts  smb.conf  smb.conf.example

全局配置:

workgroup = MYGROUP
Samba服务器加入的工作组名,一个局域网内,必须有相同的工作组名。

server string = Samba Server Version %v
Samba服务器注释,可以不选,%v代表显示Samba版本号

netbios name = samba
主机NetBIOS名

netbios name = samba
主机NetBIOS名

interfaces = lo eth0
设置Samba服务器端监听网卡,可以写网卡名称或者IP地址

hosts allow/deny = 10.10.10.1 
允许连接到Samba server客户端IP,多个参数用空格分开。可以用一个IP表示,也可以用一个网段表示。

max connections = 0
用来指定连接Samba server服务器最大连接数如果操作则连接请求被拒绝。0表示不限制。

deadtime = 0
来设置断掉一个没有任何文件的链接时间。单位十分钟,0代表Samba server不自动断开任何连接

time server = yes/no
用来设置让nmdb成为Windows客户端的时间服务器

log file = /var/log/samba/%m.log
设置Samba server日志文件存储位置和日志名称。文件后面加一个%m(主机名),每个主机都会有一个主机名.log日志文件

max log size = 50
限制每个日志文件的最大容量为50KB,0代表不限制

Security = user
设置客户端访问Samba服务器的验证方式,Samba4版本已经不使用share和server方式,这里不介绍
1) user:Samba用户名和密码登录
2) domain:添加Samba服务器到N域,由NT与控制起来进行身份验证。域安全级别,使用主域控制器(PDC)来完成认证

passdb backend = tdbsam
后台管理用户密码方式
1)smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户
2)tdbsam:该方式则是使用一个数据库文件来建立用户数据库。
3)ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。

smb passwd file = /etc/samba/smbpasswd
用来定义samba用户的密码文件。smbpasswd文件如果没有那就要手工新建。

username map = /etc/samba/smbusers
用来定义用户名映射,比如可以将root换administrator、admin等。

guest account = nobody
用来设置guest用户名。

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度

load printers = yes/no
设置是否在启动Samba时就共享打印机。

共享参数:

comment = 任意字符串
comment是对该共享的描述,可以是任意字符串。

browseable = yes/no
browseable用来指定该共享是否可以浏览。

path = 共享目录路径
path用来指定共享目录的路径。

writable = yes/no
用来指定该共享路径是否可写

invalid users = 禁止访问该共享的用户

invalid users用来指定不允许访问该共享资源的用户。
例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)

public = yes/no
用来指定该共享是否允许guest账户访问。

guest ok = yes/no
用来指定该共享是否允许guest账户访问。

配置全局共享资源

全局共享资源是针对于整体资源对每一个独立的资源生效,区域配置参数可以设置单独的共享,只对该资源生效。

#修改smb.conf如下,添加以下参数
[chaoge]
comment = This is test configure
path = /home/chaoge
public = no
writable = yes
guest ok = yes

pdbedit命令

samba用户管理命令

pdbedit -a username:新建Samba账户。

pdbedit -r username:修改Samba账户。

pdbedit -x username:删除Samba账户。

pdbedit -u, --user=USER      use username

pdbedit -L:列出Samba用户列表,读取passdb.tdb数据库文件。

pdbedit -Lv:列出Samba用户列表详细信息。

pdbedit -c “[D]” -u username:暂停该Samba用户账号。

pdbedit -c “[]” -u username:恢复该Samba用户账号。

创建访问共享资源的用户信息,创建用户必须在当前系统数据库存在:

[root@chaogelinux samba]# id chaoge
uid=2002(chaoge) gid=2002(chaoge) 组=2002(chaoge)

[root@chaogelinux samba]# pdbedit -a -u chaoge
new password:
retype new password:
Unix username:        chaoge
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-4265721185-3061822781-1370749960-1000
Primary Group SID:    S-1-5-21-4265721185-3061822781-1370749960-513
Full Name:
Home Directory:       \\chaogelinux\chaoge
HomeDir Drive:
Logon Script:
Profile Path:         \\chaogelinux\chaoge\profile
Domain:               CHAOGELINUX
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          三, 06 2月 2036 23:06:39 CST
Kickoff time:         三, 06 2月 2036 23:06:39 CST
Password last set:    三, 08 1月 2020 14:35:13 CST
Password can change:  三, 08 1月 2020 14:35:13 CST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[root@chaogelinux samba]#

检查用于资源共享的目录:

[root@chaogelinux samba]# ll /home/chaoge/
总用量 8
-rw-rw-r-- 1 chaoge chaoge   31 11月 21 09:57 fine.txt
drwxr-xr-x 2 chaoge chaoge 4096 1月   8 09:24 超哥到此一游

重启samba服务,注意防护墙,是否允许端口:

systemctl restart smb

#检查端口运行情况
[root@chaogelinux ~]# netstat -tunlp|grep smb
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      2545/smbd
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      2545/smbd
tcp6       0      0 :::445                  :::*                    LISTEN      2545/smbd
tcp6       0      0 :::139                  :::*                    LISTEN      2545/smbd

nfs服务

用于Linux和Linux之间的资源文件共享。

为什么需要共享存储?
在这里插入图片描述
nfs工作原理
在这里插入图片描述

当访问程序通过NFS客户端向NFS服务器端存储文件时,其数据请求流程如下:

1.用户访问网站程序,由程序在NFS客户端_上发出存取文件的请求,此时NFS客户端(执行程序的机器)的RPC服务(rpcbind) 就会通过网络向NFS服务器的RPC服务的111端口发出NFS文件存取功能的请求。
2.NFS服务器RPC找到对应注册的NFS端口,通知NFS客户端RPC服务
3.此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据
4.NFS客户端把数据存取成功后返回给前端程序,告知用户存取结果,完成一次存取请求。这也就证明,必须先启动RPC服务,再启动NFS服务的步骤。

NFS和RPC的概念
NFS通过port传输数据,NFS服 务在传输数据的时候,端口是随机选择的(自 己重启NFS服务,查看端口是否在变化)
答案:NFS是通过RPC服务,进行一个端口注册,实现告知用户,NFS的工作端口是哪一个

RPC是什么?

RPC (远程过程调用)
linux上使用NFS服务,必须启动2个服务
●NFS服务
●RPC服务

NFS服务通过RPC注册自己的端口功能

RPC服务功能就是记录每个NFS功能对应的一个端口号,并且RPC保证了NFS客户端发出请求的时候,把该功能对应的端口信息告知NFS客户端,保证客户端能够正确连接到NFS服务端的端口,达到数据传输的目的RPC好比是一个中介,处于客户端和服务端之间。
在这里插入图片描述
RPC服务如何知道NFS服务端的端口信息呢?

答案是: NFS服务器启动的时候,会随机采用若干个端口,并且主动在RPC服务中进行注册如此一来,RPC服务就正确知道所有NFS服务端的端口功能了,RPC夫妇默认使用linux的111端口来和NFS客户端进行一个交流,并且通过111端口将正确的NFS服务端的端口信息,告知给NFS客户端。因此NFS客户端就能够正确找到NFS服务端的端口信息了。

基本使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置nfs服务端

创建共享目录设置权限

1.确保RPC服务启动了
systemctl start rpcbind

2.创建需要共享的目录,以及资料,并且授权
mkdir -p /nfs_data
touch /nfs_data/好嗨哦.txt  

3.修改文件夹的user,group,这里更换权限是防止NFS客户端无法写入数据,当然也可以修改服务端目录777权限,但是不安全,不推荐
chown -R nfsnobody.nfsnobody  /nfs_data/

4.上一步修改的用户是nfs的匿名用户
[root@chaogelinux ~]# grep nfsnobody /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

配置nfs服务端配置文件,并查看挂载情况

1.编辑配置文件,写入如下挂载参数
[root@chaogelinux ~]# cat /etc/exports
/nfs_data *(insecure,rw,sync)

2.重新加载nfs服务
systemctl reload nfs

3.查看NFS服务端挂载情况
[root@chaogelinux ~]# showmount -e
Export list for chaogelinux:
/nfs_data *

4.查看NFS服务端挂载默认的参数,如下大多数参数都是默认的,不做过多了解
[root@chaogelinux ~]# cat /var/lib/nfs/etab
/nfs_data    *(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)

5.把本地机器当做客户端做一个简单的挂载测试
[root@chaogelinux ~]# mount -t nfs 123.206.16.61:/nfs_data /mnt
[root@chaogelinux ~]#
[root@chaogelinux ~]#
# 发现已经可以查看到挂载目录的数据
[root@chaogelinux ~]# ls /mnt/
好嗨哦.txt

# 检查挂载情况
[root@chaogelinux ~]# df -h |tail -1
123.206.16.61:/nfs_data   50G   22G   26G   47% /mnt

[root@chaogelinux ~]# mount |tail -1
123.206.16.61:/nfs_data on /mnt type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.141.32.137,local_lock=none,addr=123.206.16.61)


至此NFS服务端挂载成功,配置完毕

注意点:●修改/etc/exports文件后,注意要重启systemctl reload nfs 或是exportfs -r重新加载配置,无需重启

1.9 Nginx

概念

​ Nginx 是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50, 000个并发连接数。

正向代理

​ 需要配置代理服务器,访问目标服务器,对外暴露的是真实服务器IP地址。
在这里插入图片描述
反向代理

​ 用户只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器, 暴露的是代理服务器地址,隐藏了真实服务器IP地址。
在这里插入图片描述
负载均衡

​ 单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,称为负载均衡。
在这里插入图片描述
动静分离

​ 为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。

在这里插入图片描述

nginx安装

方式一:

安装包下载网址:http://nginx.org/	下载:nginx-1.19.7.tar.gz

需要安装的相关依赖:pcre-8.37.tar.gz		openssl-1.0.1t.tar.gz		zlib-1.2.8.tar.gz .gz

1.安装pcre依赖:wget 	http://downloads.sourceforge.net/project/pcre/pare/8.44/pcre-8.44.tar.gz.

​							解压文件,进入解压文件,执行./configure.

​							编译:make&&make install

​							查看版本号:pcre-config	--version

2.安装其他依赖:yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devely

3.安装nginx安装包:与第一步步骤一样。

4.启动nginx:找到nginx中的sbin目录启动nignx。

5.查看开放的端口号:firewall-cmd -list-all

6.设置开放的端口号:firewall-cmd -add-service=http -permanents
									 sudo firewall-cmd --add-port=80/tcp --permanente

7.重启防火墙:firewall-cmd	--reload

方式二:

官网下载 nginx-1.19.10,移动到服务器的root目录中,进行安装。

1、在 /usr/local/ 下创建 nginx ⽂件夹并进⼊

mkdir /usr/local/nginx
cd /usr/local/nginx

2、将 Nginx 安装包解压到 /usr/local/nginx 中

tar -zxvf /root/nginx-1.21.0.tar.gz -C ./

3、安装相关依赖:

yum -y install pcre-devel
yum -y install openssl openssl-devel

4、编译安装nginx

cd nginx-1.21.0
./configure
make && make install

5.安装完成后,Nginx的可执⾏⽂件位于:

/usr/local/nginx/sbin/nginx

6.当没有sbin目录时执行以下命令即可:

[root@iZ2ze0ik13nvkgf4uz59v5Z nginx-1.21.0]   ./configure --prefix=/usr/local/nginx
[root@iZ2ze0ik13nvkgf4uz59v5Z nginx-1.21.0]    make
[[root@iZ2ze0ik13nvkgf4uz59v5Z nginx-1.21.0]     make install

nginx常用命令

使用nginx操作命令前提条件:必须进入nginx的目录:/usr/local/nginx/sbin

1、查看nginx的版本号:./nginx -v

2、启动nginx:./nginx

3、关闭nginx:./nginx -s stop

4、重启nginx:./nginx -s reload

命令:

nginx -s stop       快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。

nginx -s quit       平稳关闭Nginx,保存相关信息,有安排的结束web服务。

nginx -s reload     因改变了Nginx相关配置,需要重新加载配置而重载。

nginx -s reopen     重新打开日志文件。

nginx -c filename   为 Nginx 指定一个配置文件,来代替缺省的。

nginx -t   不运行,仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。

nginx -v            显示 nginx 的版本。

nginx -V            显示 nginx 的版本,编译器版本和配置参数。

nginx配置文件

配置文件位置:/usr/local/nginx/config/nginx.config/

配置文件组成:

第一部分:全局块。
从配置文件开始到events块之间的内容,主要会设置一些影响 nginx服务器整体运行的配置指令。
比如worker processes 1;	#worker_ processes 值越大,可以支持的并发处理量也越多。

第二部分:events块
events块涉及的指令主要影响Nginx服务器与用户的网络连接
比如worker_ connections 1024; 	#支持的最大连接数。

第三部分:http块
Nginx服务器配置中最频繁的部分
http块也可以包括http全局块、server块
配置实例
反向代理

1、实现效果
(1)打开浏览器,在浏览器地址栏输入地址www.123.com, 跳转到liunx系统tomcat主页面中。
在这里插入图片描述
2、具体步骤

(1)在liunx系统安装tomcat,使用默认端口8080

​ *tomcat安装文件放到liunx系统中,解压
​ *进入tomcat的bin目录中./startup.sh 启动tomcat服务器

(2)对外开放访问的端口:
firewall-cmd -add-port=8080/tcp --permanent
firewall-cmd -reload
查看已经开放的端口号:firewall-cmd -list-all

(3)配置Windows中的hosts文件(位置:C:\Windows\System32\drivers\etc)添加下列一句话:
在这里插入图片描述
(4)在Linux中修改nginx的配置文件如下:
在这里插入图片描述
当需要反向代理多个服务器时需要添加:
在这里插入图片描述
listen代表监听的端口号,server_name代表反向代理服务器地址,location定位到目标服务器的相关配置信息。

location指令说明

location	【=|~|~*|^~】`url{

}

1、= : 不含正则表达式的uri,要求请求字符串与uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。
2、~ : 用于表示uri包含正则表达式,并且区分大小写。。
3、~*: 用于表示uri包含正则表达式,并且不区分大小写。
4、^~: 用于不含正则表达式的 uri前,要求Nginx 服务器找到标识uri和请求字符串匹配度最高的location 后,立即使用此location 处理请求,而不再使用location块中的正则uri 和请求字符串做匹配。

注意: 如果uri包含正则表达式,则必须要有~或者 ~* 标识。

负载均衡

负载均衡文件配置:

在http代码块中添加如下配置:
在这里插入图片描述
分配策略

1、轮询(默认)
每个请求按时间顺序逐一-分配到不同的后端服务器, 如果后端服务器down掉,能自动剔除。

2、weight.
weight代表权重默认为1,权重越高被分配的客户端越多。

3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器

4、fair (第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

使用:

upstream	myserver{
	ip_hash;
	server	192.168.17.129:8080	weight=5;
	server	192.168.17.129:8081	weight=10;
	fair;
}
动静分离

​ 通过location 指定不同的后缀名实现不同的请求转发。通过expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体Expires 定义:是给一个资源设定个过期时间, 也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires 来缓存)。

nginx配置:
在这里插入图片描述

高可用

有备用的nginx服务器,防止主nginx服务器宕机,被称为高可用。需要使用keepalived的虚拟ip绑定主备nginx服务器ip。
在这里插入图片描述
安装keepalived:

yum install keepalived -y

修改keepalived.conf配置文件:

全局配置
global_ defs {
    notification email {
        acassen@firewall.loc 
        failover@firewall.loc
        sysadmin@firewall.loc
    }
    noti fication email from Alexandre.Cassen@firewall.loc
    smtp server 192.168.17.129
    smtp connect timeout 30
    router id LVS DEVELBACK		#访问到主机
}


脚本配置
vrrp script chk http port {
    script "/usr/local/src/nginx_check.sh'	#脚本路径
    interval 2	#(检测脚本执行的间隔)
    weight -20 #权重,当主服务器宕机,则权重降低20,当备服务器权重高于主服务器时则会晋升为主服务器。
}


配置虚拟ip信息
vrrp_ instance VI_ 1 {
    state BACKUP 		#主备服务器名
    interface ens33 	//绑定网卡
    virtual router id 51		#主、备机的virtual_ router_ id必须相同
    priority 90			#主、备机取不同的优先级,主机值较大,备份机值较小
    advert int	1		#发生信号,每隔多长时间发送信号用于检查主备服务器是否宕机
    authentication {
        auth type PASS	 //权限校验的方式,使用的密码
        auth pass 1111
    }
    vi rtual ipaddress {
    192.168.17.50 / / VRRP H虛拟地址
}	

脚本文件:

#!/bin/bash
A=`ps -C nginx	-no-header | wc -1`
if	[ $ A -eq 0 ];then
	/usr/local/nginx/sbin/nginx
	sleep 2
    if[ `ps -C nginx --no-header | wc -1` -eq 0 ];then
    	killall keepalived
    fi
fi

启动服务器和keepalived:

启动nginx:./nginx
启动keepalived:systemctl start keepalived.service

原理

nginx中存在一个master进程对应多个worker进程,当master接收到客户端请求时,worker进程会去争抢这个任务,使用的是多路复用技术。

在这里插入图片描述
1.优点

(1)可以使用nginx -s reload热部署,利用nginx进行热部署操作
(2)woker都是独立的进程,当其中的一个woker,出现问题,其他woker独立的,继续进行争抢,实现请求过程,不会造成服务中断.

2.设置worker数量:一般与cpu核数相同。

3.连接数worker connections.

发送请求,占用了woker的几个连接数?
答案: 2或者4个。
nginx有一个master,有四个woker,每个woker,支持最大的连接数1024,支持的最大并发数是多少?
●普通的静态访问最大并发数是: worker connections * worker processes /2 。
●如果是HTTP作为反向代理来说,最大并发数量应该是worker. connections* worker_ processes/4 。

笔记总结所学习的视频分别是:
1.我感觉这个CentOS讲的比较好,但是没有网络通信的讲解:https://www.bilibili.com/video/BV1uZ4y1u7Ca?from=search&seid=7350886073270667186&spm_id_from=333.337.0.0
2.网络通信我看的是,感觉还行吧:
https://www.bilibili.com/video/BV1tK4y1Z7F4?from=search&seid=17494179028227077437&spm_id_from=333.337.0.0
3.nginx看的是尚硅谷的,入门还不错,但还是更推荐看官方文档。

最后,好累啊把自己笔记复制上来,想不到这么多,如果对你有用可以给个免费的赞吗o( ̄▽ ̄)ブ!!!!!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值