Redhat Linux初体验(1)
这三周都被拐卖到成都培训RHCE,讲真,还是当学生好啊哈哈哈把学习笔记搬上来,关键时刻能做个速查~
献上第一周的笔记。
2018-07-16
Linux历史
- Multics的产生
- Unix的产生
- BSD与GUN等开源软件的发展
- Linux的发展与发行现状
教学环境简介
- 安装vnc以及使用vnc远程教师机器
- 红帽虚拟机使用管理:
rht-vmctl [start|view|reset|stop]
- 红帽虚拟机配置管理:
virt-manager
- 通过伪终端连接虚拟机:
ssh student@desktop4
2018-07-17
常用基础命令
- 修改密码
passwd
的策略; - 使用
date
修改、显示时间命令,以及命令行转义; - 文件查看相关命令:
file
、wc
、head
、tail
,文本编辑器nano
; - 使用
history
操作命令历史记录,使用!
或^r
快速逆向查找历史命令,使用esc+.
或!$
复制上条命令的参数,使用!!
复现上一条命令; - 命令行光标操作:光标移至行首
^a
、光标移至行尾^e
、删除光标之前^u
、删除光标之后^k
、删除前一个参数^w
、^l
清屏、^Y
恢复^u
或^w
擦除的命令、^\
撤销操作;
文件操作
- 文件系统树形结构:
/, /bin, /boot, /dev, /etc, /etc/opt, /etc/sgml, /etc/X11, /home, /lib, /media, /mnt, /opt, /proc, /root, /sbin, /srv, /tmp, /usr, /var
的功能介绍; - 文件系统路径,区分相对路径、绝对路径,使用
cd -
切换到上一次使用的路径下 - 新建文件:
touch
的本意是用来更新文件的时间戳,也用来新建文件;使用mkdir -p
创建一系列路径;ls -R
递归现实目录内容,类似tree
; - 删除文件:
rmdir
不常用,只能删除非空目录;rm
常用,可删除文件或目录,-r
选项可递归删除 - 修改文件:使用
cp
复制文件,-r
递归复制,*
通配复制(不可用于子目录);使用mv
移动文件,mv
可用于重命名; - 文件通配符:
*
匹配任意字符任意长度;?
匹配任意字符1长度;[]
匹配指定字符1长度;- 使用
touch file{start..stop..step}
生成多个文件,类似python的range
; ll -d ?????
匹配5位长度的文件名,ll -d [abc]?????
匹配abc开头后接5位的文件名,ll -d *[0-9]*
匹配包含数字的文件名;ll [[::upper:]]*
匹配大写字母开头的所有文件,具体匹配参见man 7 glob
(不建议使用[A-Z]
,在不同的字符集中A-Z之间的编码字符不一样);字符集中^
或!
(如[!0-9]
)表示取反;
2018-07-18
获取帮助
- Unix帮助:使用
man man
查看man帮助格式(包括8个必选1个可选章节),使用man 章节数 命令
查看相应命令的详细帮助信息,使用man -k fd
搜索所有fd相关帮助 - 使用
ls --help
、ls --info
或help ls
、info ls
获取简要操作指南, - 在man中使用
-N CR
命令显示行号 - GNU帮助:使用
info info
查看info帮助各式,pinfo
查看易读的info格式,若命令未提供info帮助,则info会将man帮助显示出来 - man手册位于
/usr/share/man
,info手册位于/usr/share/info
,第三方软件的帮助位于/usr/share/doc
,使用rpm -ql httpd | grep /usr/share
查看第三方软件httpd的帮助文件安装情况
文本文件
cat
可以连接输出多个文件,head
或tail
则会将文件分开输出,cat -A
输出换行/制表等控制字符;- 使用
more、less
分屏显示文件,less
功能更强大,man
的输出默认调用less
; - 重定向,
man stdin
查看;/dev
中的stdin/out/err
均指向fd
(文件描述符),ll -i std*
发现输出最前多了一列index node,即文件索引节点,使用tty
查看当前终端的文件描述符,echo hello1 1> /dev/pts/2
可以在另一个终端上看到输出; - 输入重定向:
tr '[:lower:]' '[:upper:]' 0<.bashrc
,将.bashrc
的内容重定向到stdin
传给tr
进行大小写转换 - 输出重定向:
>
覆盖,>>
追加 - 管道
|
,连接前一个命令的stdout
到后一个命令的stdin
;
vim
^u
向上^d
向下,ZZ
保存退出,ZQ
不保存退出;- 插入模式、命令模式、可视模式(仅用于选择);
v
按字符选择、V
按行选择、^v
按块选择;- 字符级移动
hjkl
,10j
向后移动10行;0
绝对行首,^
非空行首,$
(行尾); - 句级移动:
(
前一句,)
后一句; - 段级移动:
{
前一段,}
后一段; - 单词级移动:
w
下一个词首),e
下一个词尾,b
前一个词首; - 使用
#
查找相同单词,可以使用n
N
在该单词的搜索结果中跳转; d
删除,d10w
删除后十个单词,d10l
删除后十个字符;c
删除并插入;dd
删除行;S
删除行并插入;x
删除字符;s
删除字符并插入;y
复制;p
粘贴光标后,P
粘贴光标前;- 插入模式:
i
(插入光标前)a
(插入光标后)I
(行首插入)A
(行尾插入)o
(下行插入)O
(上行插入)R
(改写); .
重复上一条命令;- 命令行模式,
set all
查看所有命令,直接输数字回车移动到相应行(10CR
),命令10G
也可以; - 命令行模式:
10,15d
(删除10-15行),.,+3d
删除1+3行(.
光标所在行,\$
最后一行,%
所有行); - 命令行模式:
10,20s#nologin#login#
(10到20行第一个nologin换login);10,20s#n#N#gc
(10到20行n换N,询问模式);10,20s#n#A#gic
(10到20行n换A忽略大小写,询问模式); - 命令行模式:
r abc.txt
(将abc.txt追加到光布行后面)o abc.txt
(打开abc.txt); - 命令行模式:
!
(执行外部命令),r !hostname
(将hostname的输出读入到光标下一行); - 命令行模式:
first
prev
next
last
在多个打开的文件中切换; u
撤销,^r
重复;- 多文件打开
vim -o a b c d
多文件水平分屏,-O
竖直分屏,使用^w
在多屏间切换,命令行下split
为水平分屏,hsplit
为竖直分屏;
在root用户下,vi
与vim
是两个程序,vim
更强大,语法高亮只有在特定位置自动渲染
2018-07-19
本地用户
- uid 0 分配给root用户;uid 1-999 分配给应用程序,通常不用来登录计算机,为内置账号;uid > 1000 分配给普通用户
/etc/passwd
存储用户配置;- 使用
useradd user1
添加用户; - 使用
id user1
现实uid(用户id)/gid(私有组)/group(附加组)信息; - 使用
useradd -u 8888 user2
指定UID;使用useradd -d
指定home目录,使用useradd -s
指定shell; - 使用
passwd user1
设置密码; - 使用
su - user1
切换用户; - 可以分配的shell在
/etc/shells
中;
- 使用
- 普通用户均有home目录和登录程序(shell),
- 查看
tail -n 2 /etc/{passwd,shadow,group,gshadow}
:- passwd保存用户信息;
- shadow保存用户密码信息;
- group保存组信息,新建用户时,若不指定,系统将用户分配至同名组,该组为私有组,gid分配方式与uid相同;微软使用公有组机制,比如Windows中新建用户统一加入users组;红帽使用私有组,部分Linux也使用公有组;用户除了自己的私有组,可以使用
groupadd group1
新建组,使用usermod -aG group1 user1
给user1添加附加组group1(a
写在前面,表示追加,若不写则会覆盖原来的附加组,G
是要加参数的选项,放在后面) - gshadow保存组密码信息;
- 管理用户(必须使用root权限):
- 图形管理界面
sudo system-config-users
- 命令行添加用户
useradd
,使用passwd
设置密码; - 命令行修改用户
usermod
,修改home目录时需使用-md
(m
移动home目录,放在d
之前),home目录下默认文件均从/etc/skel
复制而来;-L
锁定用户,-U
解锁用户; - 命令行删除用户
userdel
,-r
表示删除home目录 sudo
的权限写在/etc/sudoer
,visudo
是专门用于修改/etc/sudoer
的程序,使用man 5 sudoers
查看具体格式;chage -l user1
查看用户密码相关易读的时间信息(上次密码更改日期、密码过期日期、账户过期时间等);使用chage
修改这些信息;/etc/login.defs
为新建用户时的默认配置,可以修改这些配置以更改新建用户时的行为;
- 图形管理界面
- 管理组(必须使用root权限):
groupadd -r
为创建系统内置组;groupmems
也可以用来给用户添加组,如使用-a
;man 5 passwd
和man 5 shadow
查看用户密码信息,man 3 crypt
查看加密算法;man 5 group
和ma 5 shadow
查看组密码信息;
文件权限
- 文件被访问时,首先比对文件权限与用户权限,如果不符则比对用户属组权限,如果不符则比对其他用户权限;
- 文件权限:
r
读w
写(修改删除或在目录中增删改文件)x
执行(执行或进入目录):- 第一位,文件类型;
- 234位:文件属主具有的权限;
- 567位:文件属组具有的权限;
- 89A位:文件属主之外的其他用户具有的权限;
- 比如root用户
vim /etc/passwd
为读写,普通用户显示只读(top
中L
可以搜索进程);
- 修改权限,
ll -d /test
进查看目录而不进入目录:- 使用
chmod a= /test
(a
代表all)取消test目录的所有权限,root用户依然可以进入,权限仅对root用户无效,文件属主对文件永远具有写权限(即使显示readonly); - 使用
chmod o=x /test
(o
代表other)给其他用户赋予进入目录的权限; - 使用
chmod o-x /test
取消其他用户的进入权限; - 使用
chmod o=r /test
赋予其他用户列出目录中文件的权限,如果仅有r而没有x则只能读出文件名,其他属性均无法访问,因此应再使用chmod o+x /test
; - 使用
chmod o=wx /test
赋予其他用户; chmod
中ugo
代表修改文件属主、文件属组、属主外其他用户的权限,a
表示修改ugo
全部;+-=
表示增、删、赋值,各种组合可以使用,
分割,如ugo=r,u+w
(应注意赋值覆盖增删);
- 使用
- 修改所属关系:
- 使用
chown user1:user1 file
修改文件所属用户及所属用户属组, - 使用
-R
修改目录下所有文件的权限;
- 使用
umask
的修改涉及到交互式登录与非交互登录脚本的加载,通常修改umask只能在本次会话中生效,若要长期生效,需要修改根据登录脚本加载顺序来修改各登录脚本中的umask的赋值:- 登录脚本在
/etc/profile
(系统交互式初始化脚本)、~/.bash_profile
(个人交互式初始化脚本)、/etc/bashrc
(系统非交互式登录脚本)、~/.bashrc
(个人非交互式初始化脚本); - 关于脚本启动顺序,详情参见
man bash
,搜索profile
,INVOCATION章节:
- 登录脚本在
- 可执行文件的特殊权限:
- SUID:设置后按照文件拥有者的权限运行(文件的普通权限是按照文件执行者的权限运行,比如user1 运行
touch test
,则ll test
显示归属user1 user1
);s权限意味着原来为x,现在为s+x,S权限意味着原来为s;运行chmod u+s touch
后再使用touch test
,则ll test
归属显示root user1
,最常见的属主具有s权限的就是passwd
; - SGID:再运行
chmod g+s touch
后再使用touch test
,则ll test
归属显示root root
,常为协作类可执行程序设置;
- SUID:设置后按照文件拥有者的权限运行(文件的普通权限是按照文件执行者的权限运行,比如user1 运行
- 目录的特殊权限:
- SGID:使用
chmod g+s test
,使得目录具有s权限后,在目录中新建的任何文件,其属组均会被设置为该目录的属组,常用于协作目录;(目录的SUID(u+s
)是没有任何效果的) - t权限:针对上一条,设置了
g+s
的目录,就算不是文件拥有者,也可以删除组内其他人的文件,而对目录使用chmod o+t test
后,仅有文件拥有者才能删除该文件; - t权限仅对目录有效;
- umask的第一位即为特殊权限:
4
为SUIDu+s
、2
为SGIDg+s
、1
为t权限;
- SGID:使用
2018-07-20
进程
启动顺序:
1
2
3
4
5
6
7
8poweron->
motherboard cmos(bios|uefi)->
(F11|F12)sda(mbr|gpt)->
grub2->
vmliuz(kernel)->
systemd->
...GUI(gnome-terminal|gnome-gdm|kde|xfce)...或CLI(agetty)...或network(sshd)
grub2的配置文件在/boot/grub2/grub.cfg通过
pstree
可以查看进程树形结构(-p
可以对应进程号),反映了启动顺序(ps -up 进程号
现实进程详情);
- 通常的,由用户登录后发起的进程成为作业(jobs),而直接由systemd启动的进程成为服务(service),使用
ps j
查看所有作业,在终端执行的命令会随着终端的关闭而结束;比如在使用ssh
连接的终端上执行dd if=/dev/zero of=/dev/null
复制大文件,如果网络不稳定,sshd会认为远端断开连接,而结束本终端下的所有进程;
- 如果在进程运行时使用
^z
挂起进程(^c
终止进程),使用jobs
可以查看当前终端下的作业进程及其作业号(jobs -l
可显示进程号,作业号是bash分配的,而进程号是系统分配的),使用bg
可以在后台继续该进程,使用fg
可以将后台程序移至前台,使用fg
bg
后接作业号可以选择要操作的对象。
- 使用
dd if=/dev/zero of=/dev/null&
运行程序将直接后台运行,终端内执行的进程通常会在终端被关闭时结束(按照树形结构),使用nohup dd if=/dev/zero of=/dev/null&
将转为终端无关进程,使得在终端关闭后也可以继续执行,使用ps -p 进程号
可以查看到该进程的tty值为?
,即终端无关;
- 使用
ps
查看进程:ps
仅能看到当前终端的作业,类似jobs
仅多一个shell进程;ps a
显示所有终端下的作业(即显示终端相关进程),与ps j
类似;ps x
显示终端相关或无关的所有进程;ps u
表示第一列显示用户,经常使用的就是ps aux
;ps f
表示按树形结构显示,m
显示线程信息,s
显示信号格式(具体信号格式可以使用man 7 signal
查看详情);ps -e
显示所有进程,ps -f
表示长格式,-F
为更长的格式;- VSZ为虚拟内存大小,RSS为常驻内存大小,状态码:D深睡眠、R运行中或可运行(或在排队)、S浅睡眠、T打断、X完全死亡(终止)、Z僵尸态(部分资源未释放),BSD格式状态码:<高优先级、N低优先级、L有锁定内存、s会话的首进程、l多线程、+前台进程
- PID为进程号,PPID为父进程号(systemd的PID永远是0),C为CPU使用率,STIME为进程启动时间,TIME为累计CPU时间(包括排队及运行时间)
- 使用
kill
终止进程:kill -l
查看支持的所有信号,其中9 SIGKILL
(直接终止)、15 SIGTERM
(正常终止,推荐)、1 SIGHUP
(挂起)、19 SIGSTOP
(停止)、18 SIGCONT
(继续)、10 SIGUSR1
和12 SIGUSR2
为自定义信号;(详情参见man 7 signal
)- 推荐使用字符命令方式,因为跨硬件平台通用字符信号,而不一定通数字信号;
- 常见用法:
kill -s SIGTERM 2076
或kill -SIGTERM 2076
或kill -TERM 2076
; kill -s STOP 2088
后ps 2088
显示状态为T
,而kill -s CONT 2088
后ps 2088
显示状态为R
;- 同一个终端中,
kill -s KILL %1
表示终止作业号为1的作业,不推荐使用; pkill
会使用pgrep
,对进程进行查询并终止,如使用pkill -TERM -u user1
终止user1下的所有进程(对于ssh登录的用户会导致直接退出远程连接),结束终端pts/0下的所有进程pkill -TERM -t pts/0
,结束以PID 2226为首进程的所有进程pkill -KILL -s 2226
(ps jf
中的s
状态的首进程,通常是bash进程,TERM
信号不一定能够终止bash进程,推荐用KILL
信号);
- 使用
top
跟踪进程:L
表示查询,1
开关CPU详细信息、t
开关任务及CPU资源、l
开关概况、m
开关内存详细信息、PgUp和PgDn翻页、X
指定排序列(从0开始)、d
设置更新间隔、F
定义列、V
显示树形结构;
- 如
top
、vim
是交互进程,而ls
、touch
为非交互进程;
服务
- 服务有一个或多个进程构成,通常进程都是终端无关的非交互进程;通常命名中以d结尾的进程都服务端,如
sshd
、httpd
等;
- 使用
systemctl status firewalld.service
查看防火墙服务状态,使用systemctl start httpd
启用http服务,此时由于防火墙暂时无法从外部访问,使用firewall-cmd --add-service=http
临时添加规则,此时http可以访问,使用systemctl status httpd
查看服务状态;
- 使用
systemctl enable httpd.service
启用http服务,使用systemctl disable firewalld.service
关闭防火墙服务,重启立刻生效;
- 参考
man systemd
;
- 使用
systemctl
查看已加载内存的服务单元,所有的程序的启动脚本位于/usr/lib/systemd/system/
,使用systemctl list-unit-files
查看系统管理的所有服务;
systemctl -t
后使用TAB
补全可以看到systemctl对服务的分类,服务的类型就是服务名的后缀,如httpd.service
就是service类型,systemctl -a
显示所有应该启动的服务(或systemctl list-unit
),systemctl --failed
显示启动失败的服务,systemctl status httpd.service
显示服务详细信息;若服务有多个进程,通常子进程是无法全部结束的,因为主进程一直负责维护子进程,结束主进程才会结束其他子进程,但是不推荐使用kill -TERM 2088
结束服务;
systemctl is-active sshd
或systemctl is-enabled sshd
显示sshd服务的设置状态;
- 服务控制:
- 启动
systemctl start httpd.service
; - 停止
systemctl stop httpd.service
; - 重启
systemctl restart httpd.service
; - 重载配置
systemctl reload httpd.service
(不停服务,如修改配置后); - 启用
systemctl enable httpd.service
; - 停用
systemctl disable httpd.service
;
- 启动
ssh
netstat -tnp
查看本机已经建立的连接,w
命令可以查看本机登录的账号,w -f
可以看懂从哪个IP登录的;
- 教学环境中
ssh desktop4
时,真实环境使用的是kiosk
用户,登录后发现虚拟环境的用户为student
,是因为真实环境的kiosk用户与虚拟环境的student的uid均为1000;
- 在当前用户的
~/.ssh/known_hosts
里的记录格式为“主机名,IP地址 加密算法 指纹”,用来对已知主机进行唯一性验证,防止中间人攻击;
- 非对称加密传输文件时,通常用密码将文件对称加密并,再使用接收方的公钥将对称加密的密码加密,最终将密码发送给接收方,接收方再用自己的私钥解密对称加密的密码,再使用对称加密的密码解密文件;
- 免密登录:
- 使用
ssh-keygen
在本地生成秘钥对,默认的私钥保存在~/.ssh/id_rsa
下,公钥保存在~/.ssh/id_rsa.pub
下; - 使用
ssh-copy-id student@server4
将本地公钥拷贝至远端服务器(公钥在student
的.ssh/authorized_keys
文件中追加一行); - 以后使用
ssh student@server4
即可免密; - 使用
ssh student@server4 'cat /etc/resolv.conf'
非交互登录,能够直接将命令结果返回本机,免密登录后会非常方便;
- 使用
- 使用
ll -a /etc/ssh/
查看配置文件,ssh客户端配置文件为ssh_config
,sshd_config
:- 常用的
ssh -X
图形化传输,可以将ssh_config
中的ForwardX11 no
该为yes
; - 禁止服务器的sshd配置,不允许以root用户登录,修改
PermitRootLogin yes
为no
; - 上传秘钥后,关闭密码验证方式,修改
PasswordAuthentication yes
为no
; - ssh配置详见
man 5 ssh_config
;
- 常用的