赞
踩
上世纪六十年代贝尔实验室(Bell)、麻省理工学院(MIT)以及通用电气(GE)联 合开发裸露信息计算系统 Multics
LGPL(GNU Lesser General Public License),LGPL 是 GPL 的一个为主要为类库 使用设计的开源协议。和 GPL 要求任何使用/修改/衍生之 GPL 类库的的软件必须 采用 GPL 协议不同。LGPL 允许商业软件通过类库引用(link)方式使用 LGPL 类库 而不需要开源商业软件的代码。
BSD(Berkeley Software Distribution,伯克利软件),可以自由的使用,修改 源代码,也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了BSD 协议的代码,或则以 BSD 协议代码为基础做二次开发自己的产品时,需要满 足三个条件:
Apache Licence 是著名的非盈利开源组织 Apache 采用的协议。该协议和 BSD 类 似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作 为开源或商业软件)。需要满足的条件也和 BSD 类似:
MIT 是和 BSD 一样宽范的许可协议,作者只想保留版权,而无任何其他了限制.也就 是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还 是以源代码发布的。
红帽软件发行顺序:
2019年之前:
最先发布 Fedore-----红帽的实验田
第二发布 RHEL------红帽的企业级操系统
最后发布 CentOS Linux----社区的企业级操作系统
2019年之后:
Fedore-----红帽实验田
CentOS Stream----第二次发行
RHEL------最后发行
linux运维岗位工作要求
负责服务器的维护,平台和集群的维护
参与新上线系统流程设定、系统需求。
负责所维护系统事件、问题处理、上线变更评审及操作。
根据系统运行情况、编写并根据实际情况进行维护。
安装准备:
用VMware 安装redhat
vmware workstation 下载地址:https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.html
安装操作系统: 需要有安装介质(ISO镜像文件) RHEL8.4
rhel-8.4-x86_64.iso (官网下载)
获取ISO的方式:
/boot 系统引导分区、内核及启动文件,内核100+M 算上升级也就300+M 500M足够
/swap 内存交换分区、物理内存8G以下,建议与物理内存同等大小
/ 根分区
KDMP: 是Linux 内核崩溃的保护机制(类似于飞机上的黑匣子) KDUMP会在内核崩溃之前将内核挂载起来,收集崩溃前的系统运行数据将其保存到文件,通过分析这个文件得出这次故障的原因,KDUMP 运行在独立的内存中
1、 安装(学习使用建议该选项)
2、 测试安装介质并安装系统(生产环境建议使用该选项,安装前先会先检测iso是否完整(按esc按键可跳出检测),避免安装一半报错而浪费时间)
3、 救援模式
安装过程中使用的语言,建议保持默认,中文可能会出现乱码报错而无法排查
语言:保持默认(English)
Typing:保持默认
Privacy:是否开启隐私位置:建议关闭
Online Accounts:绑定社交账号,跳过
Getting Starte:新手教程,Gnome桌面使用说明
切换控制台:ctrl-alt+Fx(1-6)
切换图形界面:ctrl+alt+[1-2]
切换文本控制台:ctrl+alt+[3-6] 在文本控制执行startx可以切换到图形控制台(而是打开了GNOME的程序)
X Window System提供图形框架
KDE和GNOME提供桌面环境
gnome-terminal桌面工具
快捷键 | 功能 | 快捷键 | 功能 |
---|---|---|---|
ctrl+shift+t | 创建标签页 | ctrl+PgUp/PgDn | 在标签页之间切换 |
alt+[123…] | 在标签页之间切换 | ctrl+l | 清屏 |
ctrl+shift+c | 复制 | ctrl+shift+v | 粘贴 |
Welcome to Alibaba Cloud Elastic Compute Service !
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu May 25 18:29:11 2023 from
[root@ycf02 ~]#
CentOS8和redHat8后默认安装了cockpit
开启cockpit网页控制台:systemctl enable --now cockpit.socket
查看IP信息:ifconfig
访问网页控制台:https://ip地址:9090
1、激活
[root@hostneme ~]#subscription-manager register --username 红帽开发者账号 --password 红帽密码 --auto-attach
2、取消激活
[root@hostneme ~]# subscription-manager unregister
[root@hostneme ~]#
root:当前登录的用户
@:分隔符
hostneme :主机名缩写
~:当前目录(~表示用户家目录,),及当在用户的家目录
#:特权提示符,#表示超级用户,$表示普通用户
su - 切换用户 [root@hostneme ~]# su - admin su是仅切换用户,su - 登录到这个用户(完全登录到这个用户)
Linux中存在无数个命令,当我们不知道这个命令有什么功能或者怎么用的时候可以查询帮助文档进行学习,linux中所有的命令语法遵循以下格式:
command options arguments
Command(命令) 某个功能,列如ls命令
Options(选项) 对命令的修饰和功能的补充
- 短格式:例如 ls 中的 -a
-- 长格式:例如 ls 命令中的--all
区别:
通常短格式是长格式的缩写,但并非所有的短格式都有对应的长格式
短格式可以缩写在一起,例如ls -a -s 等同于 ls -al 而 ls --all --szie 长格式不能缩写
Arguments(对象) 想要操作的对象,例如 ls -a /opt命令中的/opt
项与项之间用空格分隔,多个命令用‘;’分隔
[root@hostneme ~]# ls -a;df -h
. btmonitoragent.sh out.txt
.. .cache .pip
backup.tar.bz2 .config .pydistutils.cfg
.bash_history .cshrc .ssh
.bash_logout findfiles .tcshrc
.bash_profile .lesshst .viminfo
.bashrc .mozilla .wget-hsts
Filesystem Size Used Avail Use% Mounted on
devtmpfs 820M 0 820M 0% /dev
tmpfs 838M 200K 838M 1% /dev/shm
tmpfs 838M 476K 838M 1% /run
显示命令的简短描述,注意,新系统需要先执行mandb收集索引信息后才可用
[root@hostneme ~]# mandb
Purging old database entries in /usr/share/man/overrides...
Processing manual pages under /usr/share/man/overrides...
Purging old database entries in /usr/share/man...
Processing manual pages under /usr/share/man...
Purging old database entries in /usr/share/man/overrides.......
.......
[root@hostneme ~]# whatis ls
ls (1) - list directory contents
ls (1p) - list directory contents
passwd [OPTION...] <accountName>
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
命令本身的帮助,通常由编写该命令的作者提供,列出命令常见语法和参数,支持大部分命令,特殊符号解读如下:
man:查询轻量级帮助
使用方法:
man [章节] 命令或者配置文件
[root@hostneme ~]# man date
DATE(1) User Commands DATE(1)
NAME
date - print or set the system date and time
SYNOPSIS
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
DESCRIPTION
Display the current time in the given FORMAT, or set the system date.
Mandatory arguments to long options are mandatory for short options too.
-d, --date=STRING
display time described by STRING, not 'now'
--debug
annotate the parsed date, and warn about questionable usage to stderr
-f, --file=DATEFILE
like --date; once for each line of DATEFILE
-I[FMT], --iso-8601[=FMT]
output date/time in ISO 8601 format. FMT='date' for date only (the default),
'hours', 'minutes', 'seconds', or 'ns' for date and time to the indicated preci‐
sion. Example: 2006-08-14T02:34:56-06:00
···········
man -k 关键字 查询所有包含关键字的章节
[root@ycf01 ~]# man -k pass
jose-jwe-enc (1) - Encrypts plaintext using one or more JWK/password
chage (1) - change user password expiry information
chgpasswd (8) - update group passwords in batch mode
chpasswd (8) - update passwords in batch mode
clevis-luks-pass (1) - Extracts the passphrase used for binding a particular ...
cracklib-check (8) - Check passwords using libcrack2
create-cracklib-dict (8) - Check passwords using libcrack2
crypt (5) - storage format for hashed passphrases and available ha...
endpwent (3) - get password file entry
endspent (3) - get shadow password file entry
tpm2_policypassword (1) - Enables binding a policy to the authorization value...
fgetpwent (3) - get password file entry
fgetpwent_r (3) - get passwd file entry reentrantly
fgetspent (3) - get shadow password file entry
fgetspent_r (3) - get shadow password file en
手册结构
章节 翻译 是否常用
1、user commands 用户命令:可执行的程式或是shell 指令 是
2、system calls 系统调用:核心所提供的函数
3、library functions 一般函数以及库
4、special files 系统设备。
5、fuke firmats 文件格式:档案格式与协定,如 /etc/passwd 是
6、games 游戏
7、conventions 各种软件包、杂项
8、maintenance commands 系统管理员命令:通常是管理者 root 专用的 是
9、linux kernel api 内核帮助信息
基本操作
操作 结果
查询重量级帮助,使用方式类似man
操作 结果
安装软件包后在本地目录查找帮助文档
/usr/share/doc/[pachagename]
查询红帽解决方案知识库:/https://access.redhat.com
root密码执行passwd可以修改任意用户密码,不需要验证原来的密码且不受密码规约限制。普通用户只能修改自己的密码,需要验证旧密码且受密码规约限制
#passwd 修改当前用户密码
#passwd student 修改student的密码
#echo 12345|passwd --stdin bobo 明文修改bobo的密码为12345
查看用户信息:id username
[root@ycf01 ~]# id root
uid=0(root) gid=0(root) groups=0(root)
su 仅切换到用户本身,无法获取到用户变量
su – 登录到这个用户,可以获取到用户变量
语法:vim fileName
hostnamectl set-hostname newname
-n 指定显示文件后 n 行
-c 指定显示文件后 n 个字节
-q 隐藏文件名
-v 显示文件名
-f 循环读取,常用来查看动态日志 tail -50f filename 动态刷新显示文件最后50行
-n 3 显示文件后 3 行 tail -n -3 显示文件后 3 行
-n +3 显示文件除去前 3 行的所有内容
date +%s 1970-01-01 00:00:00到当前时间的秒速
调用计算器
-rw-r–r–. 1 root root 29 Oct 31 17:55 ts.t
drwxr-xr-x. 4 root root 128 Feb 13 20:33 /opt
当系统中的进程去访问文件时会继承用户的UID和GID
如果用户的UID匹配了文件的UID则 适配UID权限
如果用户的GID匹配了文件的GID 则 适配GID权限
如果用户的UID和GID都不能匹配文件的UID和GID则适用其他人的权限
root用户可以修改所有人的文件,但是普通用户只能修改自己的文件(无视权限)
因此我们通常将文件得UID称为文件的拥有人 文件的GID称为文件的拥有组
-:文件类型,-表示普通文件,d表示目录,|表示连接文件
rw-:拥有人的权限
r--:拥有组的权限
r--:其他人拥有的权限
.:Selinux标签。.表示该文件/目录受到Selinux保护
1:表示文件的硬链接数
root:拥有人
root:拥有组
29:文件大小
Oct 31 17:55:文件最后一次被修改的时间戳
ts.t:文件名
mkdir 创目录:-p 递归创建目录(上级目录不存在会先创建上级目录)
[root@ycf02 ~]# mkdir -p /tmp/dir
touch filename 创建文件:当文件不存在时创建,存在时刷新文件时间挫
stat filename 查看文件时间挫
[root@ycf02 ~]# stat Desktop
File: Desktop
Size: 6 Blocks: 0 IO Block: 4096 directory
Device: fd03h/64771d Inode: 20239092 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2023-06-02 03:00:03.468115956 -0400
Modify: 2023-06-02 02:59:44.891116854 -0400
Change: 2023-06-02 02:59:44.891116854 -0400
Birth: -
rmdir 可以删除空目录,非空目录不会被删除(安全的删除目录)
rm 删除文件及目录
rm [options] <file>….
示例
[root@ycf02 ~]#rm -I file (交互模式)
[root@ycf02 ~]#rm -r dir (递归删除目录及目录内文件)
[root@ycf02 ~]#rm -f file (强制删除,不提示)
[root@ycf02 ~]# rm -rf /tmp/* #强制递归删除/tmp的所有文件和目录
单根倒树形结构(有且只有一个根目录[/])
常见目录
目录 | 说明 |
---|---|
/ | 根目录 |
/root | 超级用户家目录 |
/home/username | 普通用户家目录 |
/usr | 安装的软件,共享库等目录重要的子目录 |
/usr/bin | 用户命令 普通用户可以执行的命令 |
/usr/sbin | 系统管理员命令 |
/usr/local | 本地自定义软件安装目录 |
/etc | 系统配置文件 |
/avr | 系统服务的数据文件,例如数据库文件,日志文件及网站内容等 |
/tmp | 系统临时文件 |
/boot | 系统启动所需文件,内核文件(建议:不要放任何文件) |
/dev | 设备文件,包含系统的硬件设备,(cpu、内存、键盘、硬盘等等)以文件的形式供内核调用 |
/proc和/sys | 易失性存储:系统当前运行状态,当前文件夹关机重启后会被清空,存放进程的目录,(请勿存放重要文件 |
说明:在Linux7或者更高版本中/bin和/usr/bin,/sbin和/usr/sbin,/lib和/usr/lib,lib64和/usr/lib64,中的目录是usr中对应的目录软连接
Linux中文件和目录大小写敏感
文件名最长255字符
所有字符要求是有效的,但”/”除外
ls [options] [files or dirs]
-a 包含隐藏文件
-l 显示详细信息
-R 递归所有目录
-ld 显示目录和符号链接信息
文件的路径:
相对路径:
相对路径就是不以根开头的路径
相对路径是以当前目录作为基础路径
相对路径可以引用到文件,但是仅限在指定的位置使用
绝对路径:
绝对路径是以根开头的路径
绝对路径是文件的全路径
绝对路径在任意的位置都可以使用
pwd:显示当前目录
cd 绝对路径/相对路径:切换到对应位置
cd .. :切换到当前目录的上一级目录
cd - :回到上一个工作目录
cd ~ :回到当前用户家目录
cd ~student:回到student家目录
在windows中通过文件后缀名来识别文件类型,例如.mp3 音乐,.txt文本
Linux中文件后缀名没有意义,仅仅是文件名的一部分供人参考,实则用file命令查看文件类型
file filename
[root@ycf01 opt]# file passwd2
passwd2: ASCII tex
[root@ycf01 opt]# stat ts.t
File: ts.t
Size: 29 Blocks: 8 IO Block: 4096 regular file
Device: 10303h/66307d Inode: 26446815 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:usr_t:s0
Access: 2023-02-13 20:33:23.422223015 +0800
Modify: 2022-10-31 17:55:21.356281774 +0800
Change: 2022-10-31 17:55:21.357281761 +0800
Birth: -
access:文件最后一次被访问的时间
modify:文件最后一次被修改的时间(修改指的是内容改变)
chage:文件最后一次被改变(属性(权限/大小/位置/时间戳))的时间
birth:文件创建时间,8.6后增加内容
修改
-a: 更新访问时间 access
-m: 更新修改时间 modify
d: 指定更新时间的格式 touch -md ‘2022-10-22 10:12:14’ file
cp [option] file destination
如果目标是一个目录,这可以一次拷贝多个文件到这个目录,
例如cp option] file1 file2 destination
如果目标是一个文件,改拷贝覆盖目标文件
-a 复制文件或目录的内容、权限、属性信息
-p 复制文件或目录的内容、权限信息
-r 递归拷贝,复制目录下所有子目录及文件
-f 如果有已存在的目标文件且无法打开,则将其删除并重试
-i 覆盖前询问
-v 显示过程
mv [option] file destination
如果目标是一个目录,这可以一次拷贝多个文件到这个目录,
例如mv [option] file1 file2 destination
如果目标是一个文件,改拷贝覆盖目标文件
如果目标与源文件在同一目录,则重命名
-f 强制覆盖
-b 覆盖前备份
-u 覆盖前先比较文件新旧,源文件新则覆盖
-i 覆盖前询问
-v 显示过程
主流压缩工具bzip2、gzip、xz压缩的格式
压缩文件 解压命令
bzip2 file bunzip2 file
gzip file gunzip file
xz file unxz file 消耗时间更长,压缩效果更好
tar 先打包后压缩,打包也叫归档
打包 tar -cf 生成的包存放目录及文件名 需要打包的路径
拆包 tar -xf 需要拆包的文件
-c 打包
-x 解压
-v 显示过程
-C 拆包到指定目录
-tf 浏览包内容
-z 使用gzip压缩
-j 使用bzip2压缩
-J 使用xz压缩
在linux中访问文件系统都需要挂载才可以访问,
df -h查看磁盘挂载点
[root@hostneme ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 820M 0 820M 0% /dev
tmpfs 838M 204K 838M 1% /dev/shm
tmpfs 838M 476K 838M 1% /run
tmpfs 838M 0 838M 0% /sys/fs/cgroup
/dev/vda3 40G 4.5G 36G 12% /
/dev/vda2 100M 7.3M 93M 8% /boot/efi
tmpfs 168M 0 168M 0% /run/user/0
示例:mount /dev/sr0 /mnt/cdrom/
示例:umount /dev/sr0 或者umount /mnt/cdrom
/etc/fstab:开机挂在路径文件
[root@hostneme ~]#vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Apr 18 05:41:00 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
UUID=7d4c4a4b-ccfb-4dd1-bbc7-bbe7e2ebf41c / xfs defaults 0 0
/dev/sr0 /mnt/cdrom iso9960 defaults 0 0
[root@hostneme ~]#mount -a
任何用户被分配一个独特的用户id号(UID)
UID为0的用户为root用户
系统用户与普通用户的区分,系统用户uid<1000 <普通用户(红帽6是500开始)
用户账号通常从UID1000开始
用户名和UID信息通常存储在/etc/passwd文件中
当用户登录时它被分配一个主目录并运行一个程序(通常是一个shell程序)
没有权限许可用户不能读取、写入或者执行其它用户的文件
每个用户独立一行,即有多少行就有多少个用户
字段1:用户名称
字段2:密码占位符“x”
字段3:用户的UID号
字段4:用户的私有组
字段5:用户的描述信息
字段6:用户的主目录(用户家目录)
字段7:登录Shell信息(/sbin/nogoin表示不能登录)
用于保存用户密码信息,可以使用chage命令进行维护
root:$6$LoeGCYVJYQyodlQd$JTwWTG7cbZ1y14KTai20Et/3TemClATkl.8gGDjVw5eEZt8sO.jkZOkp21uPfFnqXv.95X9GhIGsv.SEybfx11::0:99999:7:::
bin:*:18367:0:99999:7:::
daemon:*:18367:0:99999:7:::
adm:*:18367:0:99999:7:::
lp:*:18367:0:99999:7:::
sync:*:18367:0:99999:7:::
shutdown:*:18367:0:99999:7:::
halt:*:18367:0:99999:7:::
mail:*:18367:0:99999:7:::
operator:*:18367:0:99999:7:::
games:*:18367:0:99999:7:::
ftp:*:18367:0:99999:7:::
nobody:*:18367:0:99999:7:::
dbus:!!:19471::::::
systemd-coredump:!!:19471::::::
systemd-resolve:!!:19471::::::
tss:!!:19471::::::
polkitd:!!:19471::::::
geoclue:!!:19471::::::
rtkit:!!:19471::::::
① 用户名
② 加密的密码,如果是!!/*/?表示没有设置过密码,
6
6
6:两个$符号之间的符号表示加密规则,机体查看openssl passwd –help 【openssl passwd -6 redhat 表示使用openssl passwd中的6类型加密 redhat字符串】
锁定密码原理:在密码加密规则前加!,使密码验证失败,
解锁用户原理:删除添加的感叹号
因此,锁定用户只能适用需要验证密码的场景
③ 最近一次修改密码的时间 从1970-01-01到改密码那天的天数
④ 密码最短适用天数 0表示无限制
⑤ 密码最大有效期,
⑥ 密码到期前的警告天数
⑦ 密码到期后账号保持活跃的天数,即过期后这几天内可以登录且强制修改密码,否则锁定
⑧ 账号/密码失效时间 从1970-01-01到失效那天的天数
⑨ 保留位置 未使用
语法:chage [选项] 用户
#chage -m 0 -M 90 -w7 -l14 user3 分别修改用户密码的最短期限,最长期限,警告周期和失效期限
#chage -d 0 user3强制要求用户在下一此登录时更新密码
#chage -l user3 显示用户密码的信息
#chage -E 2030-10-10 user3 用户将于2023-10-10到期(YYYY-MM-DD格式)
vim /etc/login.defs 修改用户密码默认策略文件
useradd 创建用户会使用/etc/passwd中当前最大的uid,中途缺少的id或已删除的用户占用的id一定不会被分配给新用户,否则会出现新用户能访问之前id用户权限的文件
创建用户会自动到/etc/skel目录下复制用户默认文件到新用户的家目录中
语法:usage: useradd [options] LOGIN
useradd -D
useradd -D [options]
常见选项:
-p 指定加密后的密码(openss passwd -6 123123)
-u 指定 uid
-g 指定 gid
-c 指定描述信息
-d 指定家目录,如果不存在会自动创建
-s 指定登录shell /sbin/nologin:不能登录
-o 允许复用 uid
-e 修改账户过期日期
-f 设置宽限时间
-G 指定附加组
-m 创建家目录
-M 不创建家目录
-N 不创建同名的组
-D 显示/etc/default/useradd 信息
示例:
创建user6用户,指定的同时指定uid和主组,指定多个附加组并指定描述信息
#useradd -u 1017 -g user2 -G user,user2 -c mysql user6
创建user7用户并指定家目录
#useradd -d /user7 user7
通过指定登录shell来创建一个不能登录操作系统的用户
#useradd -s /sbin/nologin user8
语法:usermod [option] username
常见选项:
-p 修改加密后的密码(openss passwd -6 123123)
-u 修改 uid
-g 修改 gid
-c 修改描述信息(登录时所显示的名称)
-d 修改家目录
-s 修改 shell
-o 允许复用 uid
-e 修改账户过期日期
-f 修改宽限时间
-G 修改附加组(带-a 追加添加至新组,不删除之前所在附加组)
-m 移动家目录(常与-d 一起使用)
-l 修改登录名
-L 锁定用户账号(可使用 passwd -U 解锁)
-U 解锁用户账号
示例:
移动user5的家目录到/opt/user5目录,该命令不会报错,但实际上会造成user5无家可归的情况(修改了家目录的配置,但实际上这个目录没有被创建),所以一般【d修改】会搭配【m移动】搭配使用
#usermod -d -m /opt/user5 user5
给用户追加附加组,将user5添加一个叫database的附加组
#usermod -aG database user5
语法:chage [option] username
常见选项:
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-w:用户密码到期前,提前收到警告信息的天数。
-E:帐号到期的日期。过了这天,此帐号将不可用。
-d:上一次更改的日期。
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
示例:
#chage -l student 查看student用户密码信息
#chage -m 0 -M 90 -w 7 -I 7 student 分别设置student用户密码最短、最长、警告和失效时间
#chage -d 0 student 强制用户下一次登录时更新密码
#chage -E 2022-12-12 student 设置用户到期日期
语法:userdel [options] LOGIN
常见选项:
-f 强制删除在线用户
-r 删除家目录与邮件目录/var/spool/mail/username
示例:
#userdel -r user5 删除user5并删除其邮件目录及家目录
语法:passwd [OPTION...] <accountName>
常见选项:
root用户无视密码规则,修改其他用户密码不用验证密码
普通用户严格收到系统密码规则制约,只能修改自己的密码且需要验证原密码
-l 锁定用户密码
-u 解锁用户密码
-d 删除用户密码
-e 终止用户密码(修改密码后可登录)
-n 修改密码最短有效时间
-x 修改密码最长有效时间
-w 修改密码警告时间
-i 修改密码宽限时间
示例:
#passwd 修改当前用户密码
#passwd student 修改student的密码
#echo 12345|passwd --stdin bobo 明文修改bobo的密码为12345
用户组也可以登录系统,意义在于可以临时访问组内用户文件
每创建一个用户就会创建一个与之同名的组并将当前创建的用户加入组
用户组有两个属性:
语法:groupadd [options] GROUP
常见选项:
-g 指定组id 该id必须唯一
-o 表示可以与gid共用 一般与-g一同使用
-r 创建系统工作组
示例:
# groupadd -g 10002 test 创建一个test组,并指定组id为10002
语法:groupmod [options] GROUP
常见选项:
-g 修改组id
-n 修改组名称
示例:
#groupmod -g 10003 -n tests test 修改test组的组id和组名
语法:groupmems [options] [action]
常见选项
-g 指定组
-a添加用户为组成员
-d 从组成员中删除
-l 列出组成员
-p 清空组(清除组内所有成员)
示例
#groupmems -g database -l 查看database组内成员
# groupmems -g database -a user6 将user6加入到database组
# groupmems -g database -p 清空database组内所有成员
语法:groupdel [options] GROUP
常见选项:
-f 强制删除
示例:
#groupdel database
2.6 修改组密码 gpasswd
语法:gpasswd [option] GROUP
参数:
-a:添加用户到组;
-d:从组删除用户;
-A:指定管理员;
-M:指定组成员和-A的用途差不多;
-r:删除密码;
-R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。
示例:
#gpasswd test 设置test组的密码
#gpasswd -a user5 database 将用户user5添加到database组
语法:newgrp [-] [group]
示例:
#newgrp test登录到组
每一个文件都有一个uid(拥有人id)和gid(拥有组id)
任何进程运行时都带一个uid和一到多个gid标识(通常取决于用哪个用户来执行)
通常决定于哪一个用户执行这个进程
三种访问类型:
文件拥有者运行的进程,跟文件有着同样的uid
文件拥有组运行的进程,跟文件有着同样的gid
其他用户云的进程,与文件的uid和gid都不通,其他进程(other)
1. 如果文件的UID与当前用户UID匹配,则以用当前户权限[u]访问
2. 如果文件的GID与当前用户GID匹配,则以组权限[g]访问
3. 如果都不匹配,则以其他[o]权限访问
文件权限样例如下,在系统中通过ls -l命令查看文件详细列表,通过ls -ld查看目录详细信息如下
#ls -l
#ls -ld
-rw-r–r–. 1 root root 29 Oct 31 17:55 ts.t
drwxr-xr-x. 4 root root 128 Feb 13 20:33 /opt
权限分配 | 文件所属人 | 文件所属组用户 | 其他用户 |
---|---|---|---|
字符表示 | r w x | r w x | r w x |
权限项 | 读写执行 | 读写执行 | 读写执行 |
数字表示 | 421 | 421 | 421 |
列表信息详解
文件项示例 目录项示例 解释
- d 文件类型,-:普通文件,d:目录,l:连接文件,
c:块设备,b:字符设备
rw- rwx 拥有人的权限
r-- r-x 拥有组的权限
r-- r-x 其他人拥有的权限
. . Selinux标签,表示该文件或目录受Selinux保护
1 4 文件硬连接数
root root 文件/目录的拥有人
root root 文件/目录的的属组
29 128 文件大小
Oct 31 17:55 Feb 13 20:33 最后修改时间
ts.t opt 文件名
权限解读
权限分配 文件所有人(uid) 文件所属组用户(gid) 其他用户(other)
权限项 r w x r w x r w x
字符表示 读 写 执行 读 写 执行 读 写 执行
数字表示 4 2 1 4 2 1 4 2 1
权限影响
权限 对文件影响 对目录影响
r(4)(读) 可以读取文件内容 可以列出文件内容(文件夹内的文件列表)
w(2)(写) 可以更改文件内容 可以
x(1)(执行) 可以作为命令执行文件 仅可以进入目录,但需要r权限才能读取内容
用来变更文件或目录的权限
语法:chmod [OPTION]… MODE[,MODE]… FILE…
chmod [OPTION]… OCTAL-MODE FILE…
chmod [OPTION]… --reference=RFILE FILE…
常见选项:
-R 递归处理,将指定目录下的所有文件及子目录一并处理
示例:
#chmod u+x test.txt 针对属主(u),增加(+)对该文件的执行权限
# chmod g-r,o-r test.txt 针对数组及其他用户(o),删除(-)对该文件的读权限
#chmod a+x test.txt 针对所有用户(a),增加对该文件的执行权限
#chmod u=rwx test.txt 针对属主,精确赋权(=)对该文件赋予读写执行权限
#chmod 755 test.txt针对所有用户进行赋权,等同chmod u=rwx,g=rx,o=rx test.txt
#chmod -R 755 /opt针对所有用户对/opt目录进行递归(包括子目录及文件)授权为755
用来变更文件或目录的拥有者或所属群组
语法:chown [OPTION]… [OWNER][:[GROUP]] FILE…
常见选项:
-R 递归处理,将指定目录下的所有文件及子目录一并处理;
示例:
#chown user1 test.txt 修改test.txt文件的属主为user1用户
#chown :database test.txt 修改test.txt文件的属组为database组
#chown user1:database test.txt 修改test.txt文件的属主为user1,属组为database组
#chown -R user1:database /opt 递归修改/opt目录的属主为user1,属组为database组
用来变更文件或目录的所属群组
语法:chgrp [OPTION]… GROUP FILE…
chgrp [OPTION]… --reference=RFILE FILE…
常见选项:
-R 递归处理,将指定目录下的所有文件及子目录一并处理;
示例:
#chgrp database test.txt 修改test.txt文件的属组为database,等同chown :database test.txt
#chgrp -R database /opt 递归修改/opt目录的属组为database,等同chown -R :database /opt
IO和管道:
IO:input 和outuput 输入和输出
标准输入:键盘(在linux中所有从键盘输入的都是标准输入)
标准输出:显示器——————>标准输出设备
进程IO通道
系统内编号 通过名称 描述 默认设备 用法
0 stdin 标准输入 键盘 只读
1 stdout 标准输出 显示器 只写
2 stderr 标准错误输出 显示器 只写
3+ filename 其他文件 无 读或写
管道符号“|”能连接命令,顾名思义,其作用就像管道一样,能连接前后,即如下图所示,将命令1的标准输出作为命令2的标准输入而不显示到当前终端
command1 | command2
错误输出不能通过管道传输,但可以通过将错误输出当成正确输出(2>&1)进行处理
示例:
ps -ef | grep java 打印所有进程,然后在此基础上查询java的进程
echo redhat | passwd --stdin root 使用管道明文修改密码
find /etc -name passwd 2>&1 |wc -l 将错误输出当真正常输出,然后统计行数
[root@ycf02 ~]# id user1 |tee /tmp/1.txt
uid=1001(user1) gid=1001(user1) groups=1001(user1)
[root@ycf02 ~]# vim /tmp/1.txt
[root@ycf02 ~]# cat /tmp/1.txt
uid=1001(user1) gid=1001(user1) groups=1001(user1)
[root@ycf02 ~]#
> file:将标准输出(stdout)重定向覆盖到file文件
>> file:将标准输出(stdout)重定向追加到file文件
2> file:将错误输出(stderr)重定向覆盖到file文件
2>> file:将错误输出(stderr)重定向追加到file文件
&> file:将stdout和stderr重定向覆盖到file文件,等同> file 2 >&1 (全部输入重定向覆盖)
&>> file:将stdout和stderr重定向追加到file文件,等同>> file 2 >&1(全部输入重定向追加)
示例:若使用普通用户执行find /etc -name passwd命令会产生输出和报错(权限不足),
$find /etc -name passwd >find.out 将命令执行的标准输出重定向到find.out文件
$find /etc -name passwd 2> /dev/null 将命令执行的报错信息重定向到黑洞
$find /etc -name passwd >find.out 2>find.err 将命令执行的标准输出到find.out 错误输出到find.err
解释:
2>&1 并不是将错误输出到正确输出,而是将错误输出当成正确输出
/dev/null:空设备(系统:/垃圾桶) 所有指向这里的东西都将被销毁/丢弃
[root@ycf02 ~]# cat >> /tmp/1.txt <<EOF
> 123
> hello
> chongqing
> EOF
[root@ycf02 ~]# cat /tmp/1.txt
uid=1001(user1) gid=1001(user1) groups=1001(user1)
123
hello
chongqing
也可以用于输入修改密码
语法:vim filename
如果文件存在则打开并显示内容,文件不存在这再编辑保存后创建当前文件
vim三中工作模式
命令模式:用于文件导航、剪切粘贴和简单命令
插入模式:用于正常文本编辑修改
退出模式:用于保存、退出、打开新文件、搜索和替换以及其他复杂操作...
系统最小化安装是不安装的vim
命令安装:yum install vim-enhanced
vim的版本:图形化(gvim)
操作类型 | 操作键 | 功能 |
---|---|---|
移动光标 | ↑↓←→ | 向上下左右方向移动光标 |
翻页 | PageUP或者Ctrl+B | 向上翻页 |
翻页 | PageDown或者Ctrl+F,PageDown或者Ctrl+F | 向下翻页,向下翻页 |
行内跳转 | Home或者“^”或者数字“0” | 跳转到行首 |
行内跳转 | End或者“$” | 跳转到文件行尾 |
行间跳转 | 1G或者gg | 跳转到文件首行 |
行间跳转 | G | 跳转到文件末尾 |
行间跳转 | #G | 跳转到第#行 |
行号显示 :set nu 显示行号
:set nonu 取消显示行号
操作类型 操作键 功能
删除 del或者x 删除贯标处的单个字符
dd 剪切当前光标所在行(不粘贴则为删除)
Ndd 剪切光标所在行以及之后的N-1行,例如:5dd 删除光标所在行以及后面4行
cc 替换该行,并进入插入模式,即清空当前行内容并进入插入模式
d^ 删除当前行中光标之前的内容
d$ 删除当前行中光标行尾的内容
dw 针对单词,删除光标位置到词尾的内容,
复制 yy 复制光标所在的行
数字+yy 复制多行
m,n copy dest 复制指定行到指定位置 3,5 copy 11:复制3-5行并粘贴到11行之后
粘贴 p 粘贴缓冲区(剪切板)的内容到光标位置的下一行
数字+p 粘贴多行
P(大写) 粘贴缓冲区(剪切板)的内容到光标位置的前一行
操作键 功能
/string 从上往下在文件中查找string字符串
?string 从下往上在文件中查找string字符串
n 定位下一个匹配到的位置
N 定位到上一个匹配到的位置
操作键 功能
u 撤销最近一次操作,类似word里面的ctrl+z
U 撤销光标所在行的更改
Ctrl+r 撤销上一次撤销
. 重复上一次操作
插入模式/编辑模式
编辑文件
操作键 功能
i 在光标左边插入
a 在光标右边插入
o 在光标下一行插入新行
O 在光标上一行插入新行(大写)
I 在首行参入文本(大写)
A 在一行的结尾处添加文本(大写)
按ESC键
操作类型 命令 功能
保存文件 :w 保存当前文件
:w /root/newfile 另存为其他文件
:m,nw file :3,11w file:将3-11行另存为file
不保存退出 :q 退出且不保存
:q! 强制退出且不保存
保存并退出 :wq 保存并退出
:wq! 强制保存并退出
可视化模式允许选择文本块
1.1 基本正则表达式
基本正则表达式(BasicRegularExpression BRE),又称为标准正则表达式,是最早死定的仅支持最基本的元字符集,基基本正则表达式是POSIX规范制定的两种正则表达式语法标准之一
1.2 扩展正则表达式
扩展正则表达式(ExtendedReqularExpression),支持比基本正则表达式更多的元字符,但是扩展正则表达式对有些基本正则表达式的元字符并不支持
egrep 支持扩展正则表达式,相当于grep -E
功能
- 打印一个或多个文件到标准输出
- 合并多个文件 cat a.file b.file >new.file
-A 显示所有字符
-n 显示行号
缺点:会显示所有内容,
- 针对大文件会占据很长的打开时间
- 内容多的文件一个屏幕放不下,于是需使用more
分页查看文件内容,每次只看一页
浏览文件内容 每次只看一页
- 在查看时常用如下命令
- /text 搜索text
- n/N 跳转到 next/previous匹配的地方
- -v 用文本编辑器打开该文件
- man命令中是采用less来分页的
head tail文本摘选
提取文件的指定行,通用公式 head -n 取最大行|tail -n 最大值-最小值+1
例如提取a.txt的第15-20行:head -n 20 a.txt|tail -n 20-15+1
-n 15显示前15行
-n -15去掉文件后15行
-n 15显示文件的最后15行
-n +15去掉文件起始的15行
-f 查看文件实时发生的改变(常用于监控打印日志)
打印匹配的文件行或者标准输入
$ grep ‘string’ file
-i 忽略关键字大小写
-o 只显示匹配内容
-n 显示文件行号
-c 如果匹配成功,显示匹配行行号
-v 取反,排除匹配行
-q 静默模式,不输出任何信息,靠$? 进行验证$?=0表示有匹配项,非0表示无匹配项目
-r 递归搜索目录,根据文本内容搜索文件
-l 与r联合使用,只显示文件名
-E、 --扩展正则表达式PATTERN是一个扩展正则表达式
-F、 --固定字符串PATTERN是一组换行的字符串
-G、 --basic regexp PATTERN是一个基本的正则表达式(默认值)
-P、 --perl regexp PATTERN是一个perl正则表达式
-e、 --regexp=PATTERN使用PATTERN进行匹配
-f、 --file=file从file获取图案
-B, --before-context=NUM print NUM lines of leading(最前的) context
-B2 显示匹配行以及前2行
[root@ycf02 opt]# grep '\<ftp\>' /opt/passwd2 -B2
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
-A, --after-context=NUM print NUM lines of trailing(后面的) context
-A2 显示匹配行以及后2行
[root@ycf02 opt]# grep '\<ftp\>' /opt/passwd2 -A2
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
-C2 显示匹配行以及前后2行
[root@ycf02 opt]# grep '\<ftp\>' /opt/passwd2 -C2
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
grep结合正则表达式:元字符
grep ^u /etc/passwd ;^ 以某某开头的行
grep bash$ /etc/passwd ;$以某某结尾
grep '\<root' /etc/passwd 在字(单词)开头匹配查找
grep 'root\>' /etc/passwd 在字(单词)结尾匹配查找
单词: 是由字母、数字、下划线组成,(不是英文单词)
\<单词\> 匹配一个完整的单词
. 表示匹配任意的单个字符
[abc] 表示匹配括号内的单个字符
[^abc] 表示除了括号内都需要(取反)
[a-z] 匹配括号范围内的单个字符
[a-Z] 匹配大写和小写字母(可以是任意的一位字母)
\ 去掉斜杠后单个字符的特殊意义,例如:.只表示小数点,还原原始的小数点的意义。
* 对前一项进行零次或者多次重复匹配
^$表示空行,不是空格
.*匹配所有字符。^.*任意多个字符开头
\<或\b:锚定词首(支持vi和grep),其后面的任意字符必须作为单词首部出现,如<love或 blove
\>或\b:锚定词尾(支持vi和grep),其前面的任意字符必须作为单词尾部出现,如 love\>或love\b
扩展的正则表达式:需要使用egrep或者grep -E 才能匹配
+对前一项一次或多次重复匹配
?对前一项0次或者1次重复匹配
{j}对前一项进行j次匹配
{n,}前一项进行至少n次,多了不限。
{,m}前一项进行至多m次,少了不限。
{n,m}对前一项至少n次,最多m次。
注意: grep要{转义},\{\},egrep不需要转义
a|b 对a或者b进行匹配,可以是a,也可以是b
()对()里单项进行匹配 ,把需要的字符串作为一个整体,如:grep -E ’(root){3,}‘ /etc/passwd
-d 指定分隔符
-f 指定打印的列
-c 指定按字符提取
示例:
cut -d: -f1,3 /etc/passwd :提取/etc/passwd文件中以:分隔后的第1列和第3列
cut -c2-5 /etc/passwd 提取指定文件每一列的2-5个字符
awk 按列进行提取 默认用空格作为分割符
awk '{print $ 4}' 取第四列的
awk '{print $ 4,$6}' 取第四列到第6列
-F 指定分隔符
文本统计 wc
文本排序 sort
文本比较 diff
可以针对文件或者标准输入计算行数、单词数,字节数/字符数
[root@ycf02 ~]# wc /tmp/passwd
49 109 2671 /tmp/passwd
#49 表示多少行
#109 表示单词数
#2671 表示字节数
-l 只统计行数
-w 只统计单词
-c 只统计字节
对标准输出排序,不改变源文件
默认是第一个字符排序
-r 执行方向排序(降序)
-n 执行数字大小排序(正序)
-f 忽略字符串中的大小写
-u 在输出中删除重复行
-t: 使用:作为字段见的分隔符
-k 指定列
例:
sort -n -t :-k 2 /etc/passwd
sort -u删除重复行
uniq 从相邻的行中删除重复行
-c 统计发生重复的次数
更sort一起使用效果更好 sort userlist.txt|uniq -c
比较两个文件的不同,可以使用vimdiff
diff a.file b.file
4c4
< user_dd
--
>user_cc
以上示例支出a文件与b文件在5行存在差异
流编辑器
执行查找替换操作在文本流上,通常不更改源文件
使用-i.bak 备份和修改源文件
常用选项
-n,-quiet 不输出模式空间的内容(即不输出未操作内容,等同于只输出被操作的内容)
-i 将内容保存到源文件
-e 执行多条命令 -e 命令1 -e 命令2
-r 使用扩展正则表达式(sed默认正则表达式)
ctrl+a 把光标移到命令开头
ctrl+e 光标移动到命令结尾
ctrl+c 强制终止当前命令
ctrl+l 清屏
ctrl+u 删除光标之前的内容
ctrl+k 删除或剪切光标之后的内容
ctrl+y 粘贴之前剪切的内容
crtl+r 在历史记录中搜索
crtl+d 退出当前终端
ctrl+z 暂停、放入后台
ctrl+s 暂停屏幕输出
ctrl+q 恢复屏幕输出
文件通配符 其他常用通配符
“*” 匹配0或多个字符 [:alpha:] 匹配字母
? 匹配任意单个字符 [:lower:] 匹配小写字母
[0-9] 匹配0-9范围内的数字 [:upper:] 匹配大写字母
[abc] 匹配该列表内的任意字符 [:digit:] 匹配数字
[^abc] 匹配除列表内字符外的所有字符 [:space:] 匹配空格
[:alnum:] 匹配任意之母或者数字
[:punct:] 匹配除空格、数字、字母以外的可打印字符
#echo “当前服务器主机名为:$(hostname)”
# echo “当前服务器主机名为:`hostname`”
程序设计中一个可以变化的量
本地变量由用户自由定义变量名和值
定义变量:变量名=变量值 变量名必须以字母或者下划线开头,大小写敏感,不能以数字开头
引用变量:$ 变量名或者${变量名}
查看变量:单个查看:echo $变量名 查看所有变量:set
取消变量:unset 变量名
作用范围:仅在当前shell中有效
环境变量
主要保存和操作系统有关的数据,比如用户家目录,命令提示符等
定义环境变量:
export back_dir=/home/back 定义一个新的环境变量
export back_dir1 将本地变量back_dir1转换成环境变量
查看变量:env
作用范围:当前shell和子shell中生效
定义别名:$ alias ll=’ls -l’
查看别名:$ alias ll
取消别名:$ unalias ll
6.1 反斜杠
转义字符,去掉后面字符的特殊含义
6.2 引号
单引号’’:去掉引号内所有字符的特殊含义
双引号””:去掉引号内所有特殊字符的含义,以下情况除外
进程是加载到内存中的一段指令,即一个程序运行的实例
a:查看所有终端的进程
u:打印进程所有者信息
x:查看不属于任何终端的进程
-e:查看系统所有进程
-f:查看额外的信息
-o:指定格式输出 :例如:ps -axo pid,user,%cpu,command
--sort:指定排序的参数,例:--sort%mem按内存大小降序排序,常用组合 ps aux或者ps -ef
进程状态补充:
TTY详解
tty1-6 控制台登录
pts /1 虚拟终端,图形化控制台,ssh远程登录
? 内核进程
d:指定刷新频率,也可以使用s来改变
p:监控某个指定进程的id
St:CPU的等待时间百分比
1:监控每个逻辑cpu的状况
c:切换显示命令名称和完整命令行
M:可按内存情况进行排序
P:根据CPU百分比排序
T:根据时间/累积时间进行排序
f:选择可显示内容
<1:系统资源很充足
=1:系统在全力处理任务
>1:CPU已在全力工作,但队队列仍然很长,任务量还很多
统计空闲的CPU我们直接统计%id的计数即可,当id持续过低的时候,表示系统迫切需要解决CPU资源问题。
统计使用的是CPU需要用1-%id获取。或者us+sy+si.
wa:使用率过高的时候,我们需要考虑IO的性能是否有瓶颈,可以在使用iostat、sar等命令做进一步分析;
hi:使用率过高时,表示当前硬件中断占用很大的百分比。一般硬件中断我们可以分析文件/proc/interrupts、/proc/irq/pid/smp_affinity、服务irqbalance是否配置,以及CPU的频率设置,通过这些可以帮系统打散优化系统的硬件中断。
si:Linux kernel通过用一种软件的方法(可延迟函数)来模拟硬件的中断模式,通常叫做软中断。常见的软件中断一般都是和网络有关。从网卡到IP层的数据报文收发都是si处理的,长时间写日志也可能产生软件中断。
当软中断出现瓶颈的时候,系统有个进行叫ksoftirqd,每个CPU都有自己对应的ksoftirqd/n(n为CPU的逻辑ID),每个ksoftirqd的内核线程都会去运行对应的ksoftirqd(函数)来处理自己的中断队列上的软件中断。所以,当网络出现阻塞的时候,软件中断程序ksoftirqd肯定会出现瓶颈。此时我们可以通过ps aux|grep ksoftirqd查看ksoftirqd的瓶颈。
total 物理内存总量
free 空闲物理内存
used 已经使用的物理内存
buff/cache 内核缓存内存量
total 交换区总量
free 空闲交换区总量
used 使用的交换区总量
avail Mem 缓冲的交换区总量。
PID 进程id
USER 父进程id
PR 优先级
NI 谦让度值 nice值。负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SHR 共享内存大小,单位kb
S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行
-l也显示命令名
-f与整个命令行匹配
-n仅显示最新进程
-o仅显示最旧的进程
-v否定比赛
-x匹配整个名称(不是子字符串)
-s匹配会话ID(0表示当前)
-P匹配父进程ID
在Linux中默认使用信号进行进程的通信
kill -信号 PID ----->结束指定进程
通过PID:kill [signal] pid…
killall -信号 进行名 ------>批量结束一类进程
通过名称:killall [signal] comm…
pkill -t 结束一个终端(终端通常是ssh的pts)的进程
通过模式:pkill [-signal] pattern
调度优先级决定对cpu的访问
linx总只有root可以调整nice值(即静态优先级),该值影响优先级
值范围-20~19 缺省值为0,低nice值意味着高cpu优先级
通过ps -o comm,nice查看
用来在网络中标记设备,不同主机可以通过ip地址进行通信
IP地址是一个32位的二进制数,其地址分为网络和主机两个部分
用来确定整个网络的范围,子网掩码可以确定网络内可以容纳多少主机
当需要和其他网段进行通讯时需要设置网关
网关通常指向本地路由接口的ip
DNS名称服务器,主要是将域名解析成IP地址来供系统访问
传统上,linux的网络按照加载顺序接口依次为eth0、eth1、eth2…. 但系统新增网卡或更换网卡设备后,非常容易会导致网络异常
RHEL7以上版本的默认命名是基于固件基础上分配的固定名称(接口类型+适配器类型+随机id 列如:ens160)
ifconfig查看网络接口状态,mac地址、ipv4/6地址、广播地址等
lo 本地回环地址:IP:127.0.0.1 只能自己访问自己搭建的网站,供应其他程序内部访问
virbr0 提供KVM虚拟化
route -n查看网关路由等信息
[root@ycf02 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.72.2 0.0.0.0 UG 100 0 0 ens160
0.0.0.0 172.25.250.254 0.0.0.0 UG 101 0 0 ens224
172.25.250.0 0.0.0.0 255.255.255.0 U 101 0 0 ens224
192.168.72.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
[root@ycf02 ~]# cat /etc/resolv.conf
#Generated by NetworkManager
search localdomain
nameserver 192.168.72.2
nameserver 8.8.8.8
还原eth0:
1、临时还原,在系统启动时传递 nat.ifnames=0 bisodevname=0
2、永久有效
1、[root@ycf02 ~]# vim /etc/default/grub
2、重新生成引导文件
[root@ycf02 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
3、reboot重启验证
ifconfig查看激活网卡信息
ifconfig -a查看所有网卡(包括未激活)
ifconfig ens160 up/down 激活或者禁甩网卡
ifconfig ens160 ip/netmask 设置ip地址和子网掩码(临时有效,会覆盖原有配置信息,但重启后失效)
ip addr [show]:查看网络地址
ip addr add ip/netmask dev ens160 在该网卡添加当前指定地址(临时有效)
示例给ens160网卡添加一个ip:ip addr add 192.168.17.129/24 dev ens160
ip addr del ip/netmask dev ens160 删除该网卡上的指定地址
ip route [show] 查看路由表信息
ip route add 目标地址ip[/netmask] via 网关地址 添加路由
示例:ip route add default via 172.168.1.254 dev ens160
ip route del 目标地址ip[netmask] 删除路由
[root@yuncf01 ~]# nmcli connection add type ethernet ifname eth0 con-name ens160 ipv4.method manual ipv4.addresses 192.168.10.10/24 ipv4.gateway 192.168.10.254 ipv4.dns 144.144.144.144 autoconnect yes
type:添加的配置文件类型
ifname:设备名字(网卡名)
con-name:连接的配置文件名
ipv4.method:ipv4获取方式(dhcp或手动)
ipv4.addresses:指定ipv4地址
ipv4.gateway 网关地址
ipv4.dns DNS地址
autoconnect:是否开机激活
-修改网络配置nmcli con modify (配置文件名)
[root@yuncf01 ~]# nmcli connection modify System\ eth0 ipv4.method manual ipv4.addresses 192.168.10.100/24 ipv4.gateway 192.168.10.254 ipv4.dns 144.144.144.144 autoconnect yes
多IP添加
多IP删除
[root@yuncf01 ~]# nmcli connection up ens160
[root@yuncf01 ~]# ls /etc/sysconfig/network-scripts/
ifcfg-ens160
手动编辑文件/etc/sysconfig/network-scripts/ifcfg-ens160 ,将ip获取方式更改为手动BOOTPROTO=static,并在其后添加如下几行,最后内容如下
TYPE=Ethernet 网络类型 表示以太网
PROXY_METHOD=none 表示是否启用代理
BROWSER_ONLY=no 是否仅浏览
BOOTPROTO=static 获取ip的方式,dhcp表示自动获取
IPADDR=IP地址
NETMASK/PREFIX=子网掩码
NETMASK=255.255.255.0
PREFIX=24
GATEWAY=172.168.0.2
DNS1=202.103.44.150
DNS1=202.103.25.69
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes 是否启用ipv6
IPV6_AUTOCONF=yes ipv6是否自动配置ip地址
IPV6_DEFROUTE=yes 是否将当前的接口设置ipv6的默认网关
IPV6_FAILURE_FATAL=no ipv6配置失败的时候启用ipv4
NAME=ens160 配置文件的名字
UUID=74d133f7-fe91-4631-9ea9-15626060de12 配置文件标识符
DEVICE=ens160 网卡设备
ONBOOT=yes 开机自动激活网卡
$ nmcli connection reload #让networkManager重新读取硬盘上的配置文件
$ nmcli connection up ens160 #让配置生效
在网卡文件添加如下配置,然后重新读取配置文件并让其生效,使用ip addr show查看
IPADDR1=ip地址2
NETMASK1=255.255.255.0
或者
IPADDR1=ip地址2
PREFIX1=24
[root@yuncf01 ~]# hostname
yuncf01
主机名配置文件
/etc/hostname
设置主机名,修改完成后需要重新登录才会显示新主机名
hostnamectl 修改主机名或者查看系统信息
hostnamectl set-hostname rhce.example.com (永久有效)
IP与主机名的映射(绑定):
在生产环境中,有很多自定义的域名,这些域名都不是公网来解析的
/etc/hosts 系统内部用来解析内部地址的文件
IP地址 完全限定的域名(完整的主机名) 别名
做了映射以后 ,文件中的条目优先级更高
hosts文件只在本机上有效
ip 域名 别名
标准服务端口配置文件/etc/service
先决条件:
服务器必须有两张网卡,
也不需要有配置配置文件
bond1 示例: 主备模式 也就是当一个网卡故障时,另一个网卡接替服务
1. 创建虚拟接口
nmcli connection add type bond ifname bond1 con-name bond1 mode active-backup miimon 1000
type: 类型是bond
mode:active-backup 主备
miimon: 链路的监测时间 1000
2. 给bond添加物理接口
nmcli connection add type bond-slave ifname ens224 con-name bond1-ens224 master bond1
nmcli connection add type bond-slave ifname ens160 con-name bond1-ens160 master bond1
3. 给bond配置IP地址
nmcli connection modify bond1 ipv4.method manual ipv4.addresses 172.16.0.80/24 autoconnect yes
4. 激活bond 并测试
nmcli connection up bond1
查看bond的信息: cat /proc/net/bonding/bond1(bond网卡名)
DHCP 动态主机配置协议 ,是专门用来在网络中为主机自动分配IP地址
在装了vmware的物理机上vmnet1 是仅主机模式网卡 vmnet8 是nat模式网卡
一般 vmware会将子网中.1的IP作为物理机上虚拟网卡的IP .2 的IP作为该子网的网关地址
桥接模式的配置示例:
1. 创建虚拟网桥设备
nmcli connection add type bridge ifname br0 con-name br0
2. 给设备绑定物理接口(指定桥接的物理网卡)
nmcli connection add type bridge-slave ifname ens224 con-name br0-ens224 master br0
3. 给网桥配置IP地址进行测试(生产环境中一般不会配置地址)
nmcli connection modify br0 ipv4.method manual ipv4.addresses 192.168.10.100/24 autoconnect yes
nmcli connection up br0
虚拟机开启时ifconfig没有ens160网卡,无法上网远程SSH连接,同时图形化模式没有有线连接选项:
手动启动网卡提示:
[root@ycf02 ~]# nmcli device connect ens160
Error: Failed to add/activate new connection: Connection 'ens160' is not available on device ens160 because device is strictly unmanaged
[root@ycf02 ~]# nmcli connection up ens160
Error: Connection activation failed: No suitable device found for this connection (device lo not available because device is strictly unmanaged).
原因是虚拟机启动时,NM托管未开启导致
1、查看托管状态
[root@ycf02 ~]# nmcli networking
2、显示 disabled 则为遇到的问题,如果是 enabled 则可以不用往下看了
开启 托管
[root@ycf02 ~]# nmcli networking on
3、再启动网卡就行
[root@ycf02 ~]# nmcli device connect ens160
[root@ycf02 ~]# vim /etc/NetworkManager/NetworkManager.conf
添加:managed=true,保存退出
重启网络服务器:
[root@ycf02 ~]# systemctl restart NetworkManager
这样就行了
对于一个shell脚本来说,应该具备以下元素
【解释器】第一行的声明:“#!/bin/bash”
【注释】:说明某些代码的功能
单行注释:#
多行注释: <<BLOCK(可以是任意字符串,但要注意前后一致并对其)
BLOCK
【可执行语句】:实现程序的功能
区别:
方法三 可以在脚本中不指定解释器,脚本可以没有执行权限
方法一和方法二脚本需要有执行权限,
方法四:将脚本中内容放到当前shell执行,方法1-3开启子shell
shell编写中的注意点:
1、 开头指定解释器
#/bin/sh 或者#!/bin/bash
2、 开头加版本版权等信息
#Date 创建日期
#Author:作者
#Mail:联系方式
#Function:功能
#version:版本
#Description:描述
3、 脚本中尽量不要使用中文
4、 没必要使用cat命令
eg:cat /etc/passwd|grep gnru
可以改成如下方式
eg:grep gnru /etc/passwd
5、 代码缩进
6、 脚本已.sh为扩展名,名称见名知意
例如:backMsql.sh back_mysql.sh
7、使用.vimrc文件,可快速生成脚本开头的头文件信息
这种变量主要用来向脚本中传递参数或者数据,变量名不能自定义,作用是固定的
$1 表示脚本后的第一个参数
$2 表示脚本后的第二个参数
$3 表示脚本后的第三个参数
$1~${10}
预定义变量是bash中一定定义好的变量,变量名不能自定义,变量的作用也是固定好的
$0:脚本名(即执行脚本的文件名)
$*:所有的参数,双引号应起来时候参数视为单个字符串
$@:所有的参数,双引号引起来时,每个传输作为个体
$#:参数的个数
$$: 当前脚本的PID
$?:上一个命令的返回值[0-255] 0表示成功,1-255表示执行失败
read 变量名
-p 提示信息
-t 指定超时时间 单位:秒
-s 暂停屏幕输出,即输入的信息不回显示到屏幕,适用于指定密码
从命令行接收用户输入:
read –p “提示信息” –s “输入内容不可见” -t “超时时间单位秒” 变量名
如果没有指定变量名默认为REPLY 这个变量名
命令是否执行要根据前面命令的退出码
&&代表逻辑与:
command1 && command2
根据命令的返回值 来判断命令是否执行成功 返回值为0 则结果为真; 返回值为非0 结果为假
如果command1 结果为真则执行 command2
如果command1 结果为假则不执行 command2
逻辑与两条命令返回值为0,则结果为真
例如:如果系统存在dragon用户,则更改密码
id dragon && echo dragon|passwd –stdin dragon
|| 逻辑或:
command1 || command2
如果command1 结果为真不执行 command2
如果 command1 结果为假则执行 command2
一真为真 一条命令满足结果则为真
例如:如果系统不存在dragon用户,则创建
id dragon || useradd dragon
即一串命令,()和{}都是对一串命令进行执行,但有所区别
pwd;cd /tmp;pwd)
{ pwd;cd /tmp;pwd;}
相同点:
()和{}都是把一串的命令放在括号里面,如果命令在一行命令之间用; 号隔开
()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令
不同点:
格式不同:
()里的第一个命令和左边括号不必有空格,{}的第一个命令和左括号之间必须要有一个空格
()最后一个命令可以不用分号,{}最后一个命令要用分号
shell的差异:
()是在子shell中执行,所以不能改变当前shell的路径
{}是在当前shell中执行,因此可以改变当前shell的路径
在shell程序中,用户可以使用测试语句来测试指定的条件表达式的真或假,但指定条件为真时,整个测试返回值为0,反之未假,返回值非0
格式1 test条件表达式 例如判断/tmp/ts文件是否存在 test -d /tmp/ts
格式2 [ 条件表达式 ] 只能是单个条件,
格式3 [[ 条件表达式 ]] 多个条件表达式,即出现逻辑与或者逻辑或
测试文件的属性
“=~”表示后面跟的是一个正则表达式
布尔 理解 在Linux 中布尔值 更多的时候 就是一个开关 true false
运算符 | 说明 | 类似 |
---|---|---|
-a | 两个结果同时为真则表达式为真 | 类似于 && |
-o | 一个结果为真则表达式为真 | 类似于|| |
! | 对表达式的结果取反 | 逻辑非 |
if判断语句
格式1(单分支结构):
if 条件表达式 (if 条件表达式;then 将if和then 写成一行)
then
执行语句
fi
条件表达式并非一定是test,可以是任何返回值为0的命令
条件表达式成立则执行 执行语句
格式2(双分支结构):
if 条件表达式
then
执行语句1
else
执行语句2
fi
当条件表达式成立 执行语句1 反之执行 执行语句2
格式3(多分支结构):
if 条件表达式1
then
执行语句1
elif 条件表达式2
then
执行语句2
elif 条件表达式3
then
执行语句3
elif 条件表达式N
then
执行语句n
else
执行语句else
fi
当表达1满足后不再执行2后面的循环
在shell脚本中使用bash –x 可以看到shell语句的执行过程
case 条件判断语句:
case esa变量名 in
值1)
执行语句1
;;
值2)
执行语句2
;;
值n)
执行语句n
;;
*)
执行语句*
;;
esac
示例
case 适合于 已知的有序的判断,对结果有预知 if 适合 对结果做无序
针对已知的列表进行循环
语法:
for 变量名 in 循环的对象
do
循环体
done
方法1:直接列出元素
for i in 1 2 3 4 5
do
echo $i
done
方法2:使用大括号
for i in {1..5}
do
echo $i
done
方法3:使用seq
for i in $(seq 1 5)
do
echo $i
done
方法4:使用命令的结果
for i in $(ls *.sh)
do
echo $i
done
方法5:类c风格
for ((i=0;i<=100;i++))
do
echo $i
done
案例:
1. 文件的批量改名 将/tmp/demo 下的文件全部用原来的文件名加上.bak进行备份
2. 批量检测 IP地址的存活情况,检测192.168.10.0/24 这个子网中的所有IP地址,如果IP存活将IP地址保存到ip.txt,且输出ip Ok 例如 192.168.10.1 Ok,反之IP如果不存活,则输出IP Error但不保存到文件
shell 没有多线程 操作的概念 shell 实现并发 利用后台进程实现
在循环体中使用 { }& 将进程丢到后台执行,通过wait刷新同步
#!/bin/bash
ip_addr=192.168.10.
for i in {1..254}
do
{
ping -c 1 -W 1 $ip_addr$i &> /dev/null
if [ $? -eq 0 ];then
echo $ip_addr$i Ok
echo $ip_addr$i is ok >> ip.txt
else
echo $ip_addr$i error
fi
}&
done
wait
while循环结构可以使得用户重复某一系列的操作,直到某一个条件的发生,语法如下
while 测试条件
do
语句块
done
方式1:采取exec读取文件,然后进入while循环处理
exec < file
while read line
do
echo $line
done
方式2:使用cat读取文件,通过管道进入while循环处理
cat fial | while read line
do
echo $line
done
方式3:通过while循环结尾,使用输入重定向
while read line
do
statement1
done < file
until循环语句将循环体重复执行,知道某个条件成立为止,基本语法如下
until expression
do
statement1
statement2
。。。。
done
break:跳出整个循环体
continue:跳出当前这一次循环,然后继续下一次循环
程序执行后会携带一个退出码
0 成功,1-255代表失败
shell程序的退出码存储在系统的变量$?中
{commd}&
wait
在linux系统中,计划任务分为两类
1. 一次性计划任务(在未来只执行一次的计划任务)
2. 周期性计划任务(在未来周期性重复执行的计划任务)
指定某用户是否可以设置计划任务可以在系统黑白名单中进行管理
/etc/at.deny:仅拒绝
/etc/at.allow:仅允许
一次性计划任务:
一次性计划任务使用at进行管理(atd.service),具体如下
因特殊情况没有执行的任务,会在过期后的下一次atd服务启动的时候被立即执行
[root@ycf01 ~]# at -l
1 Sun Mar 5 21:34:00 2023 a root
2 Sun Mar 5 22:12:00 2023 a user1
第一列:计划任务编号
第二列:计划任务执行时间
第三列:计划任务被排入的队列(默认为a,-q指定队列,从a-z nice依次降低,a为2,z为19
第四列:任务的拥有人
at timespec:交互式创建计划任务,ctrl+d结束 如:at 21:33 2023-03-11 回车开始创建任务
at timesec < myscrpt:从脚本输入 该脚本可以没有执行权限,甚至添加完任务后脚本都可以删除
at -c jobnum:查看计划任务的详细信息
at -d jobnum:删除计划任务
at管理的计划任务对应的脚本文件在/var/spool/at中对应的文件
grep -r ping …/
在系统中我们使用crontab管理周期性任务
crontab -e:管理当前用户的计划任务
crontab -l:列出当前用户的计划任务
crontab -r:删除当前用户的所有计划任务
crontab -u:管理其他用户的计划任务
crontab配置文件在/etc/crontab,使用man 5 crontab可查看帮助
五位*参数分别对应分、时、日、月、周
分钟:取值为每个小时下分钟的参数,即0~59
小时:取值为每一天中小时的参数,即0~24
日期:取值为月份中的天数,即1-31
月份:取值为每一年中的月份,即1-12
星期:取值为每个星期的星期几,即0-7(0和7都代表星期日)
commad:代表呀执行的命令或者脚本
*:表示匹配改栏位的每一个时间点,
例:* * * * *表示每个月的每天的每小时的每一分钟执行一次
x-y:表示范围[x-y],例如分钟栏位为[1-5]表示第1到5分钟都执行一次
例:11-13 * * * *表示每一天的每个小时的第11,12,13分执行
x,y:表示列表,也可以包含范围,
例:5,10-13,16 * * * *表示每天每小时的第5、10、11、12、13、16分执行
*/x:表示每个x个时间点就执行一次
例:*/5 * * * *表示每天的每小时每隔5分钟执行一次
综合举例
0 15 * * 1-5 每周一到周五的下午3点整执行
30 8 * * * 6,0 每周六周日的早上8点30执行
0 8-19/2 * * * 每天的8到19点之间没两小时执行一次
0 10 */3 * *每隔3天的10点1分执行
如果拒绝和运行都存在同一个用户,以允许为主
/etc/cron.deny:仅拒绝
/etc/cron.allow:仅允许
crontab -e进入任务编辑
* * * * * source /etc/profile;跟上我们的脚本
基于数据库查找 非常快,但只能查找文件名(文件名全名或者部分),完整的路径会被打印,而不是只有文件名
手动更新数据库执行 updatedb
locate存在排除目录,排除目录下的文件不会被查找到,具体查看/etc/update.conf中prunepaths
常用选项
-i 忽略大小写
-n 查找匹配到的前n条记录
实时搜索目录树
比locate慢但更精确
find是精确查询,必须接上完整文件名(但可以通过命令行通配符拓展)
如果不给定目录,就用当前目录
日过不给定criteria 所有文件都匹配
在找到的文件上可以执行命令
对于被搜索的目录,用户要拥有可读可执行的权限
常用选项
-mindepth 最小搜索目录深度
-maxdepth 最大搜索目录深度
案例:
当前在/opt目录下,已知存在文件及目录如下:/opt/1/2/3/4/5/txt.txt
find /opt/ -name txt.tx 不指定目录深度则全部搜索
find /opt -maxdept 2 -name txt.txt 表示从/opt开始最多再向下搜索2层,即最多搜索到/opt/1/2/
find /opt -mindept2 -maxdept 5 -name txt 表示从/opt开始最少要搜索到2最多搜索到5这一级
-name “文件名称” 支撑glob(7) * ? [] [^]
find /opt -name “ip*” 注意通配符需要用引号,否则如果当前目录下有一个ip开头的文件,这ip*会被识别成这个文件,而不是一个通配符
-iname “文件名称” 不区分大小写
-inum n 按文件inode查找
-links n 按连接数为n的文件
-user username 查找属主为指定用户的文件
-group groupname 查找属组为指定组的文件
-uid userID 查找属主为指定uid的文件
-gid 查找属组为指定gid的文件
-nouser 查找没有属主的文件
-nogroup 查找没有属组的文件
常用选项
与 -a
或 -o
非 -not,!
非P或者
用括号对多个条件取反,
括号需要转移,
括号内开头和结尾需要有空格
括号内用或的关系 列如
\( 条件一 -o 条件二 \)
例:查找属主和属组都不能是root的文件 find -not \( -user root -o group root \)
常用选项
-type f 查找文件类型为普通文件
b 块设备
c 字符文件
d 目录
i 连接文件
p 管道文件
s 套接字文件
常用选项
-size [+|-]#UNIT
常用单位 k M G
例:
find -size 10M 查找大小是10M的文件
find -size -10M 查找小于10M的文件(不包含10M)
find -size +10M 查找大于10M的文件(不包含10M)
find -size +30k -size -50k 查找大于30k小于50k的文件
常用选项
-perm [/] mode
MODE精确匹配权限
/MODE 任何一类(guo)对象权限中只要能满足一位即可,属于或关系
-MODE 每一类都必须同时满足 属于与关系
0 表示不关注
例
find -perm 644 表示严格匹配644权限文件
find -perm /222 表示uo任何一类用户有写入权限即匹配
find -perm -222 表示严格匹配权限,即所有用户都必须有写权限
find -perm -002 表示仅严格匹配other用户的写权限
find -perm -2000 表示查询必须拥有sgid权限的文件
常用选项
已天为单位
-atime 访问时间
-mtime 修改时间
find -mtime 7 在前面第七天被修改过的文件
find -mtime -7 七天内修被改过的文件
find -mitme +7 七天前被修改过的文件
-ctime 文件时间戳
已分钟为单位
-amin 访问时间
-mmin 修改时间
find -mtime 7 在前面第七分钟被修改过的文件
find -mtime -7 七分钟内修被改过的文件
find -mitme +7 七分钟前被修改过的文件
-cmin 文件时间戳
示例:
将配置文件备份到指定目录下并添加.org扩展名
#find . -name “*.conf” -exec cp -r {} /dir/{}.org \;
提示删除存在时间超过3天以上的属组为young的临时文件
#find /tmp -ctime +3 -user young -exec rm -rf {} \;
在家目录中查找可以被其他用户写入的文件,将其w权限取消
#find ~ -perm -002 -exec chmod o-w {} \;
查找/var目录下属主为root且属组为mail的文件
#find /var -user root -group mail -ls
查找/var目录下不属于root lp gdm的所有文件
#find /var !-user root !-user lp !-user gdm
#find /var not \( -user root -o -user lp -o -user gdm \)
查找/var下最近一周内被修改过的文件且属主不能是root
#find /var -mtime -7 !-user root -ls
查找当前系统上没有属主或者属组且最近一周被访问过的文件
#find / -nouser -o -nogroup -a atime -7 -ls
查找/etc目录下大于1M且类型为普通文件的所有文件
#find /etc -size +1M -type f -ls
查找/etc目录下所有用户都没有写权限的文件
#find /etc !-perm /222
查找/etc目录下至少有一类用户没有执行权限的文件
#find /etc !-perm -111 至少有一类用户没有,反过来就是所有用户都有
找出/tmp目录下属组不是root,且文件名不以f开头
#find /tmp !-group root !-name “f*” -ls
#find /tmp not \( -group root -o -name “f*” \) -ls
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具。curl用法:
1、curl url(获取该网址的文本信息)
cur www.baidu.com
2、curl -i url(获取该网址的文本信息以及协议头部信息生产环境建议隐藏)
3、curl-x proxy url(使用代理获取网页文本信息)
curl-x 192.168.100.100:1080 http://www.linux.com
4、保存网页内容:-o
curl -o linux.html http://www.linux.com 将网页内容保存为本地的index.html
5、下载网页文件:-O
curl -O http://www.linux.com/hello.sh 下载文件到当前目录
curl-o /tmp/dodo1jpg http://www.linux.com/dodo1JPG 下载文件并另存为/tmp/dodo1jpg6、
6、通过ftp下载
curl-O -u 用户名:密码 tp://www.linux.com/dodo1.JPG
curl-O ftp://用户名:密码@wwwlinux.com/dodo1JPG
###1.2 wget工具
wget是一个下载文件的工具,支持HTTP,HTTPS和FTP协议,
wget http://link.lab0.cn:1000/test.zip
wget –O /tmp/hello.zip http://link.lab0.cn:1000/test.zip 下载并另存为
wget –b 放到后台下载
wget –P 放到指定的目录下
wget –spider 测试下载但不会真的下载
Linux之间如何进行远程
在windows上 使用远程桌面来管理远程的windows操作系统
在Linux上 使用openssh套件来进行管理 安全加密的套接字通信方式
openssh 是一个C/S架构
openssh-client 客户端 openssh-server 服务端
就是使用client 端 来 连接server 端
ssh 对方机器的用户名@对方机器的IP地址或者是主机名(如果是主机名一定要可以解析为ip)
第一次连接需要接受对方的主机公钥,才可以进行正常的连接
ssh –X 转发X11的显示协议 (GNOME/KDE 图形化的软件都是基于X11的窗口开发)
DISPLAY=:0 显示器
ssh 用户名@ip ‘执行的命令’ 远程执行命令但是不登录到系统
ssh 使用非22 端口 使用 ssh –p 端口号 root@主机名
windows远程Linux
前提条件 windows上必须安装openssh-client 客户端
如果是win10 以下的系统需要使用第三方支持openssh的软件来进行远程
putty crt 免费 xshell 商业收费 ……
bash shell 在windows上安装bash的终端 可以支持 shell的指令
在Windows10 以上的操作系统中cmd和powershell 支持直接ssh
OpenSSH在任何linux的发行版都默认安装(红帽企业版上实施SecureShell或者SSH协议),SSH协议使系统能够以加密和安全的方式进行通行
ssh [user@]hostname|ip 远程登录
ssh root@192.168.195.100
ssh [user@]hostname|ip command 远程执行命令(多条命令用分号隔开,且最好用引号引起来)
ssh root@192.168.195.100 ‘who;cd /opt/;pwd’
ssh -X [user@]hostname|ip 远程调用图形
scp(secure copy) 是一个基于ssh协议在网络之间进行安全传输的命令(在红帽9后将被取消)
用法:
scp 本地的文件/目录 用户名@远程主机:/路径
将本机的文件拷贝到远程
scp 本地文件 root@远程主机:/tmp 将本地的文件拷贝到远程主机的tmp目录
将远程文件的拷贝本机
scp root@192.168.10.70:/tmp/etc.tar.gz /opt 将远程的etc.tar.gz 拷贝到本机的opt
选项
常用选项:
-r 拷贝目录
-p 拷贝文件的同时保留文件的权限和时间戳
-P 指定端口号 (ssh默认使用22作为标准端口,生产环境中不会使用22)
-C 数据量很大的情况下可以提升性能 压缩数据
在windows中使用第三方的传输工具或者ssh来客户端来实现文件传输
rsync是一个实现增量备份的工具
用法
本地用法:rsync [OPTION] src….[DEST]
rsync 选项 源路径 目标路径
rsync -a /etc /tmp
rsync -a /etc/ /tmp
通过ssh访问
Pull:rsync [OPTION…][USER@]HOST:SC….[DEST]
rsync 源路径 用户名@主机:/目标路径 push 将本地的文件上传到远程
Push:rsync [OPTION…] SRC…[USER@]HOST:DEST
rsync 用户名@主机:/源路径 目标路径 pull 将远程的文件下载到本地
rsync -a -e 'ssh -p 2222' root@192.168.10.70:/opt/ /tmp 使用非常规端口同步
PS: 源路径是否以斜杠结尾很重要,如果源路径以斜杠结尾表示同步目录下的文件,如果不以斜杠结尾表示同步目录本身
常用选项
-v:显示rsync过程中详细信息,可以使用-vvvv获取更详细的信息
-n:仅测试传输,而不实际传输,常和-vvvv配合使用查看工作流程
-a:归档模式,表示递归传输并保持稳健属性,等同于“-rtopgDI”
-r:递归到目录中去
-t:保持mtime属性
-o:保持owner属性
-g:保持group属性
-p:保持perms属性(权限,不包括特殊权限)
-D:是“—device --specials”选项的组合,即也拷贝设备文件和特殊文件
-I –links:如果文件是软连接文件,则拷贝软连接本身而非软连接所指向的对象
-z:传输时进行压缩,提高工作效率
--delete 以源为主,向目标同步;目标和源文件中的文件多则珊少则补
--existing 只同步目标端已经存在的文件,如果源文件不在目标端则不同步
--ignore-existing 只同步目标端不存在的文件
--remove-source-files 删除源端已经传输成功的文件(必须在源端执行)
--existing --ignore-existing 文件不会传输会比对文件
--ignore-existing --existing –delete 删除目标不存在的文件
示例
#rsync /etc/fstab /tmp 将/etc/fstab文件拷贝到/tmp
#rsync -r /etc/cron.d /tmp 将/etc/cron.d目录拷贝到/tmp下
#rsync -R -r /etc/cron.d /tmp 将/etc/cron.d目录拷贝到/tmp目录下,且在/tmp下生成etc子目录
#rsync -r -v –existing /tmp/a/ /tmp/b 只更新目标端已存在的文件
#rsync -r -v –ignore-existing /tmp/a/ /tmp/b 更新目标端不存在的文件
#rsync -nrv –existing –ignore-existing –delete 文件不会传输,但会删除接收端多处的文件
#rsync -r -v /etc/cron.d /tmp –delete 将目标多余的文件删除再同步
#rsync -r -v –remove-source-file /tmp/a/file1 /tmp/b/file3/tmp将源端已更新的文件都会被删除
非对称加密的方式来进行认证
密码认证:
秘钥认证(免密登录/ssh互信,也就是登录时不需要验证密码):
PS: 秘钥的权限不能过大(私钥默认权限600,私钥谁生成谁保管),除了生成秘钥的用户,其他任何人包括该用户的拥有组都不能有查看权限
私钥进行加密
ssh 秘钥托管
秘钥托管 临时将 加密的私钥 导入到一个shell中,让其他用户临时使用这个shell,这个shell中的ssh将不会受到私钥密码的限制
ssh-agent bash 开启代理的shell程序
ssh-add 导入私钥的密码
exit 退出shell
ssh的安全配置
ssh的配置文件存在于/etc/ssh 目录中
其中 sshd_config 是服务端的配置文件 ssh_config 客户端配置文件
生成公私钥,默认情况下,私钥和公钥分别保存在~/.ssh/id_rsa和id_rda.pub中
使用ssh-keygen生成
使用ssh-copy-id -i ~/.ssh/id_rsa.pub root@远程主机将公钥会被保存到远程主机的~/.ssh/authorized_keys文件
1、生成私钥的时候避免私钥泄露,可以给私钥设置密码
2、在私钥有密码的情况下,将公钥发送给远程主机
3、访问远程主机,此时与远程主机已免密,但需要输入私钥的密码开启认真代理
sshd服务的配置信息保存在/etc/ssh/sshd_config文件中,部分配置解释如下
学习目标:
1. 密码策略
2. 默认权限
3. 文件特殊的执行权限
4. 目录的特殊权限
5. acl权限
6. sudo提权
用户和组基础回顾
1. 用户名与uid映射
2 用户组和gid映射
3. 用户和组的信息存储在文本文件中
用户信息/etc/passwd
用户组信息/etc/group
用户密码文件/etc/shadow
用户组密码文件/etc/gshaow
监控在线的用户
w/who 查看在线的用户(当前正在使用的用户)
user:登录的用户名
tty:登录后系统分配的终端号(pts表示虚拟终端即远程登录)
from:远程主机名,即从哪儿登录的
login@:什么时候登录的
idle:用户空闲时间,一旦用户执行了任何操作,改计时器会重置
jcpu:和改终端(tty)连接的所有进程占用的时间,不包括过去的后台作业shijia你,但包括当前正在运行的后台作业占用时间
pcpu:当前进程(在what项目中显示的进程)所占用的时间
what:当前正在运行的进程的命令行
last 查看历史登录成功和重启的记录 /var/log/wtmp
lastb 查看登录失败的记录 /var/log/btmp
lastlog 最近登录的日志 (从当前系统启动开始)
/etc/login.defs 设置密码的有效期,用户的家目录,uid…
系统的默认权限(权限掩码)
root的目录的最大权限是:777
root的文件的最大权限是:666
设置用户umask值用umask命令
普通用户的umask值是002
文件的权限664
目录的权限是775
root用户的umask值是022
配置文件/etc/bashrc
修改umask值,编辑~/.bashrc
添加:umask 值
文件 目录
root 644 755 权限严格
普通用户 664 775 权限宽松
Linux使用umask(权限掩码) 来管理系统的默认权限
Linux中文件最大的默认权限为666 是因为去掉x执行
Linux中目录最大的默认权限为777
在Linux中创建的任何一个文件 都不可能具有执行权限
最大权限 - umask = 默认权限
文件:
root 666 022 = 644
普通用户 666 002 = 664
目录:
root 777 022 = 755
普通用户 777 002 = 775
样例:
1、普通用户不能在根目录创建文件夹
2、给mkdir程序添加suid权限
3、重新以user1的身份执行mkdir创建文件夹,可以发现此时可以在根目录创建文件,因为此时虽然看似是user1在执行mkdir,但实则是mkdir的拥有人(root)在执行,而root对根目录有权限,所以可以创建,且最终创建的文件的属主也继承了mkdir的属主
判断文件是否有SUID权限
ls –l 查看拥有人栏位的x栏位,如果x变成s 说明同时有x和s权限,如果是S则相应栏位没有x执行权限仅有suid权限
设置在文件上
示例
1、将chmod命令复制一份并授权sgid
chmod g+s filename
2、利用拷贝的chmod命令已user1身份执行,可以看见新建的test文件夹的属主继承了拷贝命令mkdir的属主信息
判断目录或者文件是否有sgid权限
ls –l 如果拥有组栏位的s为小写 则说明有x和s权限,如果是大写仅有s权限
sbit:
公共目录,在该目录下任何人都可以创建文件,但是每个用户只能管理自己的文件
示例
1、给文件filename赋予sgid权限
chmod o+t filename
已user1的身份在test2中创建目录或者文件,可以发现新文件的属组继承了test2
判断权限
ls –l 如果目录的其他人栏位,有小写的t表示同时有t和x权限,如果是大写T则仅有t权限
用数字来表示特殊权限: suid=4 sgid=2 sbit=1
样例:
1、给test3目录赋予stciky权限,并已user2创建文件
2、已user1身份创建文件,并测试删除user2文件失败
查看与设定
[root@node1 tmp]# getfacl rhce.txt
#file: rhce.txt 文件名
#owner: root 拥有人
#group: root 拥有组
user::rw- 拥有人权限
user:lisi:rw- 额外用户(ACL用户)权限
user:zhangsan:r--
group::r-- 拥有组权限
mask::rw- 文件的权限掩码
other::--- 其他人权限
PS:如果一个文件或者目录设置acl后,该文件的拥有组权限将被mask(文件的权限掩码)接管(因此ls –l 看到的并不是文件拥有组的权限),权限掩码将决定acl的有效权限
setfacl常用选项和语法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。