Linux的核心版本号如下:
3.10.0-123.e17.x86_64
主版本.次版本.释出版本.修改版本
Linux发行版(也被叫做GNU/Linux发行版0是基于Linux内核的操作系统
比较著名的版本有:RedHat Linux,CentOS,Debian Linux,Ubuntu.
VMware介绍及环境搭载
CentOS 7安装教程(图文详解)
1.Linux远程连接:我们安装的linux服务器都是在VMware中运行的,每次需要ctrl+Alt 切换到真机,因此我们通过一定的工具来帮助我们连接服务器,承建的ssh工具有SecureCRT,Xshell,MobaXterm.
2.shell能完成对linux操作系统的绝大部分管理
文件管理
用户管理
权限管理
磁盘管理
软件管理
网络管理
linux控制台
命令提示符:
#:root用户,超级管理员
$:普通用户
服务启动或者状态查看
Centos7:
systemctl {start|stop|status|restart} network(服务名)
3.Linux命令语法结构
commond [-options] paramater…
命令 选项 参数
ls -lih --all /root
1.最左侧的部分,称为命令,或者是一个可以执行的文件
2.[-option] 选项是可有可无的,一般选项需要加- 或者-- ,
-:短选项 一般短选项均可以合并执行
--:长选项
3.参数:
4.linux哲学思想
一切皆文件
/:是一切文件的起始节点
倒置的树状结构
/etc/sysconfig/network-scripts/ ifcfg-eth0 ens33
最左侧的斜线/:表示的是一个目录,根目录
其他斜线/:路径分割符
对于一个文件路径的表示方法:
绝对路径:以根为起始节点表示出来的路径
相对路径:从当前位置开始表示的路径
对于文件的文件名命名规则
家目录:
工作目录:
dirname:
basename:
5.配置本地yum源:
1、检查镜像文件
2、执行 mount /dev/sr0 /media (虚拟机关机之后再次开机需要执行)
mount -t iso9660 /dev/sr0 /media/
3、cd /etc/yum.repos.d/
mkdir bak
mv C* bak
vi yum.repo
[base]
name=Centos6.8
baseurl=file:///media
gpgcheck=0
enabled=1
保存退出
yum clean all
yum makecache
mount /dev/sr0 /media
yum install tree -y
内部命令与外部命令 type
在Linux系统中有存储位置的命令为外部命令;
没有存储位置的为内部命令,可以理解为内部命令嵌入在linux的shell中,所以看不到。
获取帮助的途径help,man命令
1.help命令:大多数命令可以使用–help来获取帮助
2.man命令:以全屏显示在线帮助。
vi是系统自带的命令,vim是vi的升级版,需要yum安装,默认不提供(yum install vim -y)
vi/vim三种模式:
命令模式 输入模式 末行模式
命令模式–>输入模式:输入a,i,o从命令模式切换到输入模式,a代表光标后插入,i代表在光标前插入,o代表在下一行插入。
输入模式–>命令模式:使用ESC退出
命令模式–>末行模式::进入末行模式,正向搜索使用/+关键字,按n(next)往下翻,使用shift+n(N)上翻,反向搜索使用?+关键字,上翻下翻同/搜索的用法一致。
末行模式–>命令模式:使用ESC退出
输入模式–>末行模式:无非就是先退出输入模式,然后再进入末行模式。
vim的快捷用法:
:% s/old/new/g 在全文中搜索old关键字然后全局替换
/old/new/ 在当前行中查找到old关键字然后替换第一个
/old/new/g 在当前行中查找到old关键字并替换这行中出现的所有old关键字
:num1,num2 s/old/new/g 在num1行到num2行中找到所有old关键字然后替换
切到首行:gg
切到尾行:shift+g
复制:yy 如果要多行可以使用num yy(num指代的是当前光标位置起计算的数) 然后使用p命令进行粘贴
删除:dd 删除当前光标所在行 如果要删除多行,可以使用num dd(num指代的是当前光标位置起计算的数)
设置行号,取消行号:set nu ;set nonu
取消高亮显示搜索:nohlsearch 然后保存退出
向下翻屏:ctrl+f
向上翻屏:ctrl+b
1.补全tab
命令和路径补全命令,给定的打头字符串或者起始路径下,使用tab键补全
2.快捷键
3.命令历史 history
history命令:命令用来输出以前执行过的命令
默认是1000行,在.bash_history文件中保存,可通过修改这个文件实现历史命令条数的修改。
-c clear 清除历史命令
-d delete 指定命令的id进行删除
-r read 把文件中的命令读取到历史命令列表中
-w write 把历史命令列表的命令追加到历史文件中
!id 调用历史命令列表中的id对应的命令
!! 调用当前未执行前的命令(即最后一次命令)
!STRING 调用以这个字符串开头的最后一次命令
4.命令别名
alias别命名命令:
通常是用来对我们的命令进行别命名操作,方便以别名使用调用
alias 新命名名称=‘命令’
unalias 新命名名称 取消我们的别命名命令
5.切换目录
cd ChangeDirectory切换目录
cd path
cd ~ 切换到root家目录
cd - 切换到上一次的目录,相当于返回
cd . .代表切换到当前目录
cd … 切换到父目录(上一级目录)
6.输入输出重定向
输入输出重定向:
输出重定向:> 代表覆盖重定向,如果有内容就覆盖,没有则新加;>> 代表追加重定向,每次重定向的时候把新的内容追加到历史内容的后面
输入重定向: < 使用场景相对输出重定向来说比较少,常用于shell脚本中读取文件内容,做循环遍历处理才使用 << 追加输入
三种I/O设备描述符:
标准输入:0
标准输出:1
标准错误:2
1 > file = > file:默认就是标准输出,代表把标准输出重定向到文件中
2 > file :代表把我们的标准错误输出到文件中
&> file:代表把正确输出和错误输出混合输出到文件中
2>&1 :代表把错误输出和标准输出同时输出到一个文件,也可以理解成把错误输出重定向到标准输出中
/dev/null 空设备:
cat /etc/passwd |grep root > /dev/null
将命令的输出重定向到空设备中,经常用于shell脚本中做判读命令是否执行成功,而不需要命令的返回结果$?
/dev/zero 零设备:
用来构造我们的大文件,提供无限个0给我们,通常使用dd命令完成
dd if=/dev/zero of=file bs=1M count=100
7.命令通配符
常见命令行通配符:
[0-9] 数字 = [[:digit:]]
[a-z] 小写字母 = [[:lower:]]
[A-Z] 大写字母 = [[:upper:]]
[a-z0-9] 所有的字母和数字 = [[:alnum:]] alpha+num(字母+数字)
[a-zA-Z] 所有字母 = [[:alpha:]]
[[:space:]] 所有空白字符
[[:punct:]] 所有标点符号
[1] 代表除过所有大写字母外的任意字符
[^0-9] 代表除过所有数字外的任意字符
[2] 代表除过所有字母和数字外的任意字符
8.常见系统管理类命令
1.显示指定工作目录下内容的命令 ls
ls (list)
ls -l 列出详细的属性信息 = ll
ls -a 列出所有文件,包含隐藏文件
ls -h 以人类可读的方式显示文件的大小信息(K,M,G),通常和参数-l结合使用
ls -t 是以时间的新旧排序,默认是最新的排在前面
ls -r 是倒序排序,通常跟-lt结合使用
ls -d 列出目录本身,不包含目录下的内容
2.显示当前工作目录的命令pwd
print working directory 打印当前工作目录,通常用来辨别自己当前所目录名称,方便做后续处理
3.显示或修改系统时间与日期的命令 date
-s set用来设置时间
+"%Y-%m-%d %H:%M:%S" 格式化输出时间,按照自己设置的格式输出
hwclock = hardware clock
hwclock -w :代表把系统时间写入到硬件时间中,使硬件时间跟系统时间保持一致
hwclock -s :代表把硬件时间写入到系统时间,是系统时间跟硬件时间保持一致
4.passwd命令修改用户密码
-k keeptokens保留token,即让用户即将过期后还可以使用这个密码
-l lock 锁住这个用户让其无法修改密码,只能通过root用户去修改密码
-u unlock 取消这个锁
-f force 强制操作
5.切换用户su命令= switch user
su - 跟不加- 的区别:加-使得切换用户后,具有用户的环境变量,不加则没有
su -c command user 切换用户后执行某个命令,注意如果需要执行user用户的相关变量,则用户前还要加-。
6.清除屏幕信息的命令 clear
7.显示目前登录到系统的用户的命令 who,w, last(历史登录信息)
8.显示操作系统相关的系统命令:uname
-a, --all print all information, in the following order,
except omit -p and -i if unknown:
-s, --kernel-name print the kernel name 内核名称
-n, --nodename print the network node hostname 网络节点主机名称
-r, --kernel-release print the kernel release 内核发布版本
-v, --kernel-version print the kernel version 内核版本
-m, --machine print the machine hardware name 机器硬件平台名称
-p, --processor print the processor type or “unknown” 处理器平台
-i, --hardware-platform print the hardware platform or “unknown” 硬件平台
-o, --operating-system print the operating system 操作系统
9.输出系统运行信息的命令uptime
10显示开机信息的命令dmesg
11.free命令用来显示内存的占用及剩余,通常常用参数为-m,还有-h,-k,-gg
12.显示系统进程瞬间的运行动态的命令ps
ps -A 跟 -e(every) 效果一样,都是所有进程
-a 仅显示终端机的进程
-u user 结合用户去使用
-aux 列出当前系统所有用户进程的详细信息
-ef 列出每个进程的详细输出
13.实时监控系统处理器状态的命令top
按照CPU的使用高低排名,shift+p
按照mem的使用高低排名,shift+m
目录及作用:
/etc/ 存放系统配置脚本或者初始化脚本
/bin/ 存放二进制脚本命令
/boot/ 存放操作系统映像文件,主要用户操作系统启动,加载内核
/home/ 用户家目录,所有新创建的用户的家目录都会分配在这个目录下
/lib/ 主要存放二进制执行脚本依赖的库文件
/media/ 一些热插拔介质的挂载点,比如CD-ROMS
/mnt/ 临时挂载点
/opt/ 可选择的目录,一般存放用户的安装包比较多
/proc/ 将进程和内核的信息以文件的形式呈现的虚拟文件系统,常见文件如cpuinfo,meminfo
/root/ root用户的个人家目录
/run/ 运行时的变量数据,通常存放用户的登录信息和进程信息
/sbin/ 存放系统二进制可执行命令,跟/bin/目录作用一样,如fsck,route
/srv/ 存放服务的数据或脚本等
/sys/ 存放硬件设备相关的信息
/tmp/ 临时文件目录,不建议存放重要的数据
/usr/ 用户的目录,存放用户的相关数据,比如用户的二进制执行命令,依赖的库文件等
/var/ 变量文件存放目录,比如日志(/var/log),邮件(/var/mail/)等
/etc目录常见的文件:
/etc/passwd 主要是存放用户名密码相关的信息,这里的密码是用x代替的,真实的密码加密保存在/etc/shadow文件中
/etc/shadow 主要存放用户密码
/etc/inittab 初始化脚本,比如网络,键盘,字体
/etc/profile 系统环境变量文件
/etc/shells 主要记录当前系统支持的几种shell类型
/etc/crontab 记录我们的定时任务的配置文件
/etc/hosts 主机名和IP的映射关系
/etc/issue 登录符提示信息
/etc/sysconfig/network-scripts/ifcfg-ens33|eth0 网卡配置文件
/etc/yum.repos.d/ 主要存放我们的yum源配置文件
/proc 伪文件系统目录,记录操作系统相关的信息
/proc/cpuinfo CPU的详细信息输出
/proc/meminfo 内存的详细信息输出
/var目录 记录变量文件
/var/log 主要记录系统的一些相关日志
/var/spool/mail 记录用户的邮件信息
1.文件目录相关的操作命令:mkdir
-p 代表创建目录的时候连同父目录一起创建
2.rm 删除命令
rm -f force 强制性删除
rm -r recursive 递归的删除
3.cp 复制命令
cp -f 强制性的覆盖
cp -r recursive 递归的复制
cp -p 带父属性的复制
4.touch 创建文件
touch avc{1…10}dd 批量创建
5.diff 命令用来比对文件的不同
6.grep命令 通常用来过滤搜索关键字在文件中或者接受命令的输出作为grep命令的输入
grep -v 反向过滤
grep -n 打印行号
grep -o 仅打印匹配的字符
grep -r 递归搜索
grep -l 列出匹配到的文件
grep -rl keyword path 用来根据关键字在指定目录中搜索我们的文件
grep -E 开启正则表达匹配 *^
grep -A after后几行
grep -A 2 root /etc/passwd
grep -B before前几行
用法同上个列子
grep -C contents前后各几行
grep -C 2 root /etc/passwd
7.ln link链接文件,分为硬链接和软链接
硬链接:A文件和B文件使用同一个inode号,删除文件时,必须要删除所有文件,才能删除整个文件。
软链接:类似于windows的快捷方式,删除源文件链接文件也不可用,删除链接文件,源文件也可以使用。
ln 源文件 链接文件(默认是硬链接)
ln -s 创建软链接文件
ll命令查看到详细信息的第一个参数是l开头的时候,就是一个链接文件
8.file用来查看文件类型
9.在指定目录下查找我们指定类型文件find
find path -name “” -type file|directory -size +|-100M
find / -type f -size +100M -exec rm -fr {} ;
-ok与-exec用法差不多,在执行命令之前给用户一个提示,然后再执行命令
-name 指定名称去搜索,可以结合正则使用*.sh, .
-perm 根据指定的权限去搜索对应的文件
-size 根据指定的大小去过滤搜索文件 大于多少用+ 小于多少用- 等于多少直接写值
-mtime 根据修改时间去过滤 跟size用法差不多
-ctime 根据文件修改权限的时间去过滤 同上
-atime 访问时间过滤 同上
-user
-group
-type file link directory block socket
-nouser
10.split 切割命令,用来切割大文件
磁盘上有很多的这个扇区,每个扇区存储512字节数据,8个连续扇区组成一个block(块),操作系统读取时候不是一个一个扇区去读取,
而是直接读取一个块。
inode存放文件元数据的信息
superblock超级块,记录真个文件系统信息,包含inode与block的使用总量等信息
1.cut命令:文件内容或字符串的切割
cut -d “分隔符” -f"域或列"
2.sort命令: 排序
-r reverse反向排序
-n 以纯数字进行排序
-k 指定以哪个区间(域)进行排序
-u uniq 去重
-t 指定输出的分割符
-o 将结果输出到文件
3.uniq命令: 去重
常用参数-c count计数
uniq命令通常结合sort命令使用,通常是先排完序后进行去重,否则直接去重可能会失败或者不准确。
不进行排序就直接去重,统计的值就不准确。因为uniq去重只能去除连续的相同字符串。不是连续的字符串,则会统计多次。
4.wc命令:wordcount 字符计数命令
通常加-l参数用来计数行数,当然也可以计数字节数(-c character),字符数(-m ),字数(-w word)。
. 代表任意单个字符
[] 代表指定范围内的任意单个字符
[^] 代表指定范围外的任意单个字符
grep -Ev “$|#” file 过滤空行和注释行后的内容
词首词尾锚定符:
<或\b : 词首锚定符,用于单词左侧匹配
>或\b : 词尾锚定符,用于单词右侧匹配
1.which查找可执行的文件
2.whereis查看文件的位置
添加用户: useradd
-u: 指定uid
-g: 指定gid
-G: 指定附加组
-c: 指明注释信息
-d: 指定用户家目录
-s:指定用户默认shell
-r: system 创建系统用户
删除用户:userdel
-r:移除家目录
-f: 强制性删除用户,避免一些其他原因导致删除失败
修改用户:usermod
-u: 指定uid
-g: 指定gid
-G: 指定附加组
-c: 指明注释信息
-d: 指定用户家目录
-s:指定用户默认shell
-r: system 创建系统用户
-a:追加新的附加组,与-G结合使用
-m: 移动家目录到新的目录,与-d一起使用
-l: 修改用户名
-L: 给用户密码加锁,/etc/passwd中的密码列前将多一个!
-U: 解锁用户密码
添加用户组:groupadd
-g: 指定用户组的gid
-r: 创建系统组
删除用户组:groupdel
修改用户组:groupmod
-g: 指定gid
-n: newname修改新的组名
查看用户及用户组id:id + username
系统用户id分配:centos7 1-999 centos6 1-499
普通用户id分配:centos7 1000-60000 centos6 500-60000
passwd命令用法:
-l:锁定用户密码
-u:unlock解锁用户密码
-d:delete清除用户密码串
-e: expire过期日期限定
-i: inactive非活动期限
-n: 最短使用天数
-x: 最长使用天数
-w: warning警告期限
root用户通过此命令可直接给用户nebula指定密码111111。
echo “111111” | passwd --stdin nebula
gpasswd组密码命令:
gpasswd -a username group向组中添加用户
gpasswd -d username group向组中删除用户
newgrp 临时切换指定的组为基本组
chage 更改用户密码过期信息
-d: lastday密码最后修改日期
-E: 密码过期时间
-I: 设置密码过期后多长时间处于不活跃状态
-m: min密码可以修改的最小天数
-M max密码可以修改的最大天数
-W: 密码过期前,收到警告的天数
id查看用户的id,gid
id -u 查看用户的uid
id -g 查看用户组的gid
id -G 查看所属所有组的id
id -n 显示名字而非id,通常跟u/g/G结合使用
/etc/passwd文件存放用户的相关信息,其中密码放在单独文件中存放/etc/shadow中
允许普通用户使用超级权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如reboot,su。sudo
配置文件是/etc/sudoers
给用户添加权限
root ALL=(ALL) ALL
第一个ALL:所有主机
第二个ALL:所有用户
第三个ALL:所有命令
vim /etc/sudoers
UGO
user group others
rwx rwx rwx(读写执行)
421 421 421
每一位权限码总和不会超过7
查看文件权限:ls -l 或者ll
chmod修改文件权限
数值方式修改:
chmod 777 filename
授权方式(字母方式)修改:
chmod u+/-/=rwx filename
chmod a±=rwx filename
chown修改文件属主
chown [owner][:[group]] filename
chown root:root filename
chown root filename
-R 代表递归修改 连同目录下的文件属性也一同修改
chgrp修改文件属组
chgrp groupname filename
权限掩码umask=022
文件默认权限666-022=644
目录默认权限777-022=755
umask修改
umask 023
特殊权限:
setUID
通常是附加给二进制可执行程序,让我们的程序在执行时从执行者变为所有者,即具有当前执行用户的用户权限。
比如passwd命令可以让普通用户设置密码,设置密码时passwd程序的所有者从root变更为执行用户。
chmod u+s binaryfile s的特殊权限会出现在属主的x权限位上,比如rwsr–r--
注意:给目录或者其他文件加这个特殊权限,没有任何意义
setGID
除了给二进制程序添加,也可以给目录添加,同时目录下的文件继承此目录的权限,比如在这个目录下新建的文件的属主属组跟目录的权限保持一致。
通过chmod g+s dir/binary 实现赋权,s出现在用户组权限的x权限位上,比如rwxrwsr–
stickyBit
通常是给others添加这个特殊权限,用来防止误删或者误操作
chmod o+t directory
注意:仅作用于目录,只有root,文件所有者,或者目录所有者才能删除
acl访问控制列表
用来补充UGO模型实现不了的权限
设置acl权限:
setfacl -m u:username:rwx filename/dirname
查看acl权限:
getfacl filename/dirname
删除acl权限:
setfacl -x u:username
删除所有acl权限:
setfacl -b
练习
现要求为各部门、员工建立相应的工作文件夹,要求如下:
1.所有目录、文件保存在统一的一个文件夹下
2.每个部门拥有一个独立的文件夹
3.不同部门之间不可访问各自文件夹
4.每个员工在所在部门文件夹下拥有一个所属文件夹
5.同部门不同员工之间可以查看文件夹内容,但不可修改,用户仅可以修改自己的内容
6.Boss组用户对所有组的文件均有访问权限,但无修改权限
安装vim yum install vim
e94a3b86037783e5e23047.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MjEwOTg4NA==,size_16,color_FFFFFF,t_70)
1.zip命令:文件经它压缩后会另外产生具有:.zip 扩展名的压缩文件
zip 包名 文件名称
-r 递归处理目录及目录下的文件
-m 压缩后删除源文件
-d 删除压缩包中指定的文件 比如 zip -d 包名.zip 文件名(要删除的)
-x: 压缩时指定排除某个文件 用法:zip files.zip * -x 5.txt
unzip解压zip包
unzip 包名
-n 解压缩不覆盖源文件
-d 指定文件解压后存储的目录
-v 查看详细过程或者查看压缩文件目录,并比解压
-o 不询问用户,直接覆盖解压
tar 命令用来打包、解包
tar -czvf 压缩的包名 打包的文件或目录
-c create
-z gz进行压缩
-v verbose显示详细过程
-f 通常和-c结合使用,且-f必须放置参数最后
2.gzip/gunzip
后缀名是.gz格式
gzip * 代表把当前目录下的所有文件压缩成跟文件名一致的.gz包
gzip -dv * 代表把之前压缩过的文件解压并显示详细信息
gzip -l * 代表把压缩文件中的文件列出
gzip -rv dir 实现递归压缩,包括目录下的子目录及文件也会压缩,压缩成同文件名的压缩包
gunzip 包名
gunzip -l 查看压缩包中的压缩列表
gunzip解压缩后 原压缩包不存在
-r 递归解压
-v 详细信息
-f 强制性覆盖输出文件
3.bzip2/bunzip2
默认的压缩格式是.bz2
bzip2 filename
-z 强制性压缩
-d 解压缩,跟-z相反的过程
-v 详细过程
-t 测试解压是否正常,并不会真正进行解压
-k keep保留源文件后进行压缩
-c 将文件内容输出到标准输出(屏幕),源文件(包)仍然保留,通常跟-d结合使用
bunzip2
命令参数跟bzip2参数大致一样,具体查看bunzip2 --help
4.xz/unzx
-z compress强制性压缩
-d uncompress强制性解压缩
-t 测试压缩包的完整性
-l 列出.xz文件的信息
-k 压缩时保留源文件
-f 强制覆盖原来的输出文件
-c 将文件内容输出到标准输出(屏幕),源文件(包)仍然保留,通常跟-d结合使用
5.tar -xvf 包名
tar 命令用来打包、解包
tar -czvf 压缩的包名 打包的文件或目录
-c create
-z gz进行压缩
-v verbose显示详细过程
-f 通常和-c结合使用,且-f必须放置参数最后
-t查看压缩包的文件列表–list
tar -tf 包名
tar -zcvf z代表可以是gzip格式,或者.gz格式
tar -jcvf j代表bz2格式
tar -Jcvf 代表xz格式
不解压包去查看包的文件内容*
zcat zcat支持.gz格式及.zip格式
6.dd命令
dd命令
转化或拷贝文件,适用于大文件的备份或者磁盘、光驱等的备份恢复等
if=inputfile输入文件,默认标准输入
of=outputfile输出文件,默认标准输出
bs=BlockSize块大小,同时指定输入/输出的bytes大小
ibs=InputBlockSize指定输入块的大小
obs=OutputBlockSize指定输出块的大小
count=blocks,仅拷贝block个块,块大小等于ibs指定的字节数
1、yum
本地yum注意需要把本地的光盘挂载到挂载点,使用mount /dev/sr0 /mnt ,然后使用df -h/mount/blkid查看挂载结果
2) yum clean all清除历史缓存
3) yum makecache创建本地缓存
4) yum install packpagename
软件包列表管理
yum list = yum list all 列出当前所有软件包
yum list |grep packagename 过滤需要安装的软件包
yum list installed 代表当前系统已安装的所有软件包
yum list installed | grep packagename 查询软件包是否在当前系统中已经安装的包列表中
yum list available 列出当前系统仓库可用的包
yum list updates 显示已经更新的包
yum list recent 显示最近新增的包
安装软件包
yum install 包名 -y 不询问安装
yum update 包名 升级包
卸载软件包
yum remove 包名
搜索包名
yum search
显示软件包的信息
yum info 包名
列出软件包提供哪些文件
yum provides 包名
3、源码安装
1) ./configure --prefix=/usr/… 指定安装路径 --enable-ssl --disable-filter 启动或者禁用某些功能 --with-pcre 和其他软件进行关联
同时检查安装环境是否满足编译安装,比如是否有编译器gcc,是否满足软件依赖性
2) make 编译
3) make install
make && make install
可以使用make clean 清除以前编译结果文件
make distclean类似make clean,但同时也将configure生成的文件全部删除掉,包括Makefile
2.rpm包安装方式
rpm -ivh *.rpm (常用)(代表安装所有以.rpm结尾的包,如果你安装指定的包,直接接包名就可以了)
-i install 安装
-v verbose详细过程
-h hash marks输出进度条
–nodeps = no depends无依赖,不检测依赖安装
–replacepkgs 重新安装
rpm -Uvh
-U upgrade升级
rpm -e 卸载包(常用) --nodeps不检测依赖性卸载
rpm -qa |grep 包名 查询当前系统已安装的包(常用)
-q query 查询
-a all所有包
rpm -qi 包名 查询软件包的相关信息(用的频率较少)
rpm -ql 包名 列出软件包安装信息(常用)
rpm -qf 包名 查询系统文件属于哪个软件包
rpm -qR 包名 查询软件包的依赖性(较少)
rpm -V 包名 校验软件包
扩展分区可以被继续划分为多个逻辑分区,逻辑分区是可以进行格式化的。
总结一下,就是不论磁盘有几个主分区,第一个逻辑分区一定是从sda5开始。
1.fdisk命令
fdisk /dev/sda
m查看帮助菜单
p查看当前磁盘的分区信息
n创建新的分区
会让你选择
p primary主分区
e extended扩展分区
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
Partition number (1-4, default 1):
size让你输入你的分区大小或者磁柱号:+100M/+1G
再输入w保存
需要让内核加载你的分区表
partprobe - inform the OS of partition table changes
partprobe
partx - tell the Linux kernel about the presence and numbering of on-disk partitions
partx -a /dev/sda
对指定分区进行格式化
mkfs.ext4 /dev/sda1 = mkfs -t ext4 /dev/sda1
mkfs.xfs /dev/sdb1
分区完对我们的分区进行挂载
mount 分区 挂载点(空目录)
mount /dev/sda1 /mnt
查看系统的的分区详细信息
VM虚拟机添加磁盘不重启系统,识别磁盘将其添加到分区
#grep mpt /sys/class/scsi_host/host?/proc_name
#echo “- - -” > /sys/class/scsi_host/host0/scan执行之后方可看到新添加磁盘或者重启
(1) 在进行分区时,首先我们需要查看当前磁盘的一个分区状况,使用命令:fdisk -l
(2)然后使用命令:fdisk /dev/sda(b) 让硬盘进入分区模式
3)开始创建分区,因此我们输入n,然后回车如下图。
我们看到黄颜色线条上显示的是3个主要分区,0个扩展分区,还有1个闲置分区。绿色光标前的default e表示的是默认为扩展分区。我们除了直接回车进入下一步,也可以输入e进入下一步。
①此时光标所在的位置表示选择输入起始位置,也就是起始扇区。当然,我们不用输入,直接回车就好进入下一步。它就是为了能够将后面的所有可用扇区充分的利用上,而默认选择可用扇区的起始最小扇区。
②此时光标所在的位置表示选择输入终了位置,也就是结束扇区。当然,我们不用输入,直接回车就可以把上面剩余的全部空间充分的利用上。
③到这里我们创建的扩展分区已经创建好了,我们在命令行界面输入p查看一下分区情况:
④有了扩展分区,那么我们才可以创建逻辑分区。
我们在命令行输入n添加一个新分区,此时添加的分区就是逻辑分区。
这时它询问设置逻辑分区的起始扇区,为了充分利用,我们选择默认值,然后回车
到这里它在询问扇区结束位置,说白了就是我们在设置逻辑分区大小。输入格式为:+扇区 或者 +数值大小{单位}
然后我们输入:+1G 表示设置大小为的1G的逻辑空间。回车之后就完成了新的分区的设置。紧接着我们输入p打印分区表查看分区信息。
⑤此时不要着急,我们一定要记住要保存,在命令行输入w保存分区信息。我们通过w保存并退出后,使用fdisk -l 可以查看到磁盘的分区信息。
⑥但是当你在格式化的时候,有可能找不到这个分区。这是因为Linux没有把分区信息读到内核来,我们需要输入partprobe这个命令,来使我们内核重读一下我们的分区信息。
到这里我们已经成功地创建了一个1G大小的分区,但是我们能用吗?不能,因为我们要对磁盘进行格式化后才可以进行数据的存储。
** 磁盘的格式化**
格式化:指将分区格式化成不同的文件系统。
Linux系统下的文件类型:
Linux下的文件类型有ext2、ext3、ext4、xfs等等,我们可以使用命令:mkfs. 然后用按TAB来查看有哪些文件类型
我们现在要对刚才创建的逻辑分区5进行格式化
1)在命令行输入mkfs.ext3 /dev/sda5 意思就是格式化根下的sda5分区,格式化类型为.ext3
2)格式化完毕后我们使用命令:ll来查看我们格式化完毕后的分区的文件类型信息。
磁盘的挂载
1)挂载点目录:我们将磁盘切到根目录, media 和 mnt 这两个目录被叫做挂载点目录。除此之外,我们也可以自己创建一个目录作为一个挂载点目录,
2)怎样查看到当前系统上所有磁盘的挂载信息?
使用命令df -h这更易于我们对磁盘的信息的了解。包括文件的大小,已经使用的分区大小,总共可用分区的大小,使用率,以及挂载的位置。(推荐)
(3)命令:blkid:查看对应分区的UUID(编号)。UUID唯一标识每一个分区,防止错误的挂载。除此之外,还会显示分区的类型。(建议先复制一下sda5的UUID,一会儿会用到)
(5)永久挂载:使用永久挂载,就意味着它开机会自动挂载。
①使用vim编辑 /etc/fstab 在命令行直接输入vim /etc/fstab 就可以编辑,实现开机自动挂载。
②在将光标移到UUID行,在命令模式下按o键进入插入模式,同时换行。将(3)步骤中复制好的sda5的UUID编号,粘贴进来。/test挂载点目录,ext3文件系统类型,第一个0表示不备份,第二个0表示不检查。注意格式一定要正确,可以不用对齐,最好的判断依据是依照颜色。写完之后保存退出。
du和df命令
RAID磁盘阵列技术
独立磁盘具有冗余能力的阵列
RAID0
至少需要两块磁盘
特点:
数据分布存储在两个或多个磁盘中,读写速度翻倍提升,但是没有数据冗余能力,一旦其中某个磁盘发生故障,无法恢复其中的数据。
磁盘利用率是100%,即所有磁盘都用来读写数据。
RAID1
至少需要两块磁盘
特点:
数据1比1存放在两个或多个磁盘中,当其中某个磁盘发生故障的时候,可以根据其他的盘的数据快速恢复新盘的数据,也就是具有数据冗余能力,保证了
数据的安全性。写入数据的速度没有什么提高,读取速度相对来说提升了,磁盘利用率只有50%,相当于一块磁盘浪费了。
RAID5
至少需要三块磁盘
特点:
是RAID0和RAID1的折中方案,具有奇偶校验信息码,通常数据被拆分存放在三个或多个磁盘中,同时数据组成的奇偶校验码交叉存放在不同的磁盘中,
当某一个磁盘发生故障,数据丢失,我们可以根据其他盘存放的奇偶校验码反推数据来恢复新盘的数据。同时只能允许丢失一块磁盘的数据,如果丢失
两个或多个磁盘数据,则因为丢失的数据过多,奇偶校验码也随之丢失过多,无法再恢复老的数据。
RAID01
至少需要4块磁盘
特点:
先做RAID0组合,然后再做RAID1。同时具有读写速度提升的特性和数据冗余能力。
磁盘利用率是50%。
RAID10
至少需要4块磁盘
特点:
先做RAID1镜像复制组合,然后再做RAID0条带组合。同时具有读写速度提升的特性和数据冗余能力。
磁盘利用率也是50%。
企业更关注数据安全性,所以一般都要考虑数据安全性,至少都要使用RAID1,具体使用哪种技术不是绝对的,根据业务需求自行定制。RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,简称为「磁盘阵列」,其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从而实现比单块磁盘更好的存储性能和更高的可靠性。
LVM逻辑卷
LVM的创建
0、准备工作:先准备好分区
1、创建物理卷(PV)
刚创建的分区是用来储存物理卷的。LVM可以使用不同大小的物理卷。
vcreate /dev/sdb1 创建/dev/sdb1的物理卷
pvs 查看pv信息
pvdisplay 查看详细的pv信息
pvremove 删除物理卷(注意:假如已经在pv上创建了相应资源,则不能直接使用此命令删除,而应该先删除对应的资源后再删除物理卷)
2、创建卷组(VG)
创建卷组:vgcreate volume-group1 /dev/sdb1 /dev/sdb2 /dev/sdb3
vgcreate + 卷组名称 物理卷(1个或多个,多个使用空格隔开)
vgremove+ 卷组名称
注意:删除时注意,如果已经有上层资源,必须先把上层资源清除后再删除卷组,否则会提示报错。
vgextend向卷组中添加物理卷(添加某个成员)
vgreduce向卷组中减少物理卷(删除某个成员)
vgrename修改卷组名称 vgrename oldvgname newvgname
vgchange改变卷组的工作状态 vgchange -a y|n vgname y代表状态可用,n代表状态不可用
3、创建逻辑卷(LV)
lvcreate命令参数:
-n name指定创建的lv的名称
-L large指定空间的容量,即+100M
-l 使用PE的个数进行指定,比如10000
-s snapshot指定创建的逻辑卷为快照
-p r设置只读属性
lvcreate -L 100M -n lvname vgname (创建逻辑卷)
lvextend -L +100M /dev/vgname/lvname(扩容)
lvreduce -L 10M /dev/vgname/lvname(缩容)
lvresize 用法同上两个命令,支持扩容和缩容
lvrename 对我们的lv进行重命名
lvconvert --merge /dev/vgname/lvname 恢复快照,快照在恢复后删除
lvremove 删除逻辑卷
创建一个名为’1v1’、大小为100MB的逻辑卷。我们使用小分区减少执行时间。这个逻辑卷使用之前创建的卷组的空间。
lvcreate -L 100M -n lv1 volume-group1
4、格式化和挂载逻辑卷
1.mkfs.ext4 /dev/volume-group1/lv1
2.mkdir /lvm-mount
3.mount /dev/volume-group1/lv1 /lvm-mount/
扩展一个LVM卷
扩展先前创建的逻辑卷‘lv1’扩大到200MB
lvextend -L 200M /dev/volume-group1/lv1
运行以下命令扩展文件系统以后,ext4信息就更新了。
resize2fs /dev/volume-group1/lv1
检查LV的状态来验证lvdisplay
扩展一个卷组
假设我们的卷组’volume-group1’已经满了,需要扩大。手上的硬盘(sdb)已经没有其他空闲分区,我们添加了另外一个硬盘(sdc)。我们将看到如何把sdc的分区添加到卷组以扩展。
检测现在卷组状态vgdisplay volume-group1
首先,我们创建一个2GB分区sdc1,
类型(t命令)为LVM(8e)fdisk /dev/sdc
1.创建一个物理卷 /dev/sdc1 pvcreate /dev/sdc1
2.增加到已存在的卷组’volume-group1’ vgextend volume-group1 /dev/sdc1
3.使用vgdisplay来验证(可以看到卷组大小已经增大)
*:未来的某时间点执行一次某任务或者周期性的运行某个任务,执行结果会通过邮件的形式发送给用户
(1) * * * * * 分时日月周
(2)user-name:运行任务的用户身份
command to be executed :任务
安装crontab : yum install crontabs
crontab命令
#实例
#实例1:每小时的第3和第15分钟执行reboot
3,5 * * * * /usr/bin/reboot(绝对路径)
#实例2:每天上午10点到12点,执行find命令查找大于10M的文件,然后输出到一个文件中
*10-12 * * * find -type f -size +100M > 123.txt
1.4.1 程序与进程
程序是一组指令及参数的集合,按照既定的逻辑控制计算机运行用来完成特定任务
进程是运行着的程序,是操作系统执行的基本单位,是程序运行的过程,动态,有生命周期及运行状态
![在这里插入图片描述](https://img-blog.csdnimg.cn/9470e3f53d0d48ac9fa7410f164fcc59.png
1.4.2 进程管理工具
Linux进程管理工具pstree,ps,pgrep,pkill,uptime,top,htop,vmstat,lsof
1.pstree首先要yum安装yum install psmisc.x86_64
2.ps命令
ps -aux 输出完整信息
3.pgrep:经常要查看进程的信息,包括进程是否已经消亡,通过pgrep来获得正在被调度的进程的相关信息。pgrep 通过匹配其程序名,找到匹配的进程
4.killall,kill,pkill
vmstat命令
vmstat 命令是最常见的Linux监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的cpu使用率,内存使用,虚拟内存交换情况,io读写情况。
lsof命令
:是一个列出当前系统打开文件的工具。
语法格式
进程三种状态:
1、就绪态ready 程序已经分配好资源了,等待其他进程释放资源后待系统调用
2、运行态running 进程被系统调用,分配到了CPU和内存资源
3、等待状态waitting 进程因等待某个事件发生而暂时不能运行的状态
ready – > running (系统调用fork)
running --> ready (时间片用完,等待下一次调用)
running --> waitting (等待某个事件发生)
waitting --> ready (事件发生后)
/proc和/sys目录
/proc目录主要输出进程信息,内存资源,磁盘分区等信息
/sys目录主要是硬件设备的驱动信息
1.网络层次划分
为了使不同计算机厂家生产的计算机能够相互通信,以便在更大的范围内建立计算机网络,国际标准化组织(ISO)在1978年提出了"开放系统互联参考模型",即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,其中第四层完成数据传送服务,上面三层面向用户。除了标准的OSI七层模型以外,常见的网络层次划分还有TCP/IP四层协议以及TCP/IP五层协议,它们之间的对应关系如下图所示:
2.OSI七层网络模型
TCP/IP协议毫无疑问是互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开TCP/IP协议。
netstat命令
netstat命令:用于显示各种网络相关信息,如网络连接,接口状态,无效链接,组播成员等等。
前几个参数一般连着使用
ss命令:配置网络或显示当前网络接口状态的命令
ss命令与netstat命令用法相似
traceroute、mtr命令:获取当前主机到目标主机所经过的路由(网关)
talnet命令:与远程的主机通信或获取远程主机对应端口的信息命令,还可以确定远程服务器的某个端口是否能访问
wget命令:从网上自动下载文件的自由工具
scp命令:基于SSH的不同linux系统之间相互拷贝文件或者目录的工具
scp 目录本地文件 目标用户@ip地址:路径 (本地>远程)
iproute家族:网络管理工具包合集
ip address add 添加一个新的协议地址,也就是给网卡配ip
delete删除一个协议地址
ip route add --添加新路由
ip route change --修改路由
ip route replace --替换已有的路由
修改IP地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改主机名 hostnamectl set-hostname +新主机名
防火墙”是指一种将内部网和公众访问网(如Internet)分开的方法,它实际上是一种建立在现代通信网络技术和信息安全技术基础上的应用性安全技术,隔离技术。
iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的”安全框架”中,这个”安全框架”才是真正的防火墙,这个框架的名字叫netfilter
netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。
iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。
iptables -X(清除所有自定义规则链)
iptables -F(清除所有规则)
iptables -L(列出所有[加n 以数字形式显示IP])
iptables -I (插入规则) 规则链名 优先级
iptables -A (增加规则,默认是) 规则链名
iptables -D (删除规则) 规则链名 序号
iptables -R (修改、替换)(replace)指定链中的某一条规则,可以按规则序号和内容替换
iptables -N (自定义规则链名)
iptables -P (默认) 规则链名 DROP(拒绝)或者ACCEPT(允许)
iptables -p (协议)
–sport(源端口)
–dport(目的端口)
Ping命令的允许
iptables -A INPUT -i ens33 -p icmp -j ACCEPT ens33网卡入站时的icmp包允许通过
iptables -A OUTPUT -o ens33 -p icmp -j ACCEPT ens33网卡出站时的icmp包允许通过
禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机
iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP
iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT
1.echo 1 > /proc/sys/net/ipv4/ip_forward /启动路由功能,允许转发
2. 1.允许80端口httpd服务转发:
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT //允许tcp目的端口80转发
2.允许ping转发:
iptables -A FORWARD -p icmp -j ACCEPT //允许icmp包转发
3.目的地址映射:
iptables –t nat –A PREROUTING -d 192.168.42.209 -j DNAT --to 192.168.42.207
//路由前,目的IP:192.168.42.207 转换成IP:192.168.42.209)
3.首先关闭防火墙sysemctl stop firewalld
关闭selinux getenforce 0 临时关闭
vim /etc/sysconfig/selinux
ip端口转发
1、把本机的80端口的数据包转发到另一台服务器的8080端口iptables -t nat -A PREROUTRING -p tcp --dport 80 -j DNAT --to 192.168.42.207:8080
2、把本机发到另一台服务器的8080的数据包源地址改为本机地址
iptables -t nat -A POSTROUTRING -p tcp -d 192.168.42.207 --dport 8080 -j SNAT --to 192.168.42.205
或iptables -t nat -A POSTROUTRING -p tcp -d 192.168.42.207 --dport 8080 -j MASQUERADE
注意:需要关闭firewalld和selinux,并且开启内核转发功能
与直接控制 iptables 相比,使用 FirewallD 有两个主要区别:
Firewalld 使用区域和服务而不是链式规则。
它动态管理规则集,允许更新规则而不破坏现有会话和连接。
Firewalld底层使用的就是iptables
1.检查防火墙状态。输出应该是 running或者 not running
2.重新加载 FirewallD 配置
我们可以通过三种方式配置防火墙
①vim /etc/firewalld/firewalld.conf 配置文件方式 #不推荐直接修改配置文件
②firewall-config图形化界面 方式 #很多服务器图形化界面不支持
③firewalld-cmd命令行方式 #推荐,且常用
firewall-cmd --list-all # 查看默认区域设置
查看系统默认活动区域名称、来源地址和关联的网卡
firewall-cmd --get-active-zones
grep 是一种强大的文本搜索工具,,它能使用正则表达式搜索文本,并把匹配的行打印出来
sed 是一种流编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”
-n:不输出模式空间内容到屏幕,即不自动打印,只打印匹配到的行
-e:多点编辑,对每行处理时,可以有多个Script
-f:把Script写到文件当中,在执行sed时-f 指定文件路径,如果是多个Script,换行写
-r:支持扩展的正则表达式
-i:直接将处理的结果写入文件
地址界定
#指定行
~:步进
sed -n ‘1~2p’ 只打印奇数行 (1~2 从第1行,一次加2行)
sed -n ‘2~2p’ 只打印偶数行
编辑命令
d:删除模式空间匹配的行,并立即启用下一轮循环
p:打印当前模式空间内容,追加到默认输出之后
a:在指定行后面追加文本,支持使用\n实现多行追加
i:在行前面插入文本,支持使用\n实现多行追加
c:替换行为单行或多行文本,支持使用\n实现多行追加
w:保存模式匹配的行至指定文件
r:读取指定文件的文本至模式空间中匹配到的行后
=:为模式空间中的行打印行号
!:模式空间中匹配行取反处理
s///:查找替换,支持使用其它分隔符,如:s@@@,s###;
加g表示行内全局替换;
例子:
将命令和执行结果输出到题目下,把/etc/passwd复制到/root/test.txt,cp /etc/passwd /root/test.txt
1、用sed打印所有行
sed -n ''p test.txt sed -n '1,$'p test.txt
2、打印test.txt的3到10行
sed -n '3,10'p test.txt
3、打印test.txt 中包含 ‘root’ 的行
sed -n '/root/'p test.txt
4、删除test.txt 的15行以及以后所有行
sed '15,$'d test.txt
5、替换test.txt 中 ‘root’ 为 ‘toor’
sed 's/root/toor/g' test.txt
6、把test.txt 中第一个数字移动到行末尾
sed 's#\([^0-9]*\)\([0-9]*\)\([^0-9].*$\)#\1\3\2#' test.txt
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。
语法格式
-F fs:fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:。(默认以空格做分隔符)
(1)格式
FS :输入字段分隔符,默认为空白字符
OFS :输出字段分隔符,默认为空白字符
RS :输入记录分隔符,指定输入时的换行符,原换行符仍有效
ORS :输出记录分隔符,输出时用指定符号代替换行符
NF :字段数量,共有多少字段, N F 引 用 最 后 一 列 , NF引用最后一列, NF引用最后一列,(NF-1)引用倒数第2列
NR :行号,后可跟多个文件,第二个文件行号继续从第一个文件最后行号开始
FNR :各文件分别计数, 行号,后跟一个文件和NR一样,跟多个文件,第二个文件行号从1开始
FILENAME :当前文件名
ARGC :命令行参数的个数
ARGV :数组,保存的是命令行所给定的各参数,查看参数
(2)演示
1、$0: awk变量$0保存当前记录的内容
awk -F: '{print $0}' test.txt
awk -F: '{print $(NF-1)}'
shell:Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等。 用户每输入一条命令,Shell就执行一条。这种从键盘输入命令,就可以立即得到回应的对话方式,称为交互的方式。
shell脚本:
查看系统默认的shell: echo $SHELL
查看系统支持的shell: cat /etc/shells
创建第一个shell脚本
1.首行
#!/bin/bash
2.注释
3.内容
一般情况下,默认创建的脚本是没有执行权限的,需要赋予执行权限
shell脚本的执行
1.入脚本的绝对路径或相对路径
/root/myfirst.sh
./myfirst.sh
2.bash或 sh+脚本(脚本没有x权限时,可以通过此方式正常执行)
bash myfirst.sh
sh myfirst.sh
3.source script-name 或 . script-name 这种方法通常是使用source或 “.”(点号)读入或加载指定的Shell脚本文件,然后依次执行指定的Shell脚本中的语句。
shell变量
1.用户的环境变量配置
变量名称可以由字母,数字和下划线组成,但是不能以数字开头,环境变量名建议大写,便于区分。
在用户家目录下.bashrc文件优先设置有效。
2.全局的环境变量配置
/etc/profile
/etc/bashrc
/etc/profile.d
第一种方法直接输入字符串即可,第二种方法需要加上echo
shell变量作用域
有的变量只能在函数内部使用,这叫做局部变量(local variable);
有的变量可以在当前 Shell 进程中使用,这叫做全局变量(global variable);(在 Shell 中定义的变量,默认就是全局变量
而有的变量还可以在子进程中使用,这叫做环境变量(environment variable)
read命令
-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
-p 后面跟提示信息,即在输入前打印提示信息。
-e 在输入的时候可以使用命令补全功能。
-n 后跟一个数字,定义输入文本的长度,很实用。
-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
-t 后面跟秒数,定义输入字符的等待时间。
-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。
取消变量/删除变量
unset NAME
变量数组
数组是能够保存多个值的变量,数组中的值既可以分别引用,也可以作为整体引用
**·**定义数组:array_num=(1 2 3 4)(小括号做边界、使用空格分离)
索引的值从0开始,显示整个变量的值,可以用或@通配取得元素个数:echo ${#array_name[]}
位置变量
$ n: n为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 9 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第9个参数,十以上的参数需要用大括号包含,如 9代表第一到第9个参数,十以上的参数需要用大括号包含,如{10}。
$ *: 代表命令行中所有的参数,把所有的参数看成一个整体。以"$1 $2 … $n"的形式输出所有参数
$@: 代表命令行中的所有参数,把每个参数区分对待。以"$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数
$ #: 代表命令行中所有参数的个数。添加到shell的参数个数
shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,$# 的值减1
$? :打印出命令执行后返回的状态,0表示没有错误,其他表示有错误
$ $ :打印出当前进程的进程号
$0 : 打印出当前进程的
1.双小括号"(())"数值运算
双小括号"(())的作用是进行数值运算与数值比较
2.let运算命令算法
let运算符可以用来计算整数,和小双括号类似
3.expr 命令用法
expr是一个强大的计算命令,运算符之间要有空格
4.bc命令的用法
bc是linux系统中的计算器
5.$[]运算
逻辑操作符
注意:变量要用空格,不然判断会出现不是预期的效果
case条件语句相当于多分支的if/elif/ellse条件语句
break 、continue在条件语句及循环语句(for、while、if等)中用于控制程序走向;而exit则用于终止所有语句并退出当前脚本。
function是 Shell 中的关键字,专门用来定义函数;
name是函数名;
statements是函数要执行的代码,也就是一组语句;
return value表示函数的返回值,其中 return 是 Shell 关键字,
专门用在函数中返回一个值;这一部分可以写也可以不写。
由{ }包围的部分称为函数体,调用一个函数,实际上就是执行函数体中的代码。
例:1.使用 $@ 来遍历函数参数。定义一个函数,计算所有参数的和:getsum 10 20 30
shell脚本练习10题
Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能。
Rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具。
rsync 软件功能介绍
类似于 cp 命令 – 实现本地备份传输数据
类似于scp 命令 – 远程备份传输数据
类似于 rm 命令 – 实现无差异同步备份
类似于 ls 命令 – 本地文件信息查看
Rsync安装:
yum install -y rsync
rsync命令常用参数选项说明
-v,–verbose 详细模式输出,传输时的进度等信息
-z,–compress 传输时进行压缩以提高传输效率,–compress-level=NUM可按级别压缩。
-a,–archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl(字母l)
1.rsync==cp
2、rsync == scp
#从本地/etc/hosts拷贝到远端服务器/opt上
rsync /etc/hosts 192.168.74.150:/opt/
3、rsync == rm
创建出来一次命令 进行操作
#rm命令操作
创建一个空目录,使用空目录进行无差异同步,将/null的所有文件同步到/znix内,并删除/znix内多余的文件
4、 rsync == ls -l
5、以守护进程方式同步数据
配置rsync服务端(将服务端配置到 backup 服务器上)
搭建步骤:
第一步: 软件是否存在
第二步: 进行软件服务配置
第三步:创建rsync用户
第四步: 创建数据备份储存目录,目录修改属主
第五步: 创建认证用户密码文件
第六步: 启动rsync服务
rsync --daemon
配置rsync客户端(其他服务器为客户端)
第一步: 软件是否存在
第二步: 创建认证文件
客户端的认证文件只需要有密码即可
第三步: 实现数据传输(将client端的指定目录内容推送到server端)
搭建ntp服务器
服务端和客户端都分别按照ntp服务:
yum install –y ntp
查看是否安装成功:
rpm -qa |grep ntp
配置文件为:/etc/ntp.conf
配置好后,需要重启服务
使用如下命令检查是否同步成功,如出现running表示运行,否则失败
客户端配置
vim /etc/ntp.conf
这里的server指向服务器的IP,改完后重启服务
在服务器端执行ntpstat命令,状态由unsynchronised变为synchronised代表同步上游服务器成功
然后执行ntpq –pn命令查看服务器同步详细情况
以星号 (*)开头这就意味着您的计算机已经从网络上获取了时间,当前的refid是local代表我们配置的本地ntp服务器
客户端测试
使用ntpdate 服务器ip进行同步,发现报ntp socket被占用,需要停掉ntp服务然后同步
我们可在服务端和客户端同时执行date命令查看时间是否同步
时区不一致导致时间不同步解决办法
使用如下命令查看当前时区是否是CST中国标准时区,并且是Asia/Shanghai
timedatectl list-timezones |grep Shanghai #查找中国时区的完整名称
如果不是使用如下命令设置时区为上海可重新查看时间是否正确
timedatectl set-timezone Asia/Shanghai #其他时区以此类推
ssh服务认证类型
1.基于口令认证
基于口令的安全验证的方式就是大家现在一直在用的,只要知道服务器的SSH连接帐号和口令(当然也要知道对应服务器的 IP及开放的 SSH端口,默认为22 ),就可以通过 ssh客户端登录到这台远程主机。此时,联机过程中所有传输的数据都是加密的。
2.基于密钥认证
首先在客户端生成一对密钥
查看密钥文件和内容
SSH服务的配置文件为/etc/ssh/sshd_config
修改默认端口
禁止root登录
FTP是File Transfer Protocol(文件传输协议)的英文缩写,用于Internet上的控制文件的双向传输。同
时,它也是一个应用程序。基于不同的操作系统有不同的引用程序,而所有的这些引用程序都遵循同一
种协议以传输文件。
CentOS 7安装配置vsftp并搭建FTP
1.查看自己的服务器是否安装了vsftp
如果没有安装vsftp现在安装
yum -y install vsftpd
2.关闭CentOS7的防火墙
systemctl stop firewalld.service
停止firewall
3.启动vsftp服务
systemctl restart vsftpd.service # 重启服务
systemctl start vsftpd.service # 启动服务
systemctl status vsftpd.service # 服务状态查看
4.vsftp的配置文件路径:/etc/vsftpd/vsftpd.conf
vsftp配置文件一般选项(如何没有这个选项则到文件末尾添加)
5.设置文件权限
vsftp默认文件上传路径 /var/ftp/pub
其中 pub文件要更改权限
chmod 777 pub
到这里vsftp已经安装好了并进行了基本配置(在这里使用的是匿名登录)
systemctl enable vsftpd 添加到开机启动
NFS是Network File System的缩写,中文意思是网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。
NFS的RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据目的
NFS实例搭建
我们需要两台CentOS7机器,我们用虚拟机做测试,分别做NFS服务器和客户端,配置如下
NFS-Server ip:192.168.74.××1
NFS-Client ip:192.168.74.×××
实现的目标是:在NFS服务器上共享一个目录,在客户端上可以直接操作NFS服务器上的这个共享目录下的文件。
NFS服务器配置
1.安装NFS服务和rpcbind
yum -y install rpcbind nfs-utils
2.创建共享目录
在服务器上创建共享目录,并设置权限。
mkdir –p /data/share/
chmod 755 -R /data/share/
3.配置NFS
nfs的配置文件是 /etc/exports ,在配置文件中加入一行:
/data/share/ 192.168.74.×××(rw,no_root_squash,no_all_squash,sync)
这行的意思是把共享目录/data/share/共享给192.168.42.102这个客户端ip,后面括号里的内容是权限参数,其中:rw 表示设置目录可读写。 sync表示数据会同步写入到内存和硬盘中,相反 rsync 表示数据会先暂存于内存中,而非直接写入到硬盘中。
no_root_squash NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。
no_all_squash 不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都不会拥有匿名用户权限。
如果有多个共享目录配置,则使用多行,一行一个配置。
4.启动服务
按顺序启动rpcbind和nfs服务:
systemctl start rpcbind
systemctl start nfs
nfs服务启动后,可以使用命令 rpcinfo -p 查看端口是否生效。
111端口为rpcbind服务对外提供服务的主端
我们可以使用 showmount 命令来查看服务端(本机)是否可连接:
出现上面结果表明NFS服务端配置正常
客户端配置
1.安装rpcbind服务
yum -y install nfs-utils rpcbind
客户端只需要启动rpcbind服务即可:
systemctl start rpcbind
2.挂载远程nfs文件系统
查看服务端已共享的目录:
建立挂载目录,执行挂载命令
mkdir /mnt/share
mount -t nfs 192.168.42.101:/data/share /mnt/share/ -o nolock,nfsvers=3,vers=3
如果不加 -onolock,nfsvers=3 则在挂载目录下的文件属主和组都是nobody,如果指定nfsvers=3则显示root。
如果要解除挂载,可执行命令
umount /mnt/share
3.开机自动挂载
保存并重启机器看看。
看到最后一行了没,说明已经挂载成功了。
测试结果
在客户端的/mnt/share目录中创建一个a.txt文件,可以在服务端查/data/share看到此文件
rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。rsyslog守护进程可以被配置成两种环境,一种是配置成日志收集服务器,rsyslog进程可以从网络中收集其它主机上的日志数据,这些主机会将日志配置为发送到另外的远程服务器。rsyslog的另外一个用法,就是可以配置为客户端,用来过滤和发送内部日志消息到本地文件夹(如/var/log)或一台可以路由到的远程rsyslog服务器上
常见的系统日志
rsyslog配置
1、程序包:rsyslog
配置文件:/etc/rsyslog.conf
主程序:/usr/sbin/rsyslogd
模块路径:/usr/lib64/rsyslog/
Unit File:/usr/lib/systemd/system/rsyslog.service
2、rsyslog中的术语:
facility:设施、信道;
auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security, user, uucp, syslog, local0-local7
priority:记录日志的等级,如果等级是info,代表包含了info以及以上的所有等级事件日志都记录
debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)
实例:
服务端配置
# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
KaTeX parse error: Expected 'EOF', got '#' at position 30: …mat,"%msg%\n" #̲template myformat,"%$NOW% %TIMESTAMP:8:15% %hostname% %syslogtag%%msg%\n
$ActionFileDefaultTemplate myformat
$template IpTemplate,"/var/log/%FROMHOST-IP%.log"
. ?IpTemplate
说明:1. $template IpTemplate(“IpTemplate” 可自定义)指令使 rsyslog 后台进程将日志消息写到 /var/log 下的单独的本地日志文件中,其中日志文件的名称是基于远程日志发送机器的主机名以及生成该日志的应用程序名进行定义的。
2. *.* ?IpTemplate
将 IpTemplate 模板应用到所有接收到的日志上。
修改配置后需要重启服务:systemctl restart rsyslog
客户端配置
发送日志的配置很简单,只需要配置要发送的地址就 ok,如果出于某种原因,你需要更为可靠的协议,
如TCP,而rsyslog服务器也被配置为监听TCP连接,你必须在远程主机的IP地址前添加一个额外的@字符
*.* @@192.168.42.209:514 # tcp 协议
local7.info @192.168.42.209:514 # udp 协议,只发送用户的 info 级别日志
修改配置后需要重启服务:systemctl restart rsyslog
测试
logger的使用
logger 是一个shell 命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。-i 在每行都记录进程ID
-t 日志中的每一行都加一个error标签
-p 指定自定义的日志设备,和配置文件的
local5.*对应,配置文件里没有.info。
服务端触发
服务端查看
日志轮转
create 执行轮转后创建新文件
include /etc/logrotate.d 包含此目录下的自定义配置
/var/log/wtmp 包含用户日志文件wtmp 的轮转策略
minsize 1M 日志达到1MB才开始轮转
create 0664 root utmp 轮转后建新文件并设权限
missingok 若此文件不存在,则跳过轮转处理
:upper: ↩︎
:alnum: ↩︎