赞
踩
内部命令:指集成在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编辑器: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
组概念:
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行末添加
!:指不能执行的命令
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命令基本格式
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 【软件包名】
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.创建shell脚本文件一般后缀为.sh,首句一般加上#!/bin/bash表示脚本解释器
2.设置执行权限:chmod a+x test.sh
3.再执行shell脚本:bash test.sh【脚本文件名】
查看系统执行文件路径:echo $PATH
执行shell脚本文件:./test.sh
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
**"=~":**判断一个变量值是否匹配一个正则表达式,但正则表达式必须使用[[]],也可以用于匹配变量值是否包含某个字符串。
例子:
对文本信息进行排序(默认以首字母的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的模式空间(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 选项 ‘模式{动作}’ 文件
截取指定字段类似与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处理之后要做的动作。
快照:恢复之前步骤,保留备份
克隆:可以克隆完全一样的子盘,占用磁盘小,对母盘没有损害。
桥接模式:虚拟机直接连接到物理网络中。
**仅主机模式:**只能可以和自己主机通信,
**NAT模式:**只能虚拟机单向和外部网络通信
包括图形界面GUI和命令行(字符)界面CLI。
Linux默认使用的shell是Bash。
任务管理器:操作进程的
资源管理器:操作管理图形化界面的
重启资源管理器
查看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
●/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) :文件元数据改变的时间。
用于配置网卡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-设备名
路由分为静态和动态路由,Linux中配置的路由器是静态路由是手动配置,动态路由是由路由器自动配置。
参数解析:
Destination:表示网络号,netwo rk的意思
Gateway :表示网关地址,网络是通过该IP出口,如果显示0.0.0.0的ip,表示该路由信息,是从本机转发出去的
Genmask:子网掩码地址的表示,IP地址配合子网掩码,才是一个完整的网络信息
Flags:路由标记,标记当前的网络状态
Up 运行的状态
G 表示这是一个网关路由器
H 表示这个网关是一个主机
! 表示当前这个路由已近禁止
2.添加删除网关信息
网卡:就是数据包不经过任何的设定由路由表最后经过的地址关口。
网关:网络的关口,就好比家里的门,外出就得通过这个门,才能出去,数据也是一样,只能通过这个网关地址出外网。
ip命令是iproute软件包中强大的网络管理工具,ifconf ig和route命令的作用,查看系统路由、网络设备,设置策略等功能。
查看ip路由表信息:ip route
ip检查arp缓存(显示网络邻居的信息),检查MAC地址信息:ip neighbour
显示网络连接信息,路由表信息,端口状态,网络连接情况等信息。
一个进程运行时,会暴露端口号以及产生响应的进程信息。
套接字连接情况的参数:
使用:
6.linux还有一个在cengtos7之后出现的网络查看工具
yum install iproute -y #安装ss工具
ss -an #显示所有的socket套接字连接情况
7.显示出所有正在监听中的套接字情况:ss -tunlplgrep 80
可以用于对域名和ip地址进行ping命令,查看能否进行通信。与Windows不同ping会一直刷新结果。
解决本机无法DNS域名解析问题:
原用于远程登录的命令以及检查远程端口是否打开,但由于采用明文传输被弃用,选择了ssh命令。
使用:
例如:检查远程服务器是否打开数据库端口:telnet 123.206.16.61 3306
ssh命令是openssh软件包中的一个套件命令,使用ssh加密的协议进行远程登录,并且实现对服务器的运程管理。在windows平台,常用xshell, CRT具进行远程登录linux、macos,可以直接在命令行终端,输入ssh指令即可,ssh连接的是服务器上运行的sshd这个应用程序,且后台监听的是22端口。
远程执行服务器(未登录的情况下):ssh root@123.206.16.61 “free -m” #查看远程服务器的内存占用情况
用于网络稳定下载指定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重要的配置文件
基于公钥的安全登录
免密登录实战
1.客户端本地生成一对公私钥
ssh-keygen -t rsa #这个命令输入后,默认直接回车即可
2.客户端发送自己的公钥,发给服务器,存在服务器的authorized_keys文件中
ssh-copy-id root@192.168.178.142
3.此时直接输入登录命令,即可免密登录了ssh root@192.168.178.142
4.登录服务器,检查客户端的公钥信息
文件传输协议,有两个默认端口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.
用于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
用于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服务端的端口信息了。
创建共享目录设置权限
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重新加载配置,无需重启
Nginx 是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50, 000个并发连接数。
正向代理
需要配置代理服务器,访问目标服务器,对外暴露的是真实服务器IP地址。
反向代理
用户只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器, 暴露的是代理服务器地址,隐藏了真实服务器IP地址。
负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,称为负载均衡。
动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
方式一:
安装包下载网址: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的目录:/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 的版本,编译器版本和配置参数。
配置文件位置:/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( ̄▽ ̄)ブ!!!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。