Redhat Linux初体验(1)

这三周都被拐卖到成都培训RHCE,讲真,还是当学生好啊哈哈哈把学习笔记搬上来,关键时刻能做个速查~

献上第一周的笔记。

2018-07-16

Linux历史

  1. Multics的产生
  2. Unix的产生
  3. BSD与GUN等开源软件的发展
  4. Linux的发展与发行现状

教学环境简介

  1. 安装vnc以及使用vnc远程教师机器
  2. 红帽虚拟机使用管理:rht-vmctl [start|view|reset|stop]
  3. 红帽虚拟机配置管理:virt-manager
  4. 通过伪终端连接虚拟机:ssh student@desktop4

2018-07-17

常用基础命令

  1. 修改密码passwd的策略;
  2. 使用date修改、显示时间命令,以及命令行转义;
  3. 文件查看相关命令:filewcheadtail,文本编辑器nano
  4. 使用history操作命令历史记录,使用!^r快速逆向查找历史命令,使用esc+.!$复制上条命令的参数,使用!!复现上一条命令;
  5. 命令行光标操作:光标移至行首^a、光标移至行尾^e、删除光标之前^u、删除光标之后^k、删除前一个参数^w^l清屏、^Y恢复^u^w擦除的命令、^\撤销操作;

文件操作

  1. 文件系统树形结构:/, /bin, /boot, /dev, /etc, /etc/opt, /etc/sgml, /etc/X11, /home, /lib, /media, /mnt, /opt, /proc, /root, /sbin, /srv, /tmp, /usr, /var的功能介绍;
  2. 文件系统路径,区分相对路径、绝对路径,使用cd -切换到上一次使用的路径下
  3. 新建文件:touch的本意是用来更新文件的时间戳,也用来新建文件;使用mkdir -p创建一系列路径;ls -R递归现实目录内容,类似tree
  4. 删除文件:rmdir不常用,只能删除非空目录;rm常用,可删除文件或目录,-r选项可递归删除
  5. 修改文件:使用cp复制文件,-r递归复制,*通配复制(不可用于子目录);使用mv移动文件,mv可用于重命名;
  6. 文件通配符:
    • *匹配任意字符任意长度;
    • ?匹配任意字符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

获取帮助

  1. Unix帮助:使用man man查看man帮助格式(包括8个必选1个可选章节),使用man 章节数 命令查看相应命令的详细帮助信息,使用man -k fd搜索所有fd相关帮助
  2. 使用ls --helpls --infohelp lsinfo ls获取简要操作指南,
  3. 在man中使用-N CR命令显示行号
  4. GNU帮助:使用info info查看info帮助各式,pinfo查看易读的info格式,若命令未提供info帮助,则info会将man帮助显示出来
  5. man手册位于/usr/share/man,info手册位于/usr/share/info,第三方软件的帮助位于/usr/share/doc,使用rpm -ql httpd | grep /usr/share查看第三方软件httpd的帮助文件安装情况

文本文件

  1. cat可以连接输出多个文件,headtail则会将文件分开输出,cat -A输出换行/制表等控制字符;
  2. 使用more、less分屏显示文件,less功能更强大,man的输出默认调用less
  3. 重定向,man stdin查看;/dev中的stdin/out/err均指向fd(文件描述符),ll -i std*发现输出最前多了一列index node,即文件索引节点,使用tty查看当前终端的文件描述符,echo hello1 1> /dev/pts/2可以在另一个终端上看到输出;
  4. 输入重定向:tr '[:lower:]' '[:upper:]' 0<.bashrc,将.bashrc的内容重定向到stdin传给tr进行大小写转换
  5. 输出重定向:>覆盖,>>追加
  6. 管道|,连接前一个命令的stdout到后一个命令的stdin

vim

  1. ^u向上^d向下,ZZ保存退出,ZQ不保存退出;
  2. 插入模式、命令模式、可视模式(仅用于选择);
  3. v按字符选择、V按行选择、^v按块选择;
  4. 字符级移动hjkl10j向后移动10行;0绝对行首,^非空行首,$(行尾);
  5. 句级移动:(前一句,)后一句;
  6. 段级移动:{前一段,}后一段;
  7. 单词级移动:w下一个词首),e下一个词尾,b前一个词首;
  8. 使用#查找相同单词,可以使用n N在该单词的搜索结果中跳转;
  9. d删除,d10w删除后十个单词,d10l删除后十个字符;c删除并插入;
  10. dd删除行;S删除行并插入;
  11. x删除字符;s删除字符并插入;
  12. y复制;
  13. p粘贴光标后,P粘贴光标前;
  14. 插入模式:i(插入光标前)a(插入光标后)I(行首插入)A(行尾插入)o(下行插入)O(上行插入)R(改写);
  15. .重复上一条命令;
  16. 命令行模式,set all查看所有命令,直接输数字回车移动到相应行(10CR),命令10G也可以;
  17. 命令行模式:10,15d(删除10-15行),.,+3d删除1+3行(.光标所在行,\$最后一行,%所有行);
  18. 命令行模式: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忽略大小写,询问模式);
  19. 命令行模式:r abc.txt(将abc.txt追加到光布行后面)o abc.txt(打开abc.txt);
  20. 命令行模式:!(执行外部命令),r !hostname(将hostname的输出读入到光标下一行);
  21. 命令行模式:first prev next last在多个打开的文件中切换;
  22. u撤销,^r重复;
  23. 多文件打开vim -o a b c d多文件水平分屏,-O竖直分屏,使用^w在多屏间切换,命令行下split为水平分屏,hsplit为竖直分屏;

在root用户下,vivim是两个程序,vim更强大,语法高亮只有在特定位置自动渲染

2018-07-19

本地用户

  1. uid 0 分配给root用户;uid 1-999 分配给应用程序,通常不用来登录计算机,为内置账号;uid > 1000 分配给普通用户
  1. /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中;
  1. 普通用户均有home目录和登录程序(shell),
  1. 查看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保存组密码信息;
  1. 管理用户(必须使用root权限):
    • 图形管理界面sudo system-config-users
    • 命令行添加用户useradd,使用passwd设置密码;
    • 命令行修改用户usermod,修改home目录时需使用-mdm移动home目录,放在d之前),home目录下默认文件均从/etc/skel复制而来;-L锁定用户,-U解锁用户;
    • 命令行删除用户userdel-r表示删除home目录
    • sudo的权限写在/etc/sudoervisudo是专门用于修改/etc/sudoer的程序,使用man 5 sudoers查看具体格式;
    • chage -l user1查看用户密码相关易读的时间信息(上次密码更改日期、密码过期日期、账户过期时间等);使用chage修改这些信息;
    • /etc/login.defs为新建用户时的默认配置,可以修改这些配置以更改新建用户时的行为;
  1. 管理组(必须使用root权限):
    • groupadd -r为创建系统内置组;
    • groupmems也可以用来给用户添加组,如使用-a
    • man 5 passwdman 5 shadow查看用户密码信息,man 3 crypt查看加密算法;man 5 groupma 5 shadow查看组密码信息;

文件权限

  1. 文件被访问时,首先比对文件权限与用户权限,如果不符则比对用户属组权限,如果不符则比对其他用户权限;
  1. 文件权限:rw写(修改删除或在目录中增删改文件)x执行(执行或进入目录):
    • 第一位,文件类型;
    • 234位:文件属主具有的权限;
    • 567位:文件属组具有的权限;
    • 89A位:文件属主之外的其他用户具有的权限;
    • 比如root用户vim /etc/passwd为读写,普通用户显示只读(topL可以搜索进程);
  1. 修改权限,ll -d /test进查看目录而不进入目录:
    • 使用chmod a= /testa代表all)取消test目录的所有权限,root用户依然可以进入,权限仅对root用户无效,文件属主对文件永远具有写权限(即使显示readonly);
    • 使用chmod o=x /testo代表other)给其他用户赋予进入目录的权限;
    • 使用chmod o-x /test取消其他用户的进入权限;
    • 使用chmod o=r /test赋予其他用户列出目录中文件的权限,如果仅有r而没有x则只能读出文件名,其他属性均无法访问,因此应再使用chmod o+x /test
    • 使用chmod o=wx /test赋予其他用户;
    • chmodugo代表修改文件属主、文件属组、属主外其他用户的权限,a表示修改ugo全部;+-=表示增、删、赋值,各种组合可以使用,分割,如ugo=r,u+w(应注意赋值覆盖增删);
  1. 修改所属关系:
    • 使用chown user1:user1 file修改文件所属用户及所属用户属组,
    • 使用-R修改目录下所有文件的权限;
  1. umask的修改涉及到交互式登录与非交互登录脚本的加载,通常修改umask只能在本次会话中生效,若要长期生效,需要修改根据登录脚本加载顺序来修改各登录脚本中的umask的赋值:
    • 登录脚本在/etc/profile(系统交互式初始化脚本)、~/.bash_profile(个人交互式初始化脚本)、/etc/bashrc(系统非交互式登录脚本)、~/.bashrc(个人非交互式初始化脚本);
    • 关于脚本启动顺序,详情参见man bash,搜索profile,INVOCATION章节:
  1. 可执行文件的特殊权限:
    • 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,常为协作类可执行程序设置;
  1. 目录的特殊权限:
    • SGID:使用chmod g+s test,使得目录具有s权限后,在目录中新建的任何文件,其属组均会被设置为该目录的属组,常用于协作目录;(目录的SUID(u+s)是没有任何效果的)
    • t权限:针对上一条,设置了g+s的目录,就算不是文件拥有者,也可以删除组内其他人的文件,而对目录使用chmod o+t test后,仅有文件拥有者才能删除该文件;
    • t权限仅对目录有效;
    • umask的第一位即为特殊权限:4为SUIDu+s2为SGIDg+s1为t权限;

2018-07-20

进程

  1. 启动顺序:

    1
    2
    3
    4
    5
    6
    7
    8
    poweron->
    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
  2. 通过pstree可以查看进程树形结构(-p可以对应进程号),反映了启动顺序(ps -up 进程号现实进程详情);

  1. 通常的,由用户登录后发起的进程成为作业(jobs),而直接由systemd启动的进程成为服务(service),使用ps j查看所有作业,在终端执行的命令会随着终端的关闭而结束;比如在使用ssh连接的终端上执行dd if=/dev/zero of=/dev/null复制大文件,如果网络不稳定,sshd会认为远端断开连接,而结束本终端下的所有进程;
  1. 如果在进程运行时使用^z挂起进程(^c终止进程),使用jobs可以查看当前终端下的作业进程及其作业号jobs -l可显示进程号,作业号是bash分配的,而进程号是系统分配的),使用bg可以在后台继续该进程,使用fg可以将后台程序移至前台,使用fg bg后接作业号可以选择要操作的对象。
  1. 使用dd if=/dev/zero of=/dev/null&运行程序将直接后台运行,终端内执行的进程通常会在终端被关闭时结束(按照树形结构),使用nohup dd if=/dev/zero of=/dev/null&将转为终端无关进程,使得在终端关闭后也可以继续执行,使用ps -p 进程号可以查看到该进程的tty值为?,即终端无关;
  1. 使用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时间(包括排队及运行时间)
  1. 使用kill终止进程:
    • kill -l查看支持的所有信号,其中9 SIGKILL(直接终止)、15 SIGTERM(正常终止,推荐)、1 SIGHUP(挂起)、19 SIGSTOP(停止)、18 SIGCONT(继续)、10 SIGUSR112 SIGUSR2为自定义信号;(详情参见man 7 signal
    • 推荐使用字符命令方式,因为跨硬件平台通用字符信号,而不一定通数字信号;
    • 常见用法:kill -s SIGTERM 2076kill -SIGTERM 2076kill -TERM 2076
    • kill -s STOP 2088ps 2088显示状态为T,而kill -s CONT 2088ps 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 2226ps jf中的s状态的首进程,通常是bash进程,TERM信号不一定能够终止bash进程,推荐用KILL信号);
  1. 使用top跟踪进程:L表示查询,1开关CPU详细信息、t开关任务及CPU资源、l开关概况、m开关内存详细信息、PgUp和PgDn翻页、X指定排序列(从0开始)、d设置更新间隔、F定义列、V显示树形结构;
  1. topvim是交互进程,而lstouch为非交互进程;

服务

  1. 服务有一个或多个进程构成,通常进程都是终端无关的非交互进程;通常命名中以d结尾的进程都服务端,如sshdhttpd等;
  1. 使用systemctl status firewalld.service查看防火墙服务状态,使用systemctl start httpd启用http服务,此时由于防火墙暂时无法从外部访问,使用firewall-cmd --add-service=http临时添加规则,此时http可以访问,使用systemctl status httpd查看服务状态;
  1. 使用systemctl enable httpd.service启用http服务,使用systemctl disable firewalld.service关闭防火墙服务,重启立刻生效;
  1. 参考man systemd
  1. 使用systemctl查看已加载内存的服务单元,所有的程序的启动脚本位于/usr/lib/systemd/system/,使用systemctl list-unit-files查看系统管理的所有服务;
  1. systemctl -t后使用TAB补全可以看到systemctl对服务的分类,服务的类型就是服务名的后缀,如httpd.service就是service类型,systemctl -a显示所有应该启动的服务(或systemctl list-unit),systemctl --failed显示启动失败的服务,systemctl status httpd.service显示服务详细信息;若服务有多个进程,通常子进程是无法全部结束的,因为主进程一直负责维护子进程,结束主进程才会结束其他子进程,但是不推荐使用kill -TERM 2088结束服务;
  1. systemctl is-active sshdsystemctl is-enabled sshd显示sshd服务的设置状态;
  1. 服务控制:
    • 启动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

  1. netstat -tnp查看本机已经建立的连接,w命令可以查看本机登录的账号,w -f可以看懂从哪个IP登录的;
  1. 教学环境中ssh desktop4时,真实环境使用的是kiosk用户,登录后发现虚拟环境的用户为student,是因为真实环境的kiosk用户与虚拟环境的student的uid均为1000;
  1. 在当前用户的~/.ssh/known_hosts里的记录格式为“主机名,IP地址 加密算法 指纹”,用来对已知主机进行唯一性验证,防止中间人攻击;
  1. 非对称加密传输文件时,通常用密码将文件对称加密并,再使用接收方的公钥将对称加密的密码加密,最终将密码发送给接收方,接收方再用自己的私钥解密对称加密的密码,再使用对称加密的密码解密文件;
  1. 免密登录:
    • 使用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'非交互登录,能够直接将命令结果返回本机,免密登录后会非常方便;
  1. 使用ll -a /etc/ssh/查看配置文件,ssh客户端配置文件为ssh_configsshd_config
    • 常用的ssh -X图形化传输,可以将ssh_config中的ForwardX11 no该为yes
    • 禁止服务器的sshd配置,不允许以root用户登录,修改PermitRootLogin yesno
    • 上传秘钥后,关闭密码验证方式,修改PasswordAuthentication yesno
    • ssh配置详见man 5 ssh_config

Redhat Linux初体验(2)
Redhat Linux初体验(3)

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×