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前一个词首; - 使用
#查找相同单词,可以使用nN在该单词的搜索结果中跳转; 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的输出读入到光标下一行); - 命令行模式:
firstprevnextlast在多个打开的文件中切换; 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可以将后台程序移至前台,使用fgbg后接作业号可以选择要操作的对象。
- 使用
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;
- 常用的

