RHCA红帽
linux简单命令
1. date 日期时间
# CST 中央标准时间
# UTC 世界协调时间
2. cal 查看日历
3. useradd 创建用户
4. id(用户名) 查看用户
5. ls 列出
6. locale -a 所有支持的语言格式
# locale -a|grep US 查找
7. history 历史记录 查看曾经敲过的记录
!+ 历史条目序号 就可以执行指定的记录
!da 执行最近一条关于da开头的命令
CTRL+R 搜索最近的历史记录(推荐使用)
# clt+. 可以调用最后一条历史记录的最有一个参数
!$ 可以调用最后一条历史记录的最有一个参数
8. su- 用户名 切换到指定目录 exit 退出当前用户
9. vim /etc/login.defs 查看可以创建的用户数量
10. touch 创建文件夹或文件
11. rm 删除文件
12. sudo -i 切换root
13. su - 用户名 切换用户
订阅红帽开发者张账号
- 访问https://access.redhat.com/ 注册账号 记得不要挂梯子 用英文界面
- 访问http://developers.redhat.com/ 进入开发者平台 签署协议 即可获取订阅
2019年开始 每个账号订阅可以注册16个操作系统(不可以用来生产) - 下载dvd模式 标准安装介质(iso镜像)
==sadasdasd==
系统安装
分区创建
- 选择标准分区
- /boot 500兆
- /home 1G
- / any
系统登录
图形化 : GNOME
字符界面 : 系统控制台
WEB控制台 :cockpit
启动web控制台:端口号(9090)
system enable --now cockpit.socke 将cockpit程序的套接字设置开机启动
--now 表示当前立即启动
systemctl status cockpit 当前启动
访问控制台是 https://IP地址:9090
系统的命令行和快捷方式体验
在linux中有六个控制台 F1-F6 F1是图形化登录界面 F2是真正的图形化桌面 F3-F6都是文本
切换模式 ctrl+alt+F1-F6
命令行的基础使用
[root@localhost ~]# 命令提示符
[用户名@主机名当前的工作日录]特权提示符
root 表示当前登录的系统用户是root
localhost 表示系统的主机名 类似计算机名字
ps:该地方只会显示主机名部分
#设置主机名
[root@localhost ~]# hostnamectl set-hostname goudan
[root@localhost ~]# su -
[root@goudan ~]#
# 表示特权用户 管理员 例如
[root@goudan ~]#
$ 表示当前用户是普通用户
[user1@goudan root]$
Linux技巧
在linux中 如果执行一条命令 没有任何回显(屏幕上没有任何提示) 百分之九十是成功的
tab键可以帮助用户来补全Liux的指令,补全的对象可以是用户名、文件名、目录
补全的注意点:tab只能补齐关键字的后部分
ps: 生产环境TAB不能不全 需要安装(bash-completion)
linux用户和密码
==系统中有两类用户:超级用户,系统用户,普通用户==
超级用户:root(只有一个)
系统用户:通常指的是服务的使用用户
普通用户:通常指的是系统创建的用户
password 修改当前用户的密码(root里面不受到密码限制)
普通用户修改密码强制限制
password+用户名可以正在root里直接修改密码 不受限制
普通用户修改密码 需要输入旧密码 密码规则还会有限制
su -用户名 切换用户 root可以直接切换用户 用户切换到root需要验证
vim /etc/loginin.defs
更改linux命令行的语言
获取root权限
[root@goudan ~]# vim /etc/locale.conf
LANG="C.UTF-8"
# 更改为
LANG="en_us.uft8"
VIM使用
vim /etc/
i 开始编辑
ESC 退出编辑
:wq 推出并保存
! 强制
w 保存
q 退出
vim 第一次编辑没有文件 会自动创建文件
放行防火墙(mysql)
[root@localhost ~]# firewall-cmd --permanent --add-port=3306/tcp
success
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: cockpit dhcpv6-client ssh
ports: 32768/tcp
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
系统操作
创建用户
[root@localhost ~]# useradd user1 #创建用户
[root@localhost ~]# id user1 #查询用户
uid=1000(user1) gid=1000(user1) groups=1000(user1)
[root@localhost ~]# password user1 #创建密码
进入用户修改
[root@localhost ~]# su - user1
[user1@localhost ~]$ passwd
创建文件
touch +文件名或文件
vim 文件名(需要保存)
命令的语法
命令的组成结构
==一条完整的命令 由三个部分组成==
#[root@goudan ~]# passwd -l user1
#Locking password for user user1.
#passwd: Success
命令 :指的是实现某一个功能
选项 : 完善命令的功能
参数 :被操作的对象
ps : 选项和参数在某些命令中可以被省略 passwd直接回车
命令的格式
命令和选项之间使用空格分隔
命令和参数之间使用空格分隔
选项和参数之间使用空格分隔
选项和选项之间使用空格分隔
参数和参数之间使用空格分隔
项与项之间使用空格分隔
如果需要一次执行多条命令 需要用==; ==执行分割
查询命令功能
whatis 来查询命令的作用(命令是干什么的)
遇到未知命令使用whatis
whatis 使用的是系统的帮助手册来查询(帮助手册就是man手册):只有man中记 录的命令可以查到,并非所有命令都可以查到,大部分都是可以搜到
报错敲 mandb 这个命令 更新man手册生成索引缓存
查询选项的作用
- 查询命令自身携带的帮助来查看选项的作用
--help 查询命令本身的帮助
===长格式一般表示一个完整的含义
短格式一般是长格式的缩写===
并非所有的选项都有长短格式,一般有长格式选项都有短格式
区别:短格式可以通过一个缩写在一起,而长格式不支持缩写
man这本书一共有九章:
第一章:用户的命令(也就是普通用户可以执行的命令)
第二章:系统调用
第三章:系统函数
第四章:系统设备文件
第五章:常用文件的格式
第六章:游戏
第七章:软件包帮助
第八章:超级管理员命令(也就是root可以执行的命令)
第九章:kernel的api
这本书在 /usr/share/man
man的使用技巧:
man 章节 查询的内容可以在指定章节查询内容 e.g.man 1p Is
man-k:搜索指定关键字所在的章节
查询命令:
man
whatis
helo
info
选项和参数的特殊用法
选项和参数部分:
【】中括号表示是一个可选项
<>表示其是一个必选项,且会有变量
大写字母 是个必选项
... 表示是一个列表(指可以接多个参数或选项)
[+FORMAT] 固定格式后面是一个整体
[-u|--utc|--universal] 表示三选一 最多选一个
[MMDDhhmm[[CC]YY][.ss] 需要查询额外的官方手册
例如:date "+%Y%m%d %H:%M:%S"
查询额外的帮助手册 info:
info记录的信息比man更详细(先查man在查info)
查询软件的产品文档
服务器的配置(vpn、vsftpd、httpd、mariadb)
产品文档的释放目录:usr/share/doc
通常会以软件名字在该目录下创建一个同名的目录作为产品文档的存放路径
因此一条完整的Linux帮助查询方式应该为:
对于一条未知的Linux命令查询的顺序:
whatis查询命令的作用
--help查询命令本身的帮助
man查询系统的帮助手册页
info查询更加详细的手册页
/usr/share/doc查询命令所携带的产品文档
[access.redaht.com]
查询红帽的在线知识库
文件系统的结构以及目录作用
文件系统的结构以及目录作用
==文件只能存储在文件系统中,文件系统能够帮助用户存储文件和找到文件对于不同的文件系统;所支持的特性各有差异==
比如NTFS 是windows的默认文件系统
FAT32 文件系统单个文件不超过4G
NTFS 支持4G以上
1.文件系统的目录层次结构
windows是多根多树状的文件系统
在windows中将一个盘符或者是一个分区看成是一个单独的根
每个盘符下的文件和目录,组成树的枝叶,因此为多根多树状
linux 是单根倒树状的文件系统
linux文件路径都是根开始
根在linux目录中只有一个
可以看成是一个倒着的目录树
将其称为单根倒树状的文件系统结构
文件系统的路径都是以==/==作为分隔符
linux: / 文件和目录的命名不区分大小写
windows: 反斜杠 严格规范大小写
/root 根目录下的root目录是root目录的家目录 存储超级管理员信息
/home/username 子目录 存储普通用户的信息文件 以用户名命名
/usr 用户自定义安装的软件 以及系统的支持库怎见存放的位置
/usr/bin 存放用户执行的命令文件(可执行的程序)
/usr/sbin 存放的是超级管理员执行的命令文件(root执行的一些程序)
/usr/local 用户通过编译安装存放的路径(自定义安装 建议放在这里)
/etc 系统的配置目录(网络 用户 )
/var 存放服务的数据和系统日志(包括服务的日志及系统启动,登录,安全日志等)
/tmp 临时目录(通常都是系统的程序的缓存文件,核心重要的的数据不会存放在此 可以删除)
/boot 系统有引导(内核和引导的程序都在 非常重要)
/dev 系统设备目录 (系统中识别的设备都存放在此)
/prco /sys 系统的运行状态不能存放数据(存放的数据再系统重启后自动删除)
文件和目录的命名规则:
a.文件和目录的名称不能超过255个字符
b.文件名的名称可以使用除了/以外的任意字符,都是有效的文件名
c.文件没有后缀名的称谓(在iux中不以文件的后缀来决定文件的类型);文件名就是一个单纯
的名称,除了名称以外没有意义
d.在Liux中不建议使用特殊的字符来作为文件名($*&%)
防止产生歧义;如果非要使用,则需要使用单引号引起来
e.文件名的大小写严格区分
文件的路径
如何找到文件???
文件在系统中有两种查找的方式:
a.绝对路径
以根开头的路径称为绝对路径
绝对路径在任何位置都可以使用
b.相对路径
不以根开头的路径称为相对路径
相对路径只有在特定的位置才可以使用
相对路径:指的是相对于当前目录而言的路径
切换路径
在Linux中使用cd进入到系统中的目录下
cd 路径 进入到该路径下
pwd 查看用户当前所在的路径(位置)
cd . 回退到上一级目录 cd ../../../ 可以同时回退多级目录
cd - 回退到上一次所在的目录
cd ~ 回到root根目录(可以直接敲cd )
cd ~ username 指定用户的家目录
创建文件或者目录
创建文件或目录
使用touch时,后面接一个文件名;如果文件不存在;则创建一个空白的文件;如果文
件存在则更新时间戳
时间戳:
Access Time 文件最后一次被访问的时间 (文件被查看)
Modify Time 文件最后一次被修改的时间 (文件内容被修改)
Change Time 文件最后一次被改变的时间 (文件内容发生变化)
birth 文件创建的时间
RHEL9之前都没有Birth Btime文件创建的时间
时间戳:可以用来备份,或者做安全检测
使用rsync来进行增量或者差异备份
使用aide进行入侵检测只用来检查系统的文件有没有被修改
touch-md2020-01-0210:30:50' abc.txt 手动修改时间戳
使用makdir 创建目录
mkdir 目录名 在当前目录下创建子目录
mkdir -p 目录的结构是在当前目录下递归创建目录
删除文件目录
rm 来删除文件
rm -i 交互式删除文件每一次删除都会询问用户
rm -f 强制删除,也就是不再询问
rm -r 递归删除删除目录
rm -rf 强制递归删除 所以该命令会直接删除系统中的文件;且不容易找 回,因此要慎重执行(在Linux中没有回收站,文件删除了就真删 了)
rm dir 删除目录,只能是空目录
移动文件或者改名
mv 移动文件或者是对文件进行改名
mv 改名 当mv对文件重命名时 要求源文件和木边文件都在同一个路径下
mv 源文件 目标文件
如果目标目录不存在源文件则直接移动
如果目标文件已经存在则覆盖目标文件
如果指定的目标文件不存在,则移动该文件并改名
mv 改名 当mv对文件重命名时 要求源文件和木边文件都在同一个路径下
查看文件和目录内容
ls 查看目录的内容
ls -l 查看文件的详细信息
ls -ld 查看目录的详细信息
ls -R 按照目录的层级结构显示目录中的文件
ls -a 查看所有的文件
每一个目录下都有两个特殊的隐藏文件
. 表示当前日录
.. 表示上一级目录
文件的类型
windows是根据文件的后缀名来识别文件的类型
Liux的文件没有后缀名,所谓的后缀仅仅只是文件的名称
在Linux中通过 file 命令来查看文件的类型:而不是根据文件的后缀名来确定
复制文件
使用copy来复制文件,用到的命令是cp
cp 源文件 目标
如果目标路径是一个目录且,目录下不存在该文件:则直接拷贝
如果目标路径是一个已经存在的文件,则覆盖该文件
如果目标路径是一个不存在的文件,且指定了该文件名,则先复制在改名
cp -r 拷贝目录
cp -f 强制拷贝
cp -p 连同文件的权限一起拷贝
Ps:在文件的管理中,rm、cp、mv命令在操作时需要慎重,因为以上命令 会导致文件被删除或者发生文件覆盖,因此可能导致数据丢失
快捷键
Ctrl-Shift-t 创建标签页
Ctrl-PgUp/PgDn 在标签页之间切换
Alt+[123.] 在标签页之间切换
Ctrl-Shift-c 复制已选内容
Ctrl-Shift-v 粘贴复制的内容
Shift-PgUp/PgDn 在标签页上下滚动
ctrl+I 清屏
用户和用户组
root用户一一>整个系统的超级管理员
超级用户可以有权限管理整个系统,包括系统网络、配置、软件…
在Linux中root并非是系统超级管理员;而是UID为0的用户才是超级管理员,只是root的UD刚好为0
在Linux中每个用户都会被分配一个UID(类似人的身份证)
所以人根据用户名来确定用户,而系统根据UD来确定用户
根据用户与UD的分配关系,我们将用户分为两类:
一类是系统用户:0-999
二类是普通用户:1000-60000
可以根据使用用途来分为两类
一类普通用户:通常指的是这一类用户由使用者来进行创建
二类服务用户:通常由系统进行定义,或者服务来负责创建
用户存在得意义:不同的用户使用不同的账号管理更安全
用户账号的储存位置
/etc/passwd的文件中,在该文件中记录了UID和用户名的映射关系
root:x:0:0:root:/root:/bin/bash
root:用户名:密码占位符;如果有x则用户登录时需要验证密码,如果没有×则不需要验证(x不
是真正的密码,仅仅只是验证密码)
第三位0:指的是用户的UID
第四位0:指的是用户的Gid(指的是组的id)
第五位root:用户的描述信息 可以改(ui登陆的时候显示的信息)
第六位/root: 指的是用户的家目录(用户登录系统后所在的位置)
第七位/bin/bash:指的是用户的登录shell(指的是用户登录操作系统后运行的第一个程序,称为shell程序)
如果shell是/bin/bash表示该用户可以正常登录系统,且与系统交互;如果shell是/sbin/nologin则表示该用户不能登录操作系统,也无法与系统交互;如果用户不能登录操作系统,不代表用户不能使用;该用户可以用作服务的运行用户,专门用来运行和管理服务
组信息
在Liux系统中,每一个用户都必须要有一个组,组的出现是为了更好的管理用户,因此可以将组看成是用户的集合,
如果对一个组分配权限 所有的用户都会继承权限
通过用户组可以简化对用户的管理,在系统中 被分为两类
- 私有(属)组: 在用户创建的时候,一并指定的组称为私有组;每个用户都必须要有一个私有组;且只能有一个私有组
- 公共(附加)组:将用户加入到其他组,则其他组成为该用户附加组,用户可以没有附加组
GID 和组的映射关系在 /etc/group中
root:x:0
- root 表示组名称
- x 表示组的密码占位符(组可以设置密码可以登录)
- 0 表示组的ID也就是GID
- 第四位:表示组内用户
为什么第四位是空的:(因为系统在创建用户时,如果没有指定用户的私有组;则创建用户时系统会以用户的名字作为组名创建一个组,并且将该用户加入到组内,让该组成为用户的私有组,如果一个组是用户的私有组,则组内不会出现该用户)
/etc/passwd 中UID的产生时将passwd文件中最大的UID+1,来生成新的UID
创建用户
useradd创建用户
-u 指定用户的UID
-g 指定用户的私有组
-c 指定用户的描述信息
-G 指定用户的附加组
-d 指定用户的家目录(这个目录最好不要事先创建)
-s 指定用户的shell 可以通过 su -用户 -s /bin/bash 临时给用户登录
临时交互 su - ftp - /bin/bash
修改用户和删除用户
useradd 创建用户
usermod 修改用户
userdel 删除用户
usermod -l 修改登录名
usermod -u 修改用户的UID
usermod -g 修改GID(私有组)
usermod -G 修改用户的附加组
usermod -c "描述" 用户名 修改用户的描述信息
usermod -md 修改用户的家目录(-m 是移动 -d 指定)
usermod -s /bin/bash 用户名 修改登录shell
删除用户
userdel 用户名 仅仅只是在/etc/passwd和/etc/group中删除了,没有删除用户的文件(该 用户的文件的是用户创建时生成的文件,而并非用户在系统创建的数据文件)
创建用户一并被创建:
/etc/passwd udi和用户名映射关系
/etc/group GID和组映射关系
/etc/shadow 用户密码
/etc/gshadow 组密码
/home 家目录
/var/spool/mail 邮箱
userdel -r 彻底删除(-r可以删家目录和邮箱)
创建组
groupadd 创建组
groupmod 修改组的名字
groupdel 删除组(私有组不能删 附加能删)
groupadd -d 指定组的GID
groupmod -n 修改组名字
groupmod -g 修改组的GID
删除组
groupdel
如果删除的组,是某个用户的私有组,则该组不能被删除
如果删除的组,是某个用户的附加组,则该组可以删除
设置组密码
gpasswd 组
newgrp 切换到组
组设置管理员
gpasswd -A 用户名 组名 (设置管理员权限)
gpasswd -a 用户名 组名 (向组内添加成员)
gpasswd -d 用户名 组名 (从组中删除成员)
root对组管理 groupmems -g 用户组 -a 向组内添加用户
groupmems -g 用户组 -d 删除组
groupmems -g 用户组 -p 删除组内全部用户
(如果一个用户是这个组的管理员用户,那么该用户可以不在个组内,依然可以管理这个组)
查看组管理员和密码 /etc/gshadow
查看用户和密码 /etc/shadow
root:$6Si168d5rQlz7MRkM7SDsr2uCExXK/9jaqAkTV2q6YOklsALbhBWzOJICXu.7B62gn5afGrL5SBIOL5tKYOJoeonV3rddU6/YzDVcXNv/:19609:0:99999:7:2:20090:
root:表示用户名
565:表示用户的密码(其中6$两个$之间的数字代表的是加密的类型)S6表示使用hash512加密$1表示使用md5加密S5表示使用hash256加密!表示该用户从来没有设置过密码Linux锁定用户,就是利用密码锁定用户
19609:表示上一次修改密码的时间(指的是从1970-01-01经过了19609天是那一年那一月那一日)date+%f-d"1970-01-0119609days"
0:表示的是密码的最短有效期,也就是密码最少可以用几天(如果为0则没有限制)
99999:表示的是密码的最长有效期(如果为99999 一直有效)
7:表示密码到期前的警告天数,到期的前7天提示
2:表示的是 账号的锁定天数 如果密码到期后两天内没有改就会锁定
20090:账号的失效时间 这一天账号不可用 从1970-1-1经过了20090天数后的日期
用户的策略文件: /etc/login.defs
用户名:rhce09
密码:hello
UID:1090
GlD:1099
私有组的名称:redhat
登录的shell:/bin/bash
openssl passwd -6 rhdhat 生成redhat的密文
/etc/passwd
/etc/group
/etc/shadow
/etc/gshadow
/var/spool/mail/
/home/
文件的权限管理
1.文件权限的意义:
在系统中每一个文件都有UID和GID,通过文件的UID和GID将决定文件的访问权限
也就是如果一个进程来访问某个文件
如果进程的UID和文件的UID一致,则匹配到文件的UID访问权限,
如果进程的GID和文件的GID一致,则匹配文件的GID访问权限,
如果进程的UID和GD都无法匹配文件,则使用其他人身份访问该文件
权限存在的意义:
如果文件没有权限进行控制,则任意的用户都可以访问文件;那么不管是oot用户还是普通用户对于系统来看,文件就是透明的;因为所有人都可以使用文件,在业务的场景下,如果业务的数据可以被所有人查看和修改,则对于系统而言是不安全的
文件权限存在的意义是为了保证系统的访问更加安全,系统通过文件的权限控制用户对系统的访问
文件的权限管理解释:
每一个文件都有一个UID和GID,那么文件的UID将其称为文件的拥有人(所有者)(user)
文件的GID将其称为拥有组(group);文件还有一类访问权限,如果访问该文件的对象,无法匹配到文件的拥有人或者是拥有组,则这一类对象被称为其他人{other}
再linux系统中进程和程序也有UID和GID;所以系统中是根据GID和UID来判断访问的权限,而不是根据用户名
优先级:
如果一个进程去访问一个文件,访问路径是:
如果一个进程被用户运行,则该进程继承用户的UID和GID
此时该进程去访问文件,将会以用户的UID和GID进行访问;
如果UID匹配上了文件的UID,则适用于UID的权限
如果GID匹配上了文件的GID,则适用于GID的权限
如果GID和GID都没匹配成功,则使用其他人权限
查看权限
ls -l 查看文件的详细信息包括文件的权限:
-rw-r--r--. 1 root root 0 12月 5 21:28 1.txt
第一栏 - 表示普通文件 D表示是目录 I是字符
第二栏 rw- 表示拥有人的权限
第三栏 r-- 表示拥有组的权限
第四栏 r-- 表示其他人的权限
第五栏 . 表示文件受selinux的保护
第六栏 1 表示用户的硬链接数 表示一次删除
第七栏 root 表示用户的UID文件的拥有人
第八栏 root 表示用户的GID文件的拥有组
第九栏 0 表示文件的大小
第十栏 12月5 21:28 表示最后一次被修改的时间
第十一栏 1.txt 文件名
ls -ld 查看目录的详细信息包括目录的权限
不管是拥有人还是拥有组,还是其他人,对于文件的管理都由三类权限
R W X
读 写 执行
RWX对文件和目录的意义
R W X
查看文件内容 修改文件内容 可被执行
查看目录下和子目录 修改目录内容 可以进入目录
文件权限的修改
字符的方式修改
UID:简称u
GID:简称g
other:简称o
直接赋权 chomd u=rwx,g=rwx,o=rwx file/dir
chomd ugo=rwx
加减赋权 chomd u+rwx,g+rwx,o+rwx file/dir
chomd u-w,g-x,o-r file/dir
chomd ugo+w file/dir (ugo=all)
chomd a+rwx file/dir
chomd +rx file/dir 给UGO加rx权限
chomd +w file/dir 紧紧给U加权限
注意在生产环境下,建议使用加减赋权,不要使用等于号赋权
因为,等于号赋权会发生权限覆盖,而加减赋权是在原来的基础上进行赋权
计算时间
在linux系统中 默认是1970-01-01开始算
date +%s -d '2023-10-01days' 算出距1970-01-01经过多少秒
1733468169
bc 1696176000/86400=19631
经过19631天
递归批量修改文件权限
修改文件权限
chmod -r 777 /tmp/test 批量修改目录和目录下的权限
修改文件的拥有人和组
chown zhangsan abc.txt 修改 abc.txt 文件的拥有人为 zhangsan
chgrp it bc.txt 修改 abc.txt 文件的拥有组为it
chown lisi:itgroup abc.txt 直接指定拥有人和拥有组
chown :ctgroup abc.txt 直接修改拥有组
同时 chgrp 和 chown 都支持-R递归修改目录以及目录下的文件和子目录的拥有人和拥有组
文件的拥有人:文件的拥有人可以修改文件的权限
普通用户可以修改自己文件的权限(仅可以改权限),而root用户可以修改
所有文件的权限
普通用户不能修改文件的拥有人,文件的拥有人只有两种来源,第一种是该文件是谁创建,那么谁就是拥有人;第二种是root用户指定文件的拥有人(也就是只有root才可以执行 chown)
文件的拥有组:
修改文件的拥有组,则该用户,必须是该组的成员,组可以是附加组或者私
有组
IO管道
io:在LINUX操作系统中指的是输入和输出io(input输入、output输出)
在Linux中的输入输出来源???
键盘称为标准的输入设备一一>stdin指的就是通过键盘和系统交互(读取)
显示器称为标准的输出设备一>stdout指的是通过显示器输出(写入)
标准的正确输出 >
标准的错误输出 2>
输出重定向
IO需要重定向:
所谓的重定向指的是将原本通过键盘或者是通过显示器输入输出的方式,交给文
件来进行处理
输出重定向(让原本应该输出在显示器上内容重定向):
> 标准的正确输出重定向
2 > 标准的错误输出重定向
& > 全部输出重定向(包含正确和错误输出)
---------------------------------------------
> 会覆盖
>> 表示追加 不会覆盖 以上同理
写脚本的时候,注意用户的输出信息:
系统中的特殊设备: /dev/zero 零字符(字节)将一个文件用零填满
/dev/null 空字符设备(垃圾桶,空文件,黑洞文件)
在编写shel脚本时,会将脚本中命令的错误输出信息或者是不想让用户看到的输出信息
丢到null文件中去(注意:所有丢到null这个文件中的内容是永久丢失的,是无法找回的)
#!/bin/bash
useradd user00 &> /dev/null
id user00 &> /dev/null && echo user ok
输入重定向
输入重定向(将原本应该通过键盘输入的内容重定向为通过文件来进行读取):
passwd user00 > pass.txt 将用户的密码提前写入到文件,通过文件改密码
passwd -stdin root 通过stdin 设备传输给passwd作为输入
“|” 管道符:
cornmand1 | command2 | command3
管道的作用:管道是命令的链接符号,管道将上一条命令的输出作为下一条命令的输入(一般是参数)
管道的约束:正确的输入才可以 错误的输入不行
|tee 三通管道:
使用场景:一般用在故障诊断,将故障显示在屏幕上时同时记录到文件,或
者在日志中使用时,输出到文件和屏幕(输出的文件写入道文件哩)
Is -1 /etc | less 输出ect文件下的目录文件 一页一页展示
cat >> /opt/1.txt << EOF (写入文件)(EDF可以换 以什么开头就以什么结尾)
VIM编辑器
增强型特性:
高亮(语法、搜索高亮)
shell,yaml,json 都作为默认编辑
模式切换:
命令模式切换到编辑模式:
I i O o A a六个键三组
i:在光标的左边插入
I:在光标的行首插入
o:在光标的下方插入一行
O:在光标的上方插入一行
a:在光标的右边插入
A:在光标的行尾插入
linux字符处理
1 . 文本提取工具
car 将一个文件的全部内容打印到标准输出
car合并一个文件
cat 1.txt 2.txt > 3.txt
cat 可以查看文本特殊字符
cat -A 可以看不可见的字符 (空格)
more \less 分页查看文件
more 就是查看文本的工具,而less还可以编辑 通过v切换
2 选取文本工具
head 来选择文本开头指定的行
head passwd 查看文件的前10行内容
head -n 15 或者 head -15 查看文本开头的前15行
head -n +15 查看开头15行
head -n -15 除了文本末尾的15行之外全部显示
tail 选择文本指定行
tail passwd 查看文本末尾的后十行
tail -n -15或者 tail -15都表示查看文本的后十五行内容
tail -n +15表示从文本的十五行开始一直到文本的结尾
tail -f 实时查看文件的内容变化
tail -f /vat/log/message(通常查看日志)
过滤文件的15-20行
head 取最大 tail取最大-最小+1
3 关键字过滤文本
grep通过关键字过滤文本内容
grep的过滤以行为单位,只要这一行中包含该关键字,则grep选取这一行,而不是单独选中这一个关键字
grep root/etc/passwd 在passwd文 件中过滤包含root内容的行
支持的常用选项:
-i 忽略关键字大小写
-n 关键字的行号
-o 文件所有的关键字出现几次
-oc 出现多少行(c就是行数)
-v 对关键字取反,除了关键字 其他都显示
-q 静默模式 不在屏幕上输出内容
-AX 显示过滤关键字的后x行内容
-BX 显示过滤关键字的前x行内容
-CX 显示过滤关键字的前后x行内容
-r 根据文件内容查找文件
-l 紧列出根据关键字查找到的文件路径 通常和-r连用
--color=auto 给过滤关键字高亮 红帽里面已经默认了
正则表达式:
在passwd文件中过滤root用户,以root作为关键字,仅过滤root用户
扩展正则
文本处理
1.文本转换 tr用来做字符转换 echo Yes | tr A-Z a-z
大写转小写tr a-zA-Z
数字转字母tr 0-3 a-d
tr-d 用来在标准输出上删除指定的字符
tr -d zhangsan < user.txt 把张三剔除
2.留处理器 (流编辑器 stream edit)
sed 流编辑工具
shell基础
shell是人机交互的接口
shell 脚本解释器 主流的linux内核
内核:1.识别并管理硬件
2.用来调度硬件资源给到软件使用
内核执行的指令,来自于shell程序的翻译,shell程序将人提供的指令翻译成内核的语言,交给内核解释执行
shell种类: ksh / csh / bash shell
1.历史记录 history
history 历史记录 保存在家目录下 .bash_history
history -w 把内存中的历史纪录写入到文件中保存
history -c 清楚内存中的历史记录
彻底清除 echo > .bash_history 清空该文件
2.管道和TAB键
bash-completion 给终端提供tab能力
变量
变量的引用:
echo $变量名 输出变量
echo ${变量名}
变量的区别:
本地变量和环境变量不同
本地变量只能在当前shell有效,环境变量可以在当前shell及shell有效
取消变量:
unset 变量名 不要$
系统关键变量:
PATH变量存储的是系统中可执行文件的路径,也就是应用 程序必须
在该目录才可以作为命令执行
PS1 提示符变量
HOME 用户的家目录变量
查询系统中的变量:
set查询本地变量
env查询环境变量
别名
别名: alias 别名='要执行的命令'
查看别名 alias
取消别名 unalias
登录shell : 图形化登录
字符界面登录 (login 登录指令)
切换用户 su - 登录到该用户
非登录shell
打开虚拟终端控制台
执行脚本
su (仅切换到这个用户的身份 而不是已该用户登录操作系统)
区别
登录shell指的是该用户登录到了操作系统,而非登录shell,.指的是该用
户得到shell的操作环境
登录shell触发的文件:
/etc/bashrc 全局 所有用户生效
/etc/profile 全局 所有用户生效
~username/.bashrc 用户文件
~username/.bash_profile 用户文件
非登录shell触发的文件:
/etc/bashrc
~username/.bashrc
定义方式: /etc/bashrc将变量或者别名定义在该文件中,则系统所有用户生效无
论是登录shell还是非登录shell均有效
~/.bashrc 会对该用户的登录shell和非登录shell均生效
shell文件的加载方式:
先加载全局的文件 再加载用户的文件
登出shell .bash_logout
进程管理
进程指的是应用程序的运行状态,通常将其称为程序的运行实例,将一个二进制文件运行起
来就会得到一个进程
进程的权限来自于运行它的用户的权限,也就是进程会继承用户的权限
查看进程 ps 默认是当前终端的信息
pid 进程id
tty 登录方式(tty F1-F6 : 如果是pts 伪终端登录)?内核发起
time 进程的持续时间
cmd 命令
ps -aux 查看系统的所有进程 a所有终端信息 u进程的运行用户 x不属于任何
ps -ef 等同aux 更详细
ps -axo pid,%cpu,%mem,command,user,group,state --sort=-%mem|head
查看使用率最高的命令
top 查看实时情况
pgrep 根据指定信息过滤进程 pgrep vim -d -
pidof 根据进程名称过滤进程
pdiof 比 pgrep 更精确
常用信号 kill -15 关闭程序
kill -1 重新读取文件
kill -9 强制杀死(生产环境不要用)
发送信号 kill 信号 pid kill -9 跟上pid
killall vim (进程) killall vim
进程的优先级: 优先级高低在系统绝对繁忙时 谁被优先分配到CPU资源
系统中有两个优先级 一个PR动态优先级(由内核调整)
一个ni静态优先级 (由用户调整)
ni的取值范围 -20~19 值越低优先级越高(只有root用户可以降低nice值)
调整nice值
程序启动指定nice值
调整一个已经正在启动的nice值
jobs 显示图形化运行的程序 可以 kill -19 %1 暂停第一个进程
bg %1 在后台恢复
fg %1 再前台恢复
网络配置
网卡还原成eth0:
vim /etc/default/grub
rhgb 前面增加 net.ifname=0 biosdevname=0
重新生成引导菜单 grub2-mkconfig -o /boot/grub2/grub.cfg 必须重启
查看网络配置
- ifconfig 查看网卡一个地址
- ip addr show 查看网卡所有地址 ip a
- ip root show / root -n 查看网关.掩码
- dns 查看是 cat /etc/resolv.conf (网络管理服务器成生,临时有效 )
网络管理
ifcofig 来自软件包 net-tools
ifconfig ens33 down
ifconfig ens33 up
ifconfig ens33 ip地址/掩码 (临时有效)
ip
ip link show 查看所有设备
ip link set ens33 up/down 设置网卡激活启用
ip addr add ip地址/掩码 dev ens33 添加地址(临时有效)
ip addr del ip地址/掩码 dev ens33 删除地址(临时有效)
ip route show 查看路由表
ip route show default ip地址 dev ens33 写默认路由
route add -host 地址 gw 网关 dev ens33 置顶主机的路由
route add -net 地址/掩码 gw 网关 dev ens33 置顶子网路由
NetworkManager
在RHEL中有两种网络管理工具:network-script、NetworkManager
在rhel7以前使用network-script
在rhel7开始用NetworkManager(vim icfg-eth0,nmcli 来配置网络)
在rhel8中,network-script默认不安装,但是在rhel8中依然保留了network-
script的安装包,只是默认不安装。
在rhel9中,network-script己经被删除(也就是rhel9没有network-script的软
件包),因此rhel9只能使用NetworkManage
RHEL9中将网卡的配置文件,放置在/etc/NetworkManager/system-connection目
录下,以网卡名+nmconnection作为配置文件的文件名;比如ensl60.nmconnection
同时/etc/sysconfig/network--scripts/依然保留,如果在NetworkManager的目录
下找不到配置文件,则继续使用原路径
NetworkManager提供两种方式配置网络:
1.图形化配置 nmtui
2.命令行配置 nmcli
nmcil:管理设备(命令支持缩写)
nmcli device status 查看设备状态
nmcli device disconnect ens33 断开设备
nmcli device connect ens33 激活设备
nmcli connection show
nmcli connection add type ethernet ifname ens33 con-name test-
ens33 ipv4.method manual ipv4.addresses 192.168.10.80/24 ipv4.gateway 192.168.10.2 ipv4.dns 202.103.44.150 autoconnect yes
(配置网络)
connection 置顶nmcli对链接进行配置
add 添加网络
type 网络类型
ifname 网卡设备
con-name 链接配置文件的名字
ipv4.method:ip 地址获取方式
ipv4.address ip地址
ipv4.getway 网关
ipv4.dns dns 地址
autoconnect 开机自动激活链接 开机就有网络
nmcli connection modify test-ens160 ipv4.methodd manual ipv4.a
ddresses192.168.10.100/24 修改已经存在的链接
nmcli connection up ens33 修改之后启动生效
nmcli connection del ens33 删除链接
nmcli device connect ens33 没有链接配置的文件直接启动网卡
nmcli connection modify ens33 -/+ ipv4.address 来添加删除ip
修改主机名:
- hostname 主机名 临时有效
- hostnamectl set-hostname 主机名 永久有效
- hostnamectl 查看系统版本
磁盘分区
分区工具:
parted 不要用 --立即生效 (可以写脚本)
mklabel 创建分区表
mkpart 创建分区
rm 删除
fdisk 通常分mbr的分区,也可以分gpt
-l 查看磁盘分区情况
gdisk 只创建gpt的分区表