Linux葵花宝典
Linux 速成宝典作者ggzz日期2026年7月14日 目录Linux 系统基础桌面环境介绍Linux 命令行命令行管理文件Linux 系统基础Linux 前世今生Linux 前世Multics 计划上个世纪六十年代计算机还没有很普及只有少数人才能使用。当时的计算机系统都是批处理的就是把一批任务一次性提交给计算机然后等待结果中途不能和计算机交互。往往准备作业都需要花费很长时间并且这个时候别人也不能用导致了计算机资源的浪费。当时最具有创造性的操作系统是麻省理工学院于1964年推出的兼容分时系统CTSS-Compatible Time-Sharing System。为了改变这种情况在1965年前后贝尔实验室Bell、麻省理工学院MIT、通用电气GE联合起来以CTSS为基础准备研发一个分时多任务处理系统并把计算机取名为Multics多路信息计算系统-Multiplexed informtion and Computing Service。但是目标过于庞大功能过于复杂。隶属 ATT 公司的贝尔实验室Bell觉得它已无法实现以合理的代价为实验室提供计算服务的目标并且它太贵了。于是在1969年左右退出了这个项目。Unix 诞生1969年Bell退出Multics计划之后Bell实验室的那批科学家就没有什么事做了。其中Ken Thompson 在研发Multics的时候写了一个太空大战Space Travel的游戏。Bell退出了Multics后Ken就没法继续在Multics系统上运行太空大战游戏了。为了能够继续游戏于是找来一台旧设备PDP-71964年生产将游戏移植上去。但是太空旅行在PDP-7上运行得很慢于是Ken Thompson和Dennis Ritchie等人又重新设计了系统。恰巧 Ken Thompson太太休了三周假带着1岁的儿子回娘家于是他花了3周时间写了一个小型的操作系统第一周实现shell第二周实现编辑器第三周实现汇编器Ken的同事Brian Kernighan提议“从拉丁词根看Multics意图包罗万象而新系统顶多择一而从应该拿uni来代替multi叫它Unics。”unics在英文里表示单一与mult相反。于是他们叫这个系统是“UNiplexed Information and Computing Service”缩写为UNICS后来大家取其谐音就称为UNIX了。1969年年末Unix诞生。Minix 诞生Bell属于ATT而ATT受到了美国《谢尔曼反托拉斯法》的影响不能销售除了电话机电报机等之外的商品。后来ATT分解Bell可以卖Unix了Unix走向了商业化。如果想继续使用就需要购买授权一份授权4万美元在昂贵的授权费用下很多大学不得不停止对其研究。Unix开始收费之后结果就导致了大学上课老师都不知道讲啥了。在1987年荷兰阿姆斯特丹自由大学教授Anderw S.Tanenbaum安德鲁.塔能写了一个Minix类似于Unix但是小得多专用于教学。当Minix流传开来之后世界各地的黑客们纷纷开始研究使用并改进希望把改进的东西合并到Minix中但是Anderw S.Tanenbaum觉得他的系统是用于教学的不能破坏纯净性于是拒绝了。备注Anderw S.Tanenbaum写了一本书《操作系统设计及实现》提供完整的Minix源码。Linux 诞生Linus Torvalds(林纳斯.托瓦兹)对安德鲁教授不允许修改Minix的行为非常不满于是乎参照安德鲁教授的Minix系统编写了linux。在1991年Linus Torvalds在互联网上发布了一个帖子公布了自己写的Linux并说明我写了一个操作系统的内核但是还不够完善你们可以以任何姿势使用不收费也可以帮助我一起修改并于1994年正式发布Linux 1.0版本。GNU/LinuxGNU计划又称革奴计划是由Richard Stallman在1983年9月27日公开发起的。GNU是GNU’s Not Unix的递归缩写。它的目标是创建一套完全自由的操作系统。Richard Stallman 最早是在net.unix-wizards新闻组上公布该消息并附带一份《GNU宣言》等解释为何发起该计划的文章其中一个理由就是要重现当年软件界合作互助的团结精神。到1991年Linux内核发布的时候GNU已经几乎完成了除了系统内核之外的各种必备软件的开发。在Linus Torvalds和其他开发人员的努力下GNU组件可以运行于Linux内核之上。Linux内核是基于GNU通用公共许可(GPL-General Pubic License)发布的而且Linux中除了系统内核之外的各种必备软件都是GNU开发的所以Linux也经常称为GNU/Linux。Linux 今生以 RHEL 为代表的发行版本使用rpm包管理系统RHEL(Red Hat Enterprise Linux)Fedora由原来的RedHat桌面版本发展而来免费版本CentOSRHEL的社区克隆版本免费RockyRHEL的社区克隆版本免费OELOralce Enterprise Linux以 Debian 为代表的发行版本使用deb包管理系统Debian社区Linux的典范迄今为止最遵循GNU规范的Linux系统。UbuntuDebian衍生版是一个以桌面应用为主的Linux操作系统。Kali LinuxDebian衍生版旨在渗透测试和数字取证。其他版本ArchLinux、Gentoo 等等…CentOSCentOS原名为 Community Enterprise Operating System翻译过来就是社区企业操作系统是目前非常受服务器行业欢迎的Linux发行版之一。CentOS项目虽然被红帽收购但依然独立运行。CentOS来源RedHat为客户和合作伙伴提供补丁和操作系统。RedHat提供未打标记的源代码到CentOS的git仓库。CentOS在一个全新的编译环境下重新编译源代码。CentOS优缺点优点缺点CentOS是Linux再编译版本稳定性有保障CentOS社区不会对用户提供任何保证CentOS完全免费-CentOS的yum命令支持在线升级方便快捷-CentOS Stream2014年初CentOS加入Red Hat。2019年9月CentOS Stream项目宣布创建。什么让Linux变得伟大Linux是开源软件开源不仅仅意味着你可以看到系统是如何工作的还可以尝试更改并将其免费共享给其他人使用。开源模式意味着改进更容易实现从而实现更快的创新。Linux提供功能强大且可编写脚本的命令行界面CLILinux是围绕用户可以从CLI执行所有管理任务的基本设计理念构建的。它使自动化、部署和资源调配更加容易并简化了本地和远程系统管理。Linux是一个模块化操作系统允许轻松更换或删除组件。系统的组件可以根据需要进行升级和更新。Linux系统可以是一个通用的开发工作站也可以是一个非常精简的软件设备。CentOS 系统安装新建虚拟机菜单 → 文件 → 新建虚拟机选择自定义下一步稍后安装选择系统设置名和位置CPU分配2个内存分配4G网络使用NAT下一步下一步创建新磁盘配置硬盘建议分配80G-200G之间下一步完成配置光盘单击 → 编辑虚拟机设置 → 通过浏览找到操作系统ISO文件 → 单击确定。安装过程开机选择 “Install CentOS 7” → 回车先单击系统安装界面通过上下键选择选择安装过程中语言配置软件选择选择 “带 GUI 的服务器” → 完成选择安装位置自动配置分区关闭kdump配置网络打开后选择配置进行手动配置IPIP地址10.1.8.10子网掩码24网关10.1.8.2DNS 服务器223.5.5.5, 223.6.6.6设置主机名开始安装设置 ROOT 密码为 666创建用户用户名ggzz等待安装完成重启许可证配置接受许可证同意并单击完成完成配置登录根据自己习惯选择 GNOME 或者 GNOME 经典环境界面 → 一直选择前进即可在线帐号界面选择跳过帮助信息关闭即可最后一步关机打快照Xshell 和 Xftp 安装和配置下载Xshellhttp://192.168.50.200/course-materials/softwares/base/09.Xshell-8.0.0095p.exeXftphttp://192.168.50.200/course-materials/softwares/base/09.Xftp-8.0.0095p.exeXshell 使用# 打开xshell在终端中输入sshggzz10.1.8.10ssh是命令ggzz是用户名10.1.8.10是目标服务器IP地址弹出的界面选择接受并保存输入密码666显示登录成功界面。Xftp 使用打开xftp工具链接栏输入10.1.8.10服务器的IP后回车在弹出的界面输入用户名ggzz和密码666登录成功文件的上传和下载上传将左侧文件拖拽到右侧。下载将右侧文件拖拽到左侧。中文乱码处理乱码是编码方式和解码方式不一致导致的。打开xftp找到左上角点击文件 → 属性 → 点击选项按钮 → 勾选使用UTF-8编码 → 重启xftp。桌面环境介绍桌面介绍无终端设置设置终端属性字体快捷键新建终端CtrlAltN新建标签CtrlAltTLinux 命令行控制台Console也就是控制台也称为终端提供命令行输入数据和展示命令行输出数据。物理控制台用于与系统交互的硬件接口。虚拟控制台名称为tty1–tty6通过Ctrl Alt F1…F6切换。tty1是图形化程序所在的终端。# 进入3号虚拟控制台Ctrl Alt F3# 登录后执行tty命令查看当前终端[tty3]$tty/dev/tty3输入密码的时候屏幕是不显示任何字符的。Shell 介绍Shell用于解析终端中输入的字符串交由kernel执行并将执行结果显示到终端中。Linux命令行由shell程序提供。在Linux发展过程中产生了多种shell程序。Bash是类UNIX系统中最成功的shell也是用户的默认shell。命令提示符作用提示计算机正在等待用户的输入。$代表普通用户提示符提示符最后有一个空格。#代表管理员提示符。[ggcentos7 ~17:50:02]$date2026年 07月14日 星期一17:50:02 CST[rootcentos7 ~17:50:03]# date2026年 07月14日 星期一17:50:03 CSTShell 解析字符串的语法Shell命令行通过空格分隔包含三个部分命令第一部分必须是命令代表要执行的程序其后可能跟着选项或参数。选项调整命令的行为或作用。通常以一个或两个-符号开头例如-a、--all。参数典型的参数是命令的目标命令后面可能接多个参数。Enter键shell开始解析命令行中字符串并交由kernel执行。示例[ggcentos7 ~17:50:04]$ls-l/home# ls是命令# -l是选项# /home是参数# 只用命令情况[ggcentos7 ~17:50:05]$ls公共 模板 视频 图片 文档 下载 音乐 桌面# 使用不同格式选项-a和--all都是用于显示所有文件包含.开头的隐藏文件[ggcentos7 ~17:50:06]$ls-a..bashrc .esd_auth .mozilla 模板 下载...cache .gnupg .ssh 视频 音乐 .bash_logout .config .ICEauthority .Xauthority 图片 桌面 .bash_profile .dbus .local 公共 文档[ggcentos7 ~17:50:07]$ls--all..bashrc .esd_auth .mozilla 模板 下载...cache .gnupg .ssh 视频 音乐 .bash_logout .config .ICEauthority .Xauthority 图片 桌面 .bash_profile .dbus .local 公共 文档# 使用参数指定目标查看目录/etc/yum文件清单[ggcentos7 ~17:50:08]$ls/etc/yum fssnap.d pluginconf.d protected.d vars version-groups.confdate 命令示例[ggcentos7 ~17:50:09]$date--help用法date[选项]...[格式]或date[-u|--utc|--universal][MMDDhhmm[[CC]YY][.ss]][ggcentos7 ~17:50:10]$date2026年 07月14日 星期一17:50:10 CST# 显示UTC时间[ggcentos7 ~17:50:11]$date-u2026年 07月14日 星期一 09:50:11 UTC[ggcentos7 ~17:50:11]$date--utc2026年 07月14日 星期一 09:50:11 UTC[ggcentos7 ~17:50:11]$date--universal2026年 07月14日 星期一 09:50:11 UTC# 根据给定时间字符串显示日期[ggcentos7 ~17:50:11]$date-d-1 day2026年 07月13日 星期日17:50:11 CST[ggcentos7 ~17:50:12]$date--date-1 day2026年 07月13日 星期日17:50:11 CST[ggcentos7 ~17:50:13]$date--date100 day2026年10月22日 星期四17:50:11 CST# 特殊案例[ggcentos7 ~17:50:14]$date-d-1 year 3 month 10 days2025年10月24日 星期五17:50:11 CST# 以给定格式显示时间[ggcentos7 ~17:50:15]$date%Y%m%d20260714[ggcentos7 ~17:50:16]$date%Y-%m-%d2026-07-14[ggcentos7 ~17:50:17]$date%Y/%m/%d2026/07/14一行执行多个命令使用分号;分隔。[ggcentos7 ~17:50:18]$ls公共 模板 视频 图片 文档 下载 音乐 桌面[ggcentos7 ~17:50:19]$date2026年 07月14日 星期一17:50:19 CST[ggcentos7 ~17:50:20]$ls;date公共 模板 视频 图片 文档 下载 音乐 桌面2026年 07月14日 星期一17:50:20 CST# 错误的示例ls 和 date 之间没有分号[ggcentos7 ~17:50:21]$lsdatels: 无法访问date: 没有那个文件或目录passwd 命令作用管理用户密码。[ggcentos7 ~17:50:21]$passwd--help用法:passwd[选项...]帐号名称# 普通用户修改密码[ggcentos7 ~17:50:22]$passwd更改用户 ggzz 的密码 。 为 ggzz 更改 STRESS 密码。 当前UNIX 密码123 新的 密码redhat 无效的密码 密码少于8个字符 新的 密码12345678 无效的密码 密码未通过字典检查 - 过于简单化/系统化 新的 密码55TurnK3y 重新输入新的 密码55TurnK3y passwd所有的身份验证令牌已经成功更新。# root 用户管理账户密码[rootcentos7 ~17:50:23]# passwd ggzz更改用户 ggzz 的密码 。 新的 密码redhat 无效的密码 密码少于8个字符 重新输入新的 密码redhat passwd所有的身份验证令牌已经成功更新。# 删除用户密码实现用户登录不需要密码[rootcentos7 ~17:50:24]# passwd -d ggzz清除用户的密码 ggzz。 passwd: 操作成功# 锁定用户密码用户将无法登录[rootcentos7 ~17:50:25]# passwd -l ggzz锁定用户 ggzz 的密码 。 passwd: 操作成功# 解锁用户密码用户可以正常登录[rootcentos7 ~17:50:26]# passwd -u ggzz解锁用户 ggzz 的密码。 passwd: 操作成功file 命令作用判定文件类型。[ggcentos7 ~17:50:27]$file--helpUsage:file[OPTION...][FILE...]Determinetypeof FILEs.[ggcentos7 ~17:50:28]$file/etc/yum /etc/yum: directory[ggcentos7 ~17:50:29]$file/etc/fstab /etc/fstab: ASCII text# /bin/file是二进制程序[ggcentos7 ~17:50:30]$file/bin/file /bin/file: ELF64-bit LSB executable, x86-64, version1(SYSV), dynamically linked(uses shared libs),forGNU/Linux2.6.32, BuildID[sha1]58f6c8b82ee70887d7136a7181ffc8fa18030cde, strippedcat 命令作用一次性读取文件内容。[ggcentos7 ~17:50:31]$cat--help用法cat[选项]...[文件]... 将[文件]或标准输入组合输出到标准输出。[ggcentos7 ~17:50:32]$cat/etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain610.1.8.88 CentOS7.redhat.fun CentOS7# -A选项等于-vET用于显示行尾加个$用^I显示制表符tab键[ggcentos7 ~17:50:33]$cat-A/etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4$ ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6$10.1.8.88^ICentOS7.redhat.fun^ICentOS7$# 一次性查看多个文件[ggcentos7 ~17:50:34]$cat/etc/hosts /etc/fstab127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain610.1.8.88 CentOS7.redhat.fun CentOS7## /etc/fstab# Created by anaconda on Wed Jul 14 10:00:00 2026## 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#/dev/mapper/centos-root / xfs defaults00UUID047729d6-683f-4aec-b614-28d20ce0a90c /boot xfs defaults00/dev/mapper/centos-home /home xfs defaults00/dev/mapper/centos-swap swap swap defaults00head 命令作用显示文件头部内容。[ggcentos7 ~17:50:35]$head--help用法head[选项]...[文件]... Print the first10lines of each FILE to standard output.[ggcentos7 ~17:50:36]$head/etc/profile# /etc/profile# System wide environment and startup programs, for login setup# Functions and aliases go in /etc/bashrc# Its NOT a good idea to change this file unless you know what you# are doing. Its much better to create a custom.sh shell script in# /etc/profile.d/ to make custom changes to your environment, as this# will prevent the need for merging in future updates.# 只看前4行内容[ggcentos7 ~17:50:37]$head-n4/etc/profile# /etc/profile# System wide environment and startup programs, for login setup# Functions and aliases go in /etc/bashrc# 查看文件所有内容除了最后3行[ggcentos7 ~17:50:38]$head-n-3/etc/profiletail 命令作用显示文件尾部内容。[ggcentos7 ~17:50:39]$tail--help用法tail[选项]...[文件]... Print the last10lines of each FILE to standard output.[ggcentos7 ~17:50:40]$tail/etc/profileif[${-#*i}!$-];then.$ielse.$i/dev/nullfifidoneunsetiunset-fpathmunge[ggcentos7 ~17:50:41]$tail-n4/etc/profiledoneunsetiunset-fpathmunge# 从第四行到最后所有行内容[ggcentos7 ~17:50:42]$tail-n4 /etc/profileless 命令作用交互式、翻页查看文件内容。# 使用less查看多页文档可以翻页搜索等[ggcentos7 ~17:50:43]$less-N/etc/profile在less查看文件过程中常见指令/搜索nnext搜索下一个N搜索上一个上下方向键 逐行查看左右键左右翻页PageUp和PageDown上下翻页q退出文档查看wc 命令作用统计文件行数、单词数、字节数。[ggcentos7 ~17:50:44]$wc--help用法wc[选项]...[文件]...[ggcentos7 ~17:50:45]$cat/etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain610.1.8.88 CentOS7.redhat.fun CentOS7[ggcentos7 ~17:50:46]$wc/etc/hosts313197/etc/hosts# 统计文件line数量[ggcentos7 ~17:50:47]$wc-l/etc/hosts3/etc/hosts# 统计文件word数量[ggcentos7 ~17:50:48]$wc-w/etc/hosts13/etc/hosts# 统计文件bytes数量[ggcentos7 ~17:50:49]$wc-c/etc/hosts197/etc/hosts# 统计多个文件数据[ggcentos7 ~17:50:50]$wc/etc/hosts /etc/fstab313197/etc/hosts1260541/etc/fstab1573738总用量Tab 按键补全功能补全命令、补全选项、补全参数。Tab一次就出结果说明匹配结果唯一。Tab两次才补全出结果说明匹配结果不唯一。# 补全命令[ggcentos7 ~17:50:51]$ pasTabTabpasswdpastepasuspender[ggcentos7 ~17:50:52]$ passTab# 自动显示为[ggcentos7 ~17:50:53]$passwd# 补全选项[ggcentos7 ~17:50:54]$passwd--dTab# 自动显示为[ggcentos7 ~17:50:55]$passwd--delete# 补全参数[ggcentos7 ~17:50:56]$file/eTab# 自动显示为[ggcentos7 ~17:50:57]$file/etc/history 命令# history命令查看帮助不能使用 history --help[ggcentos7 ~17:50:58]$history--help-bash: history: --: 无效选项 history: 用法:history[-c][-d 偏移量][n]或history-anrw[文件名]或history-ps参数[参数...][ggcentos7 ~17:50:59]$helphistoryhistory:history[-c][-d 偏移量][n]或history-anrw[文件名]或history-ps参数[参数...]显示或操纵历史列表。[ggcentos7 ~17:51:00]$history1date2date-u3date--utc4date--universal5date-d-1 day......# 清空历史操作记录[ggcentos7 ~17:51:01]$history-c# 使用上下键查找历史命令的时候只能查找现有的历史命令[ggcentos7 ~17:51:02]$history1history2echohello world3ls4hostname5history# 调用历史第2条命令显示第2条命令后然后执行该命令[ggcentos7 ~17:51:03]$!2echohello world hello world# 从下往上匹配最后一个以ho开头的命令显示并执行该命令[ggcentos7 ~17:51:04]$!hohostnameCentOS7.wanho.net# 使用-w选项将历史命令写入到文件~/.bash_history[ggcentos7 ~17:51:05]$history-w[ggcentos7 ~17:51:06]$cat~/.bash_historyhistoryechohello worldlshostnamehistoryechohello worldhostnamehistoryhistory-wscript 命令[ggcentos7 ~17:51:07]$ script--help用法 script[选项][文件]# 记录终端中历史操作并保存到指定文件还可以同时记录操作时间[ggcentos7 ~17:51:08]$ script--timingtime.log record.log# 或者[ggcentos7 ~17:51:09]$ script-ttime.logrecord.log[ggcentos7 ~17:51:10]$echohello world hello world[ggcentos7 ~17:51:11]$hostnameCentOS7.linux.com[ggcentos7 ~17:51:12]$date2026年 07月14日 星期一17:51:12 CST[ggcentos7 ~17:51:12]$history-c[ggcentos7 ~17:51:13]$echogoodbye goodbye[ggcentos7 ~17:51:14]$exitexitScript done,fileis record.log# 查看日志内容[ggcentos7 ~17:51:15]$catrecord.log 脚本启动于2026年07月14日 星期一17时51分16秒[ggcentos7 ~17:51:16]$echohello world hello world[ggcentos7 ~17:51:17]$hostnameCentOS7.linux.com[ggcentos7 ~17:51:18]$date2026年 07月14日 星期一17:51:18 CST[ggcentos7 ~17:51:18]$history-c[ggcentos7 ~17:51:19]$echogoodbye goodbye[ggcentos7 ~17:51:20]$exitexitScriptdoneon2026年07月14日 星期一17时51分21秒# 动态回放日志[ggcentos7 ~17:51:21]$ scriptreplay-ttime.log record.logBash 快捷键快捷键作用Ctrla 或者 Home光标定位到命令行开头Ctrle 或者 End光标定位到命令行末尾Ctrlu删除光标位置到命令行开头Ctrlk删除光标位置到命令行末尾Ctrl←光标向左跳转一个单词Ctrl→光标向右跳转一个单词Ctrlr搜索历史命令Ctrlw向左删除一个参数Esc(松开).打印上一个命令的最后一个参数CtrllL的小写清空屏幕Ctrld登出终端