内部命令:指集成在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 标准输入重定向(EOF为结束符):cat < 错误信息重定向:ls /homedd 2>home.txt (默认是正确信息) 过滤(/dev/null)全部信息(&>重定向错误和正确信息):find / -user student &> /dev/null(黑洞) 管道(将上一个命令执行结果传给下一个命令):ll -h /etc | grep net 进入vi编辑器:vim [文件名] 在命令模式下按下v键便可以进入可视模式,此时左右移动方向键,就会将光标所经过区域的字符选中,然后可以用y键进行复制,用d键进行删除,或是用p键进行粘贴。不论执行何种操作,在操作结束之后,都会自动退出可视模式。 查看vi编辑器教程:vimtutor 创建快捷图标: 组概念: Linux系统每创建一个用户会自动为这个用户创建一个同名的组,被称为基本组。每个用户也可以加入不同的组,加入的组被称为附加组,此用户也会拥有组中的所有权限。 用户账户类型 ●超级用户: root 是Linux系统中默认的超级用户帐号,对系统拥有至高无上的完全权限。 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 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规则 设置一个用户对文件的权限: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用户之上的设置的权限。 限制用户切换 vim /etc/pam.d/su 指定用户可以切换到root用户:gpasswd -a 【指定用户名】 wheel 权限提升(此用户拥有授权的权限):sudo sudoers文件 格式: 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 磁盘配额:限制用户对磁盘容量和上传文件数。 设置磁盘配额: 启动磁盘配额:vim /dev/fstab修改配置文件行末添加 生成可控大小的文件:dd if=[指定输入的设备(文件)] of=[指定输入的设备文件] bs=[块大小] count=[块数量] 查看用户或组配额情况:quota -u [用户名] 查看磁盘配额情况:requota [磁盘分区设备] RAID 概念:将多个磁盘组合在一起形成硬盘组。 RAID 0级别:将数据分成n块放入n个硬盘中,提高存储速度。 RAID 1级别:将数据备份其他硬盘。 RAID 10级别:至少需要4块硬盘,按0和1方式共同存储。 RAID 5级别:至少3块硬盘,将数据分为两块存储在两块硬盘中,第三块硬盘记录校验值用于计算缺失数据。 配置RAID: 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配置文件: baseurl:指定yum源访问路径,指向网络web服务器:http://…,指向FTP服务器:ftp://…,指向本地:file://… enabled:是否启用yum源,启用为1,禁用为0 gpgcheck:是否检查rmp包来源合法性,1表示检查,0表示不检查。设置为1必须加这行 repo仓库文件 自定义repo仓库 先切换到:cd /etc/yum.repos.d目录下在开始定义yum源文件 配置yum源 yum命令使用 查看软件包信息:yum info 【软件包名】 软包安装:yum install 【软件包名】 -y(无需确认) 卸载软件:yum remove 【软件包名】 清除本地缓存:yum clean all 查看yum下的软件包:yum list 【软件包】(支持通配符) rpm命令 查询软件包: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:父进程编号 进程划分 ●系统进程: 可以执行内存资源分配和进程切换等管理工作,这些进程的运行不受用户的干预。 Windows守护进程举例: 如下图所指的DHCP和DNS服务用于自动分配IP和解析域名的两个进程便是守护进程。 查看程序的所有进程编号:pidof [程序名] 查看当前用户在当前终端所启动的进程:ps 查看所有进程详细信息(BSD风格):ps aux ●USER,启动进程的用户。 ●START, 进程的开始时间。 查看所有进程详细信息(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 list-units --type=service --all(列出所有服务包括没有运行的) 设置开机是否自动启动:systemctl enable|disable [服务名] 查看开机是否自动启动:systemctl is-enable [服务名] 查看Windows非微软服务的启动 设置系统默认运行级别:systemctl get-default 【运行级别名,其中234一样】 重置Root密码 查看邮寄: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] $?:上有一条命令的执行状态(0为真,1~255为假) $#:传递位置参数的数量 $0:当前脚本的名称 条件测试格式:[ 条件表达式 ](两边必须带空格) 条件测试状态: ●-d: 测试是否是目录。 整数值比较符 通过转义字符:[ 3 /> 2 ] 通过双括号:[[ 3 > 2 ]] 比较操作符 ●-eq:等于; 字符串比较 shell默认将所有变量看成字符型,字符串必须加"" =:字符串是否匹配 !=:字符串不匹配 -z:字符串是否为空 逻辑操作符: 用于条件 ●-a:逻辑与,表示前后两个条件都成立时整个测试结果才为真。 用于命令 ●&&: 当前面的命令执行成功后才会执行后面的命令; 格式: 例子 case语句 for语句格式 扩展符:{},写法:{1…100}表示1到100 产生序列的命令:seq while循环格式 截取文件内容名:cut -d’:’ -f3(以:为分隔符,截取第三行的内容) break语句:跳出当前循环体但不退出程序。 continue语句:用于暂停本次操作,跳至循环体顶部重新执行操作。本次操作continue后面命令将会被忽略。 exit语句:直接退出程序 shift语句: 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),然后在模式空间中设置匹配条件,条件符合则进行相应的编辑操作并输出处理结果,如果不符合则不做编辑直接输出文件内容。 编辑命令主要包括:。 (4) i表示在指定行之前插入内容。 格式: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是真正的多用户系统,一般的windows是多任务系统非真正意义的多用户系统。 Linux中shell转换:Ctrl+Alt+F1:图形界面 F2~F6: 字符界面,这些称为虚拟终端(tty)。 **虚拟终端:**多个虚拟终端之间互不干扰。 **云:**服务器的群集。 Xshell: 远程终端。 设置永久ip: 输入命令:vim /etc/sysconfig/network-scripts/ifcfg-ens33 Shell命令格式: 命令名+选项+参数 命令名:命令的英文单词或缩写 选项:调用命令的具体功能 参数:需要处理的对象 通配符: *:代表任意数量的任意字符 ?:代表任意一个字符 []:指定范围的任意一个字符 !:取反 {}:可以包含多个文件和路径名,如rm -r etc/{a,b,c}实现同时删除多个目录 -:范围号 Windows可执行文件:.bat .com .exe Linux可执行文件:.sh ●/boot: 存放Linux系统启动所必需的文件,Kernel 便存放在这个目录里。出于系统安全考 ●/root: 超级用户root的家目录。 ●/lib、 /lib64:存放各种链接库文件。 bash配置文件 ●profile 类文件,这类文件只在用户登录时执行一-次。。 另外,无论profile类还是bashre类文件又都细分为全局配置和局部配置两个类别,这样Bash 简单来说元数据就是文件属性 用于配置网卡ip地址信息,等网络参数信息或者查看显示网络接口信息,类似于windows的ipconfig命令还能够临时性的配置ip地址、子网掩码、广播地址、 网关信息等,**注意:**ifconfig命令只能用root去操作。 启动网络配置:systemctl restart network.service 自动分配ip:dhclient 1.安装命令:yum install net-tools 2.查看网络地址信息 3.指定开启、或者关闭网卡 3.修改、设置ip地址 4.修改机器的MAC地址信息 5.永久修改网络设备信息,ifconfig命令只是临时修改网络配置,要永久修改还得写入到配置文件中 路由分为静态和动态路由,Linux中配置的路由器是静态路由是手动配置,动态路由是由路由器自动配置。 2.添加删除网关信息 ip命令是iproute软件包中强大的网络管理工具,ifconf ig和route命令的作用,查看系统路由、网络设备,设置策略等功能。 ip检查arp缓存(显示网络邻居的信息),检查MAC地址信息:ip neighbour 显示网络连接信息,路由表信息,端口状态,网络连接情况等信息。 一个进程运行时,会暴露端口号以及产生响应的进程信息。 7.显示出所有正在监听中的套接字情况:ss -tunlplgrep 80 可以用于对域名和ip地址进行ping命令,查看能否进行通信。与Windows不同ping会一直刷新结果。 原用于远程登录的命令以及检查远程端口是否打开,但由于采用明文传输被弃用,选择了ssh命令。 使用: ssh命令是openssh软件包中的一个套件命令,使用ssh加密的协议进行远程登录,并且实现对服务器的运程管理。在windows平台,常用xshell, CRT具进行远程登录linux、macos,可以直接在命令行终端,输入ssh指令即可,ssh连接的是服务器上运行的sshd这个应用程序,且后台监听的是22端口。 用于网络稳定下载指定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地址] 伪代理下载: 公网地址是全球唯一标识的地址ip,局域网ip地址是在某一个局域内使用的ip地址(离开局域网则ip失效) 浏览网页原理: 通过域名解析ip地址找到对应ip地址的服务器,从服务器下载对应的文件到本地,通过浏览器对数据进行渲染。 适用于小型网络,用于配置DNS服务器和DHCP服务器的工具。 内部解析地址配置 添加dns上游服务器 配置日志切割 启动dnsmasq服务 配置dns客户端地址 测试dns域名解析 基于口令的安全登录 文件传输协议,有两个默认端口20端口(用于传输数据),21端口(用于接收FTP客户端发来的指令和参数)。 FTP工作模式主要分为两种 安装ftp服务 vsftpd配置文件 vsftpd允许用户三种认证的模式登录到FTP服务器。 安装ftp客户端 ftp命令客户端 用于Linux和Windows文件共享。 安装: 配置文件: 全局配置: 共享参数: 配置全局共享资源 全局共享资源是针对于整体资源对每一个独立的资源生效,区域配置参数可以设置单独的共享,只对该资源生效。 pdbedit命令 samba用户管理命令 创建访问共享资源的用户信息,创建用户必须在当前系统数据库存在: 检查用于资源共享的目录: 重启samba服务,注意防护墙,是否允许端口: 用于Linux和Linux之间的资源文件共享。 当访问程序通过NFS客户端向NFS服务器端存储文件时,其数据请求流程如下: 1.用户访问网站程序,由程序在NFS客户端_上发出存取文件的请求,此时NFS客户端(执行程序的机器)的RPC服务(rpcbind) 就会通过网络向NFS服务器的RPC服务的111端口发出NFS文件存取功能的请求。 NFS和RPC的概念 RPC是什么? RPC (远程过程调用) NFS服务通过RPC注册自己的端口功能 RPC服务功能就是记录每个NFS功能对应的一个端口号,并且RPC保证了NFS客户端发出请求的时候,把该功能对应的端口信息告知NFS客户端,保证客户端能够正确连接到NFS服务端的端口,达到数据传输的目的RPC好比是一个中介,处于客户端和服务端之间。 答案是: NFS服务器启动的时候,会随机采用若干个端口,并且主动在RPC服务中进行注册如此一来,RPC服务就正确知道所有NFS服务端的端口功能了,RPC夫妇默认使用linux的111端口来和NFS客户端进行一个交流,并且通过111端口将正确的NFS服务端的端口信息,告知给NFS客户端。因此NFS客户端就能够正确找到NFS服务端的端口信息了。 创建共享目录设置权限 配置nfs服务端配置文件,并查看挂载情况 注意点:●修改/etc/exports文件后,注意要重启systemctl reload nfs 或是exportfs -r重新加载配置,无需重启 Nginx 是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50, 000个并发连接数。 正向代理 需要配置代理服务器,访问目标服务器,对外暴露的是真实服务器IP地址。 用户只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器, 暴露的是代理服务器地址,隐藏了真实服务器IP地址。 单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,称为负载均衡。 为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。 方式一: 方式二: 官网下载 nginx-1.19.10,移动到服务器的root目录中,进行安装。 1、在 /usr/local/ 下创建 nginx ⽂件夹并进⼊ 2、将 Nginx 安装包解压到 /usr/local/nginx 中 3、安装相关依赖: 4、编译安装nginx 5.安装完成后,Nginx的可执⾏⽂件位于: 6.当没有sbin目录时执行以下命令即可: 使用nginx操作命令前提条件:必须进入nginx的目录:/usr/local/nginx/sbin 1、查看nginx的版本号:./nginx -v 2、启动nginx:./nginx 3、关闭nginx:./nginx -s stop 4、重启nginx:./nginx -s reload 命令: 配置文件位置:/usr/local/nginx/config/nginx.config/ 配置文件组成: 1、实现效果 (1)在liunx系统安装tomcat,使用默认端口8080 *tomcat安装文件放到liunx系统中,解压 (2)对外开放访问的端口: (3)配置Windows中的hosts文件(位置:C:\Windows\System32\drivers\etc)添加下列一句话: location指令说明 1、= : 不含正则表达式的uri,要求请求字符串与uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。 注意: 如果uri包含正则表达式,则必须要有~或者 ~* 标识。 负载均衡文件配置: 1、轮询(默认) 2、weight. 3、ip_hash 4、fair (第三方) 使用: 通过location 指定不同的后缀名实现不同的请求转发。通过expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体Expires 定义:是给一个资源设定个过期时间, 也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用Expires 来缓存)。 有备用的nginx服务器,防止主nginx服务器宕机,被称为高可用。需要使用keepalived的虚拟ip绑定主备nginx服务器ip。 修改keepalived.conf配置文件: 脚本文件: 启动服务器和keepalived: nginx中存在一个master进程对应多个worker进程,当master接收到客户端请求时,worker进程会去争抢这个任务,使用的是多路复用技术。 (1)可以使用nginx -s reload热部署,利用nginx进行热部署操作 2.设置worker数量:一般与cpu核数相同。 3.连接数worker connections. 发送请求,占用了woker的几个连接数? 最后,好累啊把自己笔记复制上来,想不到这么多,如果对你有用可以给个免费的赞吗o( ̄▽ ̄)ブ!!!!!vi编辑器:
命令模式:
输入(插入)模式:i,在光标所在处输入;
a,在光标所在处后方插入;
o,在光标所在处下方打开一个新行,光标处在行首。
[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 用户,组和权限管理
用户和组:
使用root帐号,管理员可以突破系统的一切限制,方便地维护系统。
●普通用户:普通用户帐号需要由root用户或其他管理员用户创建,拥有的权限受到一定限
制,一般只在用户自己的家目录中有完全权限。系统安装时创建的用户属于普通用户。
●系统用户:这类用户最大的特点是不能登录系统,而主要是用于让后台进程或服务类进程
以非管理员的身份运行。它们大多是在安装系统及部分应用程序时自动添加的。创建用户
创建组
权限管理
第一组权限是所有者权限,第二组是所有组权限,第三组是其他用户权限,两个root(一个所有者,一个所属组)
设置了ACL的图中的“.”会变成“+”,且被设置了acl的第二组会变成mask权限(设置acl用户权限的最大值)。
例子:增加只读属性:chattr +i /etc/passwd
让这行注释生效
vim /etc/sudoers行末添加
!:指不能执行的命令1.3 磁盘文件系统管理
磁盘分区格式化
分页文件和虚拟内存。
第一项:挂载分区设备 2 挂载点目录 3挂载类型 4选项 5是否备份 6是否检测存储设备(0否1,2检测)磁盘管理
对用户设置磁盘配额:edquota -u -g(针对组配额) [用户名]
圆圈部分代表对容量设置,方框部分对文件数量设置。blocks指的是用户已用容量,inodes指用户已上传文件数量,一般只设置硬限额度,因此,只需设置hard部分。1.4 系统软件包管理
软件安装
/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
/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
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
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 [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
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
1.5 系统进程和服务管理
进程相关概念
●用户进程: 通过执行用户程序、应用程序或内核之外的系统程序而产生的进程。
用户进程主要分为:交互进程和守护进程。
●交互进程:由Shell启动的进程,即在终端通过输入命令启动的进程。交互进程既可以在前台运行,也可以在后台运行。
●守护进程: 一般在后台运行,通常是在Linux系统启动的同时启动,在系统关闭的同时终止。由于守护进程是一直运行着的, 一般所处的状态是等待处理请求任务。
进程相关命令
●%CPU,进程的CPU占用率。
●%MEM,进程的内存占用率。
●VSZ,进程占用的虚拟内存集的大小,单位KB。
●RSS,进程常驻内存集的大小,单位KB (这部分数据不允许被调度到swap分区中)
●TTY, 启动进程的终端。“?” 表示该进程由系统内核启动。
●STAT,进程的状态。“+”表示前台进程;“l” 表示多线程进程;“N”表示低优先级进程:“<” 表示高优先级进程;“s" 表示该进程是会话领导者(sessionleader),如果把这样的进程关闭,那么由该进程所派生出来的子进程也都将关闭。
●TIME, 进程从启动以来占用CPU的总时间。
●COMMAND, 启动该进程的命令名称。如果命名名称带有方括号[],则表示该进程由系统服务管理
格式:systemctl start | stop | status | restart | reload 【服务名.service】
start:启动服务,stop:停止服务,status:查看服务运行状态,restart:重启服务,reload:重新加载服务。
例如:重启某服务:systemctl restart ssh.service
查看系统默认运行级别:systemctl get-default
设置系统默认运行级别: init 【0-6】
按下ctrl+f重启,输入以下命令
配置一次性计划任务:at 【14:00 2021-09-06】(systemctl status atd需要保证atd服务启动)1.6 shell脚本编程
shell变量
**自定义环境变量:**export NAME=“student”条件测试与比较
●-f:测试是否为文件。
●-e:测试目录或文件是否存在。
●-r:测试当前用户是否有读取权限。
●-W: 测试当前用户是否有写入权限。
●-x:测试当前用户是否有执行权限。
●-L:测试是否为符号连接文件。
●-ne:不等于;
●-gt:大于;
●-It:小于;
●-le: 小于等于;
●-ge:大于等于。逻辑测试
●-0 :逻辑或,表示前后两个条件只要有一个成立时整个测试结果即为真。
●! :逻辑非,表示当指定的条件不成立时,整个测试结果为真。
●||:当前面的命令执行失败后才会执行后面的命令。选择语句
if 条件测试命令
then
命令序列1
else
命令序列2
fi
#!/bin/bash
LogFile="/var/log/messages”
if [ -e $LogFile ]
then
wc -l $LogFile
else
echo "$LogFile不存在"
fi
#!/bin/ bash
read -p "请任意输入一个字符,并按回车键: " key
case "$key" in
[a-z] | [A-Z])
echo "这是英文字母"
; ;
[0-9])
echo "这是数字";;
*)
echo "这是功能键或其它字符"
esac
循环语句
for 变量名 in 取值列表
do
命令序列
done
用法: seq [选项]... 尾数
或: seq[ 选项]... 首数 尾数
或: seq [选项]... 首数 增量 尾数
while 条件测试命令
do
命令序列
done
多任务并发执行:shell只支持多进程,将未执行完的任务转到后台执行,先去执行其他命令,比如:在后面加一个&。正则表达式
●位置锚定元字符, 用于指定关键字的位置,比如之前已经介绍过的“^”(指定开头字符)和“$”。sort命令
sed命令
地址定界有以下几种表示方法(#用具体数字代替) :。
(1)如果不指定地址,默认表示全文编辑。。
(2)单地址: #表示第几行,$表示最后一行。
(3) /PATTERN/:表示被此模式所匹配到的行,PATTERN可以是正则表达式。
(4)地址范围: ##表示从第几行到第几行,#,+# 表示从第几行向下几行。。
(5)步进: #~#表示从第几行开始每几行。
(1) d表示删除。
(2) p表示输出模式空间中被匹配到的内容。
(3) a表示在指定行之后追加内容。
(5) c表示将指定的行替换为新的内容。
(6) w表示将指定的内容另存为新的文件。
(7) r表示读取某文件的内容至指定的行之后。
(8) !表示取反。
(9) s///表示查找并替换指定字符串,其中的分隔符///也可以用@@@或###代替,与vim中的
替换命令非常相似。awk命令
1.7 Linux扩展
VMware操作
shell概念
Linux默认使用的shell是Bash。windows和Linux系统:
查看windows密码,可以通过WindowPE删除Windows删除不了的文件:
**物理终端:**一套输入输出设备,比如键盘和显示器统称为终端。
让window10允许让其他网络ping通
**命令提示符:**用户名+主机名+目录+权限(#管理员权限,$用户权限(无法修改ip))Linux目录含义
虑,/boot目录通常被划分为独立的分区。
●/etc: 存放Linux系统和各种程序的配置文件,Linux 中的很多操作和配置都是通过修改配
置文件实现的。/etc 目录的作用类似于Windows系统中的注册表。
●/dev: 存放Linux系统中的硬盘、光驱、鼠标等硬件设备文件。
●/bin: 存放Linux系统中最常用的基本命令,任何用户都有权限执行。
●/sbin:存放Linux系统基本的管理命令,只有管理员权限才可以执行。
●/usr: 软件的默认安装位置,类似于Windows中的Program Files目录。
●/home: 普通用户家目录(也称为主目录)。例如用户帐号“student”对应的家目录位于
“/home/student
●/mnt:一般是空的,用来临时挂载存储设备。
●/media: 用于系统自动挂载可移动存储设备。
●/tmp: 临时目录,用于存放系统或程序运行时产生的一些临时文件,可供所有用户执行写
入操作。
●/var: 存放系统运行过程中经常变化的文件,如/var/log 用于存放日志文件,/var/spoo/mail
用于存放邮件等。
●/proc: 用于存放进程文件。
●/run: 用于存放一些进程产生的临时文件,系统重启后会消失。
●/lost+found: 存放一些 当系统意外崩溃或关机时产生的文件碎片。
●bashre类文件,这类文件不仅在用户登录时会执行,而且每当用户打开新的Shell或者创建子Shell时也会被执行,也就是说bashre类文件会被反复执行多次。
配置文件具体就包括以下四种类别:。
●profile 类的全局配置文件: /etc/profile、 /etc/profile.d/*.sh (目录中所有以“.sh"结尾的文
件)。
●profile 类的局部配置文件: ~/.bash_ profile (“~/” 泛指用户家目录)。。
●bashrc类的全局配置文件: /etc/bashrc. 。元数据
●最近访问时间(access time):查看、读取文件内容的时间。
●最近更改时间(modify time):文件内容改变的时间。
●最近改动时间(change time) :文件元数据改变的时间。1.8 Linux网络通信
基础网络命令
ifconfig命令
ifconfig #查看所有的网络接口信息
ifconfig ens33 #查看指定的网卡信息//第一块网卡的信息,设备名是ens33,网卡配置文件路径是/etc/sysconfig/network-scripts/ifcfg-ens33
root@chaogelinux ~]# ifconfig ens33
ens33: flags=4163
#关闭网卡,注意不得在服务器上执行(注意学习在vmware中操作)
ifconfig 设备名字 up/ down
ifconfig ens33 down #停止网卡
ifconfig ens33 up #启用网卡
#添加一个新ip地址
ifconfig ens33:0 192.168.178.111 netmask 255.255.255.0 up
#第二种添加方式
ifconfig ens33:1 192. 168.178.120/24 up
原本的MAC地址信息: ether 00: 0c:29: a0:87 :d4
修改MAC地址: ifconfig ens33 hw ether 00: 0c:29:13:10:CF
/etc/sysconfig/network-scripts/ifcfg-设备名route命令
参数解析:
Destination:表示网络号,netwo rk的意思
Gateway :表示网关地址,网络是通过该IP出口,如果显示0.0.0.0的ip,表示该路由信息,是从本机转发出去的
Genmask:子网掩码地址的表示,IP地址配合子网掩码,才是一个完整的网络信息
Flags:路由标记,标记当前的网络状态
Up 运行的状态
G 表示这是一个网关路由器
H 表示这个网关是一个主机
! 表示当前这个路由已近禁止
网卡:就是数据包不经过任何的设定由路由表最后经过的地址关口。
网关:网络的关口,就好比家里的门,外出就得通过这个门,才能出去,数据也是一样,只能通过这个网关地址出外网。
ip命令
查看ip路由表信息:ip routenetstat命令
套接字连接情况的参数:
使用:
6.linux还有一个在cengtos7之后出现的网络查看工具
yum install iproute -y #安装ss工具
ss -an #显示所有的socket套接字连接情况ping命令
解决本机无法DNS域名解析问题:
telnet命令
例如:检查远程服务器是否打开数据库端口:telnet 123.206.16.61 3306ssh命令
远程执行服务器(未登录的情况下):ssh [email protected] “free -m” #查看远程服务器的内存占用情况wget命令
用法: 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 不追溯至父目录。
基础网络协议
#过滤文件中排除空行^$和 ^#或者^;的行
[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
#当某个域名无法解析的时候,发给上游服务器查询
[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
}
systemctl start dnsmasq
# 此时我们本地机器,以及是dns的服务端
[root@local-pyyu ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.178.180
[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 [email protected]
3.此时直接输入登录命令,即可免密登录了ssh [email protected]
4.登录服务器,检查客户端的公钥信息
FTP协议
主动模式: FTP服务器主动向客户端发起连接请求
被动模式: FTP服务器在等待,等待客户端发来请求
linux系统下,有一款工具实现ftp协议,名为vsftpd 非常安安全的FTP守护进程服务。#基于centos平台,直接yum安装
yum install vsftpd -y
#注意关闭防火墙规则
iptables -F
#过滤出非注释行,非空行
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的配置达到防火墙作用
●本地用户模式,基于Linux本地账号密码进行认证,配置简单,但是一旦被破解, 服务器信息就很危险
●匿名用户模式,任何人无需密码直接登录
●虚拟用户模式,单独为FTP创建用户数据库,基于口令验证账户信息,只适用于FTP,不会影响其他用
户信息,最为安全。yum install ftp -y
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 子系统退出到外壳。
匿名用户模式
[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服务
#安装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 -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 超哥到此一游
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服务
2.NFS服务器RPC找到对应注册的NFS端口,通知NFS客户端RPC服务
3.此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据
4.NFS客户端把数据存取成功后返回给前端程序,告知用户存取结果,完成一次存取请求。这也就证明,必须先启动RPC服务,再启动NFS服务的步骤。
NFS通过port传输数据,NFS服 务在传输数据的时候,端口是随机选择的(自 己重启NFS服务,查看端口是否在变化)
答案:NFS是通过RPC服务,进行一个端口注册,实现告知用户,NFS的工作端口是哪一个
linux上使用NFS服务,必须启动2个服务
●NFS服务
●RPC服务
RPC服务如何知道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
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服务端挂载成功,配置完毕
1.9 Nginx
概念
反向代理
负载均衡
动静分离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
mkdir /usr/local/nginx
cd /usr/local/nginx
tar -zxvf /root/nginx-1.21.0.tar.gz -C ./
yum -y install pcre-devel
yum -y install openssl openssl-devel
cd nginx-1.21.0
./configure
make && make install
/usr/local/nginx/sbin/nginx
[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 -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配置文件
第一部分:全局块。
从配置文件开始到events块之间的内容,主要会设置一些影响 nginx服务器整体运行的配置指令。
比如worker processes 1; #worker_ processes 值越大,可以支持的并发处理量也越多。
第二部分:events块
events块涉及的指令主要影响Nginx服务器与用户的网络连接
比如worker_ connections 1024; #支持的最大连接数。
第三部分:http块
Nginx服务器配置中最频繁的部分
http块也可以包括http全局块、server块
配置实例
反向代理
(1)打开浏览器,在浏览器地址栏输入地址www.123.com, 跳转到liunx系统tomcat主页面中。
2、具体步骤
*进入tomcat的bin目录中./startup.sh 启动tomcat服务器
firewall-cmd -add-port=8080/tcp --permanent
firewall-cmd -reload
查看已经开放的端口号:firewall-cmd -list-all
(4)在Linux中修改nginx的配置文件如下:
当需要反向代理多个服务器时需要添加:
listen代表监听的端口号,server_name代表反向代理服务器地址,location定位到目标服务器的相关配置信息。location 【=|~|~*|^~】`url{
}
2、~ : 用于表示uri包含正则表达式,并且区分大小写。。
3、~*: 用于表示uri包含正则表达式,并且不区分大小写。
4、^~: 用于不含正则表达式的 uri前,要求Nginx 服务器找到标识uri和请求字符串匹配度最高的location 后,立即使用此location 处理请求,而不再使用location块中的正则uri 和请求字符串做匹配。负载均衡
每个请求按时间顺序逐一-分配到不同的后端服务器, 如果后端服务器down掉,能自动剔除。
weight代表权重默认为1,权重越高被分配的客户端越多。
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器
按后端服务器的响应时间来分配请求,响应时间短的优先分配。upstream myserver{
ip_hash;
server 192.168.17.129:8080 weight=5;
server 192.168.17.129:8081 weight=10;
fair;
}
动静分离
高可用
安装keepalived:yum install keepalived -y
全局配置
global_ defs {
notification email {
[email protected]
[email protected]
[email protected]
}
noti fication email from [email protected]
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
启动nginx:./nginx
启动keepalived:systemctl start keepalived.service
原理
(2)woker都是独立的进程,当其中的一个woker,出现问题,其他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看的是尚硅谷的,入门还不错,但还是更推荐看官方文档。