文章目录
1. Linux 入门
1.1. 开源 Open
-
软件分类:
- 商业
- 共享
- 自由 free
-
开源: 把软件程序与源代码文件一起打包提供给用户,让用户在不受限制地使用某个软件功能的基础上还可以按需进行修改,或编制成衍生产品再发布出去。用户具有使用自由、修改自由、重新发布自由以及创建衍生品的自由。开源软件最重要的特性有下面这些。
- 低风险:使用闭源软件无疑把命运交付给他人,一旦封闭的源代码没有人来维护,你将进退维谷;而且相较于商业软件公司,开源社区很少存在倒闭的问题。
- 高品质:相较于闭源软件产品,开源项目通常是由开源社区来研发及维护的,参与编写、维护、测试的用户量众多,一般的 bug 还没有等爆发就已经被修补。
- 低成本:开源工作者都是在幕后默默且无偿地付出劳动成果,为美好的世界贡献一份力量,因此使用开源社区推动的软件项目可以节省大量的人力、物力和财力。
- 更透明:没有哪个笨蛋会把木马、后门等放到开放的源代码中,这样无疑是把自己的罪行暴露在阳光之下。
世界上的开源许可证,大概有上百种,常用的有 6 个,下面一图读懂主要的开源协议:

1.2. Linux 哲学思想
- 一切皆文件(包括硬件)
- 小型,单一用途的程序
- 链接程序,共同完成复杂的任务
- 避免令人困惑的用户界面
- 配置数据存储在文本中
1.3. 开发接口标准
- ABI(应用程序二进制接口): Application Binary Interface
ABI 描述了应用程序与 OS 之间的底层接口,允许编译好的目标代码在使用兼容 ABI 的系统中无需改动就能运行 - API(应用程序编程接口):Application Programming Interface
API 定义了源代码和库之间的接口,因此同样的源代码可以在支持这个 API 的任何系统中编译 - POSIX(可移植性操作系统接口): Portable Operating System Interface
IEEE 在操作系统上定义的一系列 API 标准
POSIX 兼容的程序可在其它 POSIXX 操作系统编译执行 - 运行程序格式:
Windows: EXE, .dll (dynamic link library), .lib
Linux: ELF, .so (shared object), .a
1.4. 用户和内核空间
- 用户空间:User space
用户程序的运行空间。为了安全,它们是隔离的,即使用户的程序崩溃,内核也不受影响,只能执行简单的运算,不能直接调用系统资源,必须通过系统接口( system call),才能向内核发出指令。 - 内核空间:Kernel space
是 Linux 内核的运行空间,可以执行任意命令,调用系统的一切资源。

示例:
str = "www.magedu.com" // 用户空间
x = x + 100 // 用户空间
file.write(str) // 切换到内核空间
y = x + 200 // 切换回用户空间
第一行和第二行都是简单的赋值运算,在 User space 执行。第三行需要写入文件,就要切换到 Kernel space ,因为用户不能直接写文件,必须通过内核安排。第四行又是赋值运算,就切换回 User space 。
1.5. Linux 版本
1.5.1. 内核版本
查看内核 (kernel) 版本命令:uname -r
或 cat /proc/version
linux 内核版本有两种:稳定版(次版本为偶数)和 开发版(次版本为奇数)。
版本号:[主版本].[次版本].[释出版本]-[修改版本]
如:3.10.0-957.el7.x86_64
注:
主版本、次版本:一般用头两个数字描述内核系列,主版本号和次版本号标志着重要的功能变动
释出版本:在主次版本架构不变的情况下,新增的功能累积到一定程度后释出的内核版本
修改版本:表示较小的功能变更,修改一些 bug 等
el 表示 Enterprise Linux,7 表示 Centos7
x86_64 表示 CPU 结构,即 64 位
Linux 内核版本发布网站(The Linux Kernel Archives):https://www.kernel.org/
1.5.2. 发行版本
查看 RedHat 系列发行(distribution)版本命令:cat /etc/redhat-release
Linux 发行版的名称和版本号是由发行版的维护者决定的
主要的 Linux 发行版如下:
- slackware:SUSE Linux Enterprise Server (SLES)
OpenSuse 桌面 - debian:ubuntu,mint
- RedHat:RHEL: RedHat Enterprise Linux 每 18 个月发行一个新版本
CentOS:兼容 RHEL 的格式,国内下载源
中标麒麟:中标软件
Fedora:每 6 个月发行一个新版本 - ArchLinux:轻量简洁
- Gentoo:极致性能,不提供传统意义的安装程序
- LFS:Linux From scratch 自制 Linux
- Android:kernel+busybox(工具集)+java 虚拟机
- Linux 分支参考网站:http://futurist.se/gldt/
- 阿里巴巴开源镜像站:https://opsx.alibaba.com/mirror
- 网易开源镜像站:http://mirrors.163.com/
1.6. systemd 初始化进程
Linux 操作系统的开机过程是这样的,即从 BIOS 开始,然后进入 Boot Loader,再加载系统内核,然后内核进行初始化,最后启动初始化进程。初始化进程作为 Linux 系统的第一个进程,它需要完成 Linux 系统中相关的初始化工作,为用户提供合适的工作环境。红帽 RHEL 7 系统已经替换掉了熟悉的初始化进程服务 System V init,正式采用全新的 systemd 初始化进程服务。systemd 初始化进程服务采用了并发启动机制,开机速度得到了不小的提升。
systemd 与 System V init 的区别以及作用
System V init 运行级别 | systemd 目标名称 | 作用 |
---|---|---|
0 | runlevel0.target, poweroff.target | 关机 |
1 | runlevel1.target, rescue.target | 单用户模式 |
2 | runlevel2.target, multi-user.target | 等同于级别 3 |
3 | runlevel3.target, multi-user.target | 多用户的文本界面 |
4 | runlevel4.target, multi-user.target | 等同于级别 3 |
5 | runlevel5.target, graphical.target | 多用户的图形界面 |
6 | runlevel6.target, reboot.target | 重启 |
emergency | emergency.target | 紧急 Shell |
1.6.1. systemd 初始化进程服务
如果想要将系统默认的运行目标修改为 “多用户,无图形” 模式,可直接用 ln 命令把多用户模式目标文件连接到 /etc/systemd/system/default.target:
ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
更多 Systemd 相关知识请参见 Systemd 入门教程:命令篇 - 阮一峰的网络日志
1.6.2. System V init 运行级别
init 命令是 Linux 下的进程初始化工具,init 进程是所有 Linux 进程的父进程,它的进程号为 1。init 命令是 Linux 操作系统中不可缺少的程序之一,init 进程是 Linux 内核引导运行的,是系统中的第一个进程。
使用 init 命令很简单。直接输入 init + 你想要的模式
回车就行。
比如输入:
init 0 # 就是关机
init 3 # 就是切换到多用户 - 命令行模式
init 5 # 就是切换到图形化界面
init 6 # 就是重启
1.6.3. 运行级别
到底什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从 0 到 6 ,具有不同的功能。你也可以用 cat /etc/inittab
查看它的英文介绍。
1.7. 用户登录
- root 用户(即 UID 为 0 的用户):
一个特殊的管理帐户
也被称为超级用户
root 已接近完整的系统控制
对系统损害几乎有无限的能力
除非必要,不要登录为 root - 普通( 非特权 )用户:
权限有限
造成损害的能力比较有限
1.8. 什么是 Shell
- Shell 是 Linux 系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行
- Shell 也被称为 LINUX 的命令解释器(command interpreter)
- Shell 是一种高级程序设计语言

1.8.1. bash shell
- GNU Bourne-Again Shell (bash) 是 GNU 计划中重要的工具软件之一,目前也是 Linux 标准的 shell,与 sh 兼容
- CentOS 默认使用
1.8.2. 命令提示符
- 命令提示符:prompt
[root@localhost ~]#
# 管理员
[lxl@centos7 ~]$
$ 普通用户
- 显示提示符格式:
echo $PS1
- 修改提示符格式:
# [当前用户的账号名称@主机名的第一个名字 工作目录的最后一层目录名]命令提示符
PS1='[\u@\h \W]\$ '
# 不停闪烁的提示符样式
PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$ \[\e[0m\]"
# 黄字红底([\e[31;40m]),依次显示24小时格式时间(\t)、当前用户的账号名称(\u)、主机的第一个名字(\h)、完整的当前工作目录名称(\w)
PS1="\[\e[1;2;41;33m\][\t \u@\h \w]\\$ \[\e[0m\]"
在 PS1 中设置的参数与含义对照表
参数 | 含义 |
---|---|
\d | 可显示出『星期 月 日』的日期格式,如:“Mon Feb 2” |
\H | 完整的主机名。 |
\h | 仅取主机名在第一个小数点之前的名字 |
\t | 显示时间,为 24 小时格式的『HH:MM:SS』 |
\T | 显示时间,为 12 小时格式的『HH:MM:SS』 |
\A | 显示时间,为 24 小时格式的『HH:MM』 |
\@ | 显示时间,为 12 小时格式的『am/pm』样式 |
\u | 目前使用者的账号名称,如『root』 |
\v | BASH 的主版本信息 |
\w | 完整的工作目录名称,由根目录写起的目录名称,但家目录会以 ~ 取代 |
\W | 利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名 |
\! | 命令历史数 |
\# | 开机后命令历史数 |
\$ | 提示字符,如果是 root 时,提示字符为 # ,否则就是 $ |
在 PS1 中设置字符颜色的格式为:\e[F;Bm
,其中 “F” 为字体颜色,编号为 30-37,“B” 为背景颜色,编号为 40-47。可通过 \e[0m
关闭颜色输出;特别的,当B为1时,将显示加亮加粗的文字。
# 加亮加粗绿色字(\e[32;1m),依次显示24小时格式时间『HH:MM』(\A)、当前用户的账号名称(\u)、主机名(\h)、当前工作目录绝对路径(\w)
PS1="\[\e[32;1m\][\A \u@\h \w]\\$ \[\e[0m\]"
# 日期和时间用红色,账号@主机名用绿色,当前路径用黄色,在命令提示符处换行
PS1="[ \[\e[31;1m\]\d \t\[\e[0m\] \[\e[32;1m\]\u@\h\[\e[0m\] \[\e[33;1m\]\w\[\e[0m\] ] \[\e[32;1m\]\n\\$ \[\e[0m\]"
PS1='\e[32;1m[\A \u@\h \w]\$ \e[0m' # 若采用此种方式进行设置,则输入长命令时会出现不换行的故障,导致显示不正常
颜色对照表
F | B | 颜色 |
---|---|---|
30 | 40 | 黑色 |
31 | 41 | 红色 |
32 | 42 | 绿色 |
33 | 43 | 黄色 |
34 | 44 | 蓝色 |
35 | 45 | 紫红色 |
36 | 46 | 青蓝色 |
37 | 47 | 白色 |
这行配置可以写到 /etc/profile
下(写完记得 source /etc/profile
一下,让配置生效),也可以写到个人用户的环境变量配置文件中。
1.8.3. 命令分类
在shell中可执行的命令有两类:
- 内部命令:由shell自带的,而且通过某命令形式提供
help # 内部命令列表
enable CMD # 启用内部命令
enable –n CMD # 禁用内部命令
enable –n # 查看所有禁用的内部命令
- 外部命令:在文件系统路径下有对应的可执行程序文件
查看路径:which -a |--skip-alias ; whereis
1.8.4. bash 中常用快捷键
快捷键 | 作用 |
---|---|
Ctrl + L | 清屏,相当于 clear 命令。 |
Ctrl + A | 光标移到命令行首,相当于 Home 键。 |
Ctrl + E | 光标移到命令行尾,相当于 End 键。 |
Ctrl + U | 从光标处删除⾄命令行首。 |
Ctrl + K | 从光标处删除⾄命令行尾。 |
Ctrl + C | 终止命令。 |
Ctrl + W | 从光标处删除至词首(往左删除,以空格分隔)。 |
Ctrl + Y | 粘贴 ctrl+U 或 ctrl+K 剪切的内容。 |
Ctrl + 左方向键 | 光标左移一个单词(以空格分隔)。 |
Ctrl + 右方向键 | 光标右移一个单词(以空格分隔)。 |
1.9. 必知必会命令
- 如何查看当前使用的 shell:
echo ${SHELL}
[root@CentOS7 ~]# echo ${SHELL}
/bin/bash
- 如何查看本机所有的 shell:
cat /etc/shells
[root@centos7 ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
- 判断内部还是外部命令:
tpye COMMAND
[root@centos7 ~]# type man
man is /bin/man # 这是一个外部命令
[root@centos7 ~]# type cd
cd is a shell builtin # 这是一个内部命令
[root@centos7 ~]# type ls
ls is aliased to `ls --color=
` # 这是一个别名命令
- 查看登陆当前系统的用户:
whoami
[root@centos7 ~]# whoami
root
- 查看当前所有系统登录的用户:
who
[root@centos7 ~]# who
lxl pts/0 2019-03-21 14:46 (192.168.20.1)
- 显示系统当前使用登录会话及所做操作:
w
[root@centos7 ~]# w
20:53:48 up 6:08, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
lxl pts/0 192.168.20.1 14:46 4.00s 0.41s 0.29s sshd: lxl [priv]
- 通过用户名查看用户的 UID、GID:
id
[root@centos7 ~]# id root
uid=0 (root) gid=0 (root) groups=0 (root)
- 查看文件的具体存储信息和时间等信息:
stat FILENAME
[root@centos7 ~]# stat anaconda-ks.cfg
File: ‘anaconda-ks.cfg’
Size: 1959 Blocks: 8 IO Block: 4096 regular file
Device: 802h/2050d Inode: 201326658 Links: 1
Access: (0600/-rw-------) Uid: (0/ root) Gid: (0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2019-03-19 00:58:06.037999203 +0800
Modify: 2019-03-19 00:56:19.553934247 +0800
Change: 2019-03-19 00:56:19.553934247 +0800
Birth: -
- 长时间执行远程终端窗口,不退出连接的命令(可在会话间自由切换):
screen
- 创建新screen会话:
screen –S [SESSION]
- 加入screen会话:
screen –x [SESSION]
- 退出并关闭screen会话:
exit
- 剥离当前screen会话:
Ctrl+A+D
- 显示所有已经打开的screen会话:
screen -ls
- 恢复某screen会话:
screen -r [SESSION]
-
hexdump
命令一般用来查看“二进制”文件的十六进制编码,但实际上它能查看任何文件,而不只限于二进制文件。 -
sz
和rz
命令
rz
,sz
是 Linux/Unix 同 Windows 进行 ZModem 文件传输的命令行工具,对传输的数据会进行核查,并且有很好的传输性能。使用起来更是非常方便,但前提是 Windows 端需要支持 ZModem 的 telnet/ssh 客户端(比如 SecureCRT、Xshell 等)。注意:该方法的传输速度比较慢,推荐用于中小文件的传输,如配置文件等。
sz
:将 Linux/Unix 中选定的文件发送(send)到本地 Windows 机器:
# 发送文件 filename1 filename2 … 至本地机器
sz filename1 filename2 …
rz
:客户端会弹出一个文件选择窗口,从本地 windows 选择(可多选)好文件后上传到服务器 (receive)
# 以二进制文件接收覆盖,强制发送方转义所有控制字符
rz –be
1.10. 如何获取帮助
获取帮助的能力决定了技术的能力!可从以下几个方面获取多层次的帮助:
whatis
COMMAND --help
man
和info
- 通过本地文档获取帮助:
/usr/share/doc/
- 通过在线文档获取帮助
- 其它网站和搜索
1.10.1. 通过本地文档获取帮助
- /usr/share/doc目录
- 多数安装了的软件包的子目录,包括了这些软件的相关原理说明
- 常见文档:README INSTALL CHANGES
- 不适合其它地方的文档的位置
- 配置文件范例
- HTML/PDF/PS 格式的文档
- 授权书详情
1.10.2. 通过在线文档获取帮助
- 第三方应用官方文档
- 通过发行版官方的文档光盘或网站可以获得
- 安装指南、部署指南、虚拟化指南等
- 红帽知识库和官方在线文档
1.10.3. 其它网站和搜索
- http://tldp.org
- http://www.slideshare.net
- http://www.google.com
- Openstack filetype:pdf
- rhca site:redhat.com/docs