Linux操作系统
操作系统
首先操作系统是一种软件,是配置在计算机硬件上的第一层软件。
作用是向下控制硬件向上支持软件运行,并将其管理硬件的程序封装成系统调用,通过终端命令或用户操作界面来使用系统调用,以方便其他应用软件使用。
操作系统的必要性
没有安装操作系统的计算机,通常被称为裸机,如果想在裸机上运行自己所编写的程序,就必须用机器语言(0101)书写程序。
如果计算机上安装了操作系统,就可以在操作系统上安装支持的高级语言环境,用高级语言开发程序
Linux版本
内核 | 是运行程序和管理硬件设备的核心程序,它提供了一个在裸设备与应用程序间的抽象层 |
---|---|
发行版 | 通常包括桌面环境、办公套件、媒体播放器、数据库等应用软件,其使用是基于内核 |
Linux目录结构
首先Linux操作系统是多用户操作系统(一台计算机在同一时间可以由多个用户使用,多个用户共同享用系统的全部硬件和软件资源)。因此其没有盘符这个概念,只有一个根目录 /,所有文件都在根目录下面。
其中home
目录中的user1
,user2
,user3
分别是三个用户的用户名及个人的数据和设置(如桌面、文件、下载)私有的。home
目录外的数据则为个用户共享的软件和数据。
Linux 下文件和目录的特点
- Linux文件名或目录名最长可以有 256 个字符
- 以
.
开头的文件为 隐藏文件 - 相同目录下文件和子目录不可同名(123 和 .123 是不重名的两个目录)
- ~ 代表当前用户家目录
- . 代表当前工作目录
- . . 代表上一级目录
Linux目录速查表
- /:根目录,一般根目录下只存放目录,在 linux 下有且只有一个根目录,所有的东西都是从这里开始
当在终端里输入 /home,其实是在告诉电脑,先从 /(根目录)开始,再进入到 home 目录 - /bin、/usr/bin:可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat 等
- /boot:放置 linux 系统启动时用到的一些文件,如 linux 的内核文件:/boot/vmlinuz,系统引导管理器:/boot/grub
- /dev:存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,常用的是挂载光驱mount /dev/cdrom /mnt
- /etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d
- /home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下
- /lib、/usr/lib、/usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助
- /lost+fount:系统异常产生错误时,会将一些遗失的片段放置于此目录下
/mnt: /media:光盘默认挂载点,通常光盘挂载于 /mnt/cdrom 下,也不一定,可以选择任意位置进行挂载 - /opt:给主机额外安装软件所摆放的目录
- /proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的文件有:/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/* 等
- /root:系统管理员root的家目录
- /sbin、/usr/sbin、/usr/local/sbin:放置系统管理员使用的可执行命令,如 fdisk、shutdown、mount 等。与 /bin 不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能"查看"而不能设置和使用
- /tmp:一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下
- /srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在 /srv/www 内
- /usr:应用程序存放目录
- /usr/bin:存放应用程序
- /usr/share:存放共享数据
- /usr/lib:存放不能直接运行的,却是许多程序运行所必需的一些函数库文件
- /usr/local:存放软件升级包
- /usr/share/doc:系统说明文件存放目录
- /usr/share/man:程序说明文件存放目录
- /var:放置系统执行过程中经常变化的文件
- /var/log:随时更改的日志文件
- /var/spool/mail:邮件存放的目录
- /var/run:程序或服务启动后,其 PID 存放在该目录下
Linux终端命令
学习 Linux 终端命令的原因
在远程通过 SSH 客户端 来完成服务器维护工作时没有图形界面,所有的维护工作都需要通过终端命令来完成,因此作为后端程序员,必须要掌握一些 Linux 常用的终端命令。
终端命令格式
command [-options] [parameter]
说明:
command
:命令名,相应功能的英文单词或单词的缩写, 表示做什么
[-options]
:选项,可用来对命令进行控制,也可以省略, 选择怎么做
[parameter]
:传给命令的参数,可以是 零个、一个 或者 多个, 表示对谁做
[ ]
代表可选
常用命令
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
00 | ls [-alh] 指定目录 | list | 查看指定目录下的文件和子目录 |
01 | tree 指定路径 | tree | 以树状形式递归显示指定路径下的文件及子目录 |
02 | pwd | print work directory | 查看当前工作目录所在路径 |
03 | cd 工作目录 | change directory | 切换指定工作目录 |
04 | touch 指定路径/文件名 | touch | 在指定路径新建空白文件 |
05 | mkdir [-p] 指定路径/目录名 | make directory | 在指定路径新建空目录 |
06 | rm [-irf] 指定路径/文件 | remove | 删除指定目录下的文件 |
07 | cp [-ria] 路径/要拷贝的文件 路径/新路径文件名 | copy | 拷贝文件或目录 |
08 | mv [-i] 路径/要移动的文件 路径/新路径文件名 | move | 移动或重命名文件或目录 |
09 | cat [-b/n] 指定路径/文件名 | concatenate | 查看指定文件的全部内容 |
10 | more 指定路径/文件名 | more | 分屏显示指定文件的内容 |
11 | echo "想要显示的文本" | echo | 将echo后的文字参数显示到终端中 |
12 | 要重定向的内容 >/>> 文件 | - | 将本应显示到终端上的数据写入或追加到文件中 |
13 | grep [-i n/v] "条件文本" 文件名 | grep | 搜索文件内容中的条件文本并显示含有条件文本的行 |
14 | find [-name] 指定路径 条件 | find | 在指定路径下查找符合条件的文件 |
15 | 命令1 | 命令2 | - | 通过管道连接符将命令1的输出结果作为命令2的输入 |
16 | ln [-s] 链接名 链接文件 | link | 创建链接(加-s 选项为创建软链接, 不加为硬链接) |
17 | shutdown [-r] | shut down | 关机或重启(加-r 选项) |
18 | ifconfig | configure | 查看或配置计算机当前的网卡配置信息 |
19 | ping ip地址 | ping | 检测到目标 ip地址 的连接是否正常 |
20 | ssh [-p 端口号] 远程用户名@远程IP地址 | secure shell | 远程登录其他区用户,可执行1-15终端命令 |
21 | scp [-r] 用户1@IP地址:路径/文件 用户2@IP地址:路径/文件 | secure copy | 在远程服务器与本计算机之间相互拷贝文件和目录 |
22 | tar ,zip 和unzip | - | 压缩与解压 |
00. ls
格式:ls [选项] 路径/文件名
- 默认(没有
路径/文件名
)表示列出当前目录内的文件和子目录 - 一般只填写
路径
表示列出指定路径下的文件和子目录 - 若填写了
文件名
则表示仅列出本文件信息
选项 | 作用 |
---|---|
-a | 显示指定目录下所有子目录与文件,包括隐藏文件 |
-l | 以列表方式显示文件的详细信息 |
-h | 文件大小会加上合适的单位以人性化的方式显示, 只能配合 -l 选项使用 |
-F | 在显示名称的时候会在文件夹后添加\ ,在文件后面加* |
ls
与通配符
配合使用会起到显示当前文件夹中指定类型的文件
通配符 | 通配符作用 | 例子 | 例子含义 |
---|---|---|---|
* | 代表任意个任意字符 | ls 1* | 显示当前目录下所有以1开头的子目录和文件 |
? | 代表一个任意字符 | ls ?1 | 显示以任意字符开头以1结尾且名字只有两个字符的子目录和文件 |
[ ] | 代表该字符需在字符组中 | ls [a-c]* | 显示以a或b或c开头的子目录和文件,ls [abc]*也可 |
ls
与正则表达式
配合使用会起到显示当前文件夹中指定类型的文件
正则表达式 | 作用 | 例子 | 例子含义 |
---|---|---|---|
^ | 代表以什么开始 | ls ^12 | 显示当前目录下所有以12开头的子目录和文件 |
$ | 代表以什么结尾 | ls 12$ | 显示以任意字符开头以12结尾且名字的子目录和文件 |
. | 代表一个不是回车符的字符 | ls 1.1 | - |
更多正则表达式信息:本人正则表达式博客
03. cd
格式:cd 工作目录(包括绝对路径和相对路径)
工作目录
必须存在
命令 | 含义 |
---|---|
cd 或 cd ~ | 切换到当前用户的家目录(/home/用户目录) |
cd .. | 切换到上级目录 |
cd - | 可以在最近两次工作目录之间来回切换 |
相对路径: 路径是以 ./
(可省略)开始 ,表示相对 当前目录 所在的目录位置
绝对路径: 路径是以 /
或者~/
开始 ,表示从 根目录/家目录 开始的具体目录位置
04. touch
格式:touch 目录/文件名
在指定路径中创建一个空白文件(即使文件名没有后缀也是一文件)
- 如果文件 不存在,可以创建一个空白文件
- 如果文件 已经存在,可以修改文件的末次修改日期
05. mkdir
格式:mkdir [-p] 指定路径/目录名
作用:在指定路径创建一个空目录(即使目录名带有后缀)
- 若目录存在, 会报错
- 添加选项 -p 可以递归创建目录。例如:
mkdir -p a/b/c
06. rm
格式:rm [-irf] 目录/文件名或目录名
作用: 删除指定目录中的文件或目录
注意: 使用rm
时是不能直接删除目录和不存在的文件,并且文件删除后不能恢复
选项 | 含义 |
---|---|
-i | 交互式提示 rm:是否删除普通文件 '文件名或目录名'? |
-f | 强制删除,忽略不存在的文件,无需报错提示 |
-r | 递归地删除目录及其下的所有内容,删除文件夹 时必须加此选项 |
注意:
rm
后可以跟多个文件名或目录名, 表示删除多个文件或目录, 也可以配合通配符
中的*
(任意个任意字符)和?
(一个任意字符)来使用- 在删除目录时使用了交互式提示(
-ri
), 则会提示是否进入目录内部, 若选择no
则会退出删除, 若选择y/yes
则会依次提示是否删除目录下的文件或子目录
07. cp
格式:cp [-ira] 源文件路径/源文件名或目录名 目标路径/新文件名或目录名
作用: 拷贝指定路径下的源文件或目录到目标路径下并且改为新文件名或目录名
注意: 源文件或目录和目标路径必须有效
- 若没有源文件目录路径, 则表示要拷贝当前目录下的文件和目录
- 若没有目标文件目录路径, 则表示拷贝到当前工作目录下
- 若没有新文件名或目录名, 则表示只拷贝不改名
- 若要拷贝目录, 必须添加
-r
选项 - 当出现同名文件时,其默认为直接覆盖
选项 | 含义 |
---|---|
-i | 出现同名文件时,覆盖文件前提示 |
-r | 递归地拷贝目录及其下的所有内容 |
-a | 保留文件的原有权限和信息 |
-v | 显示拷贝后的路径描述 |
注意:
- 拷贝文件夹并且文件权限不丢失使用
cp –ira
操作 - 可以配合
通配符
中的*
(任意个任意字符)和?
(一个任意字符)来复制一些列文件或目录
08. mv
格式:mv [-f] 源文件路径/源文件名或目录名 目标路径/新文件名或目录名
作用: 移动指定路径下的源文件或目录到目标路径下并且改为新文件名或目录名
注意: 源文件或目录和目标路径必须有效
- 若没有源文件目录路径, 则表示要移动当前目录下的文件和目录
- 若没有目标文件目录路径, 则表示移动到当前工作目录下
- 若没有新文件名或目录名, 则表示只移动不改名
- 若既没有源文件目录有没有目标文件目录, 则表示文件重命名
- 当出现同名文件时,其默认为直接覆盖
选项 | 含义 |
---|---|
-f | 出现同名文件时,覆盖文件前提示 |
注意: 可以配合通配符
中的*
(任意个任意字符)和?
(一个任意字符)来移动一些列文件或目录
09. cat
格式:cat [-b/n] /文件路径/文件名
作用: 一次性的完整显示文件所有内容
注意: 路径有效且文件存在
选项 | 含义 |
---|---|
-b | 对非空行编号显示,仅将非空行按顺序标出行号 |
-n | 对所有行编号显示,所有行皆按顺序标出行号 |
10. more
格式:more /文件路径/文件名
作用: 分屏显示文件所有内容
操作键 | 功能 |
---|---|
空格键 | 显示分屏页的下一页 |
Enter(回车键) | 一次滚动 分屏页的一行 |
b | 回滚一页 |
f | 前滚一页 |
q | 退出 |
/word | 搜索 word 字符串 |
11. echo
将echo
后的文字参数显示到终端中,常配合重定向使用
12. > 和 >> (重定向)
重定向为:将命令执行结果即本应显示在终端上的内容 写入或追加 到指定文件中
格式:要重定向的内容 >/>> 指定文件
其中:
>
表示写入,会覆盖文件原有的内容
>>
表示追加,会将内容追加到已有文件的末尾
若指定文件不存在,则会新建文件并将内容重定向进去
常用于:
- 结合
echo
使用:echo "想追加的内容" >> a.txt
(将想追加的内容
追加到指定文件中) - 结合
cat
使用:cat 1.txt, 2.txt >>3.txt
(将三个文件内容合并) ls -hl > a.txt
、tree > a.txt
等…
13. grep
格式:grep [-i n/v] “匹配文本” /文件路径/文件名
作用: 查找指定文件中的是否存在匹配文本
, 若存在则显示匹配文本
所在行, 并标亮匹配文本
; 若不存在,则不显示任何内容
选项 | 含义 |
---|---|
-n | 显示具有匹配文本的行及行号 |
-v | 显示不包含匹配文本的所有行(相当于求反) |
-i | 忽略大小写 |
注意: 在使用-v
选项取反时, 是显示文本中不存在匹配文本
的所有行, 而不是显示所有行且标亮所有非匹配文本
的内容
"匹配文本"
可以配合正则表达式中的^
(以…开头)和$
(以…结尾)使用
^a
|行首查找,搜寻以 a 开头的行ke$
|行尾查找,搜寻以 ke 结束的行
拓展: wc -l
用于统计数据的行数
grep "s$" 1.py | wc -l
统计1.py
中以s结尾的行数
14. find
格式:find 指定目录 -name "文件名或目录名"
作用: 在指定目录下查找文件或目录
选项 | 含义 |
---|---|
-name | 根据文件名或目录名 字查找 |
-v | 显示不包含匹配文本的所有行(相当于求反) |
-i | 忽略大小写 |
注意: 在使用-v
选项取反时, 是显示文本中不存在匹配文本
的所有行, 而不是显示所有行且标亮所有非匹配文本
的内容
"文件名或目录名"
可以配合通配符
中的*
(任意个任意字符)和?
(一个任意字符)来模糊查找
15. 管道 |
格式:命令1 [选项] [参数] | 命令2 [选项] [参数] | 命令3 ......
作用:将第一个命令的输出 通过管道连接符 做为 第二个命令的输入
常用的场景:
结合more
:分屏显示内容. 例:ls -alh / | more
结合grep
:在命令执行结果的基础上查询指定的文本. 例:ls -alh / | grep -i ^a
注意:
- 命令1必须有输出结果, 命令2一定需要输入
- 可以通过多个管道连接符将多个命令连接起来
例:find / -name ".py" | grep -i "/home/python/" | grep -v "home/python/." | more
16. 链接
格式:ln [-s] 绝对路径/文件名 绝对路径/链接名
常用的场景:当一个源文件的目录层级比较深时,可以给源文件在浅层次目录创建一个链接
选项 | 含义 |
---|---|
-s | 表示创建软连接, 若没有-s 表示创建硬链接 |
注意在创建链接时尽量使用绝对路径, 因为使用相对路径容易出错
-
软连接 (相当于Windows中的快捷方式) 使用较多
- 软连接中保存的是创建链接时得
绝对路径/文件名
, 而不是文件内容, 因此原文件不能删除 - 目录也可以创建软连接
- 软连接中保存的是创建链接时得
-
硬链接
- 类似于给源文件起了一个别名,也就是说这两个名字指向的是同一个文件数据
- 硬链接中保存的是数据的内容, 因此当原文件删除后依旧可以访问
- 创建硬链接文件的硬链接数会加一, 只用当硬链接数为零后, 文件内容才会删除
- 目录不能创建硬链接(目录的硬链接数为 子目录数+2 (
.
和..
))
17. shutdown
其功能为安全的 关闭 或者 重启 系统,远程维护服务器时,最好不要关闭系统,而应该重新启动系统
命令 | 选项和参数 | 含义 |
---|---|---|
shutdown | 不指定选项和参数 | 默认表示 1 分钟之后 关闭 电脑 |
shutdown -r now | 添加-r 选项和now 参数 | 表示立刻重启 |
shutdown -r +10 | 添加-r 选项和+10 参数 | 表示系统再过十分钟后自动重启 |
shutdown -r 20:22 | 添加-r 选项和时间参数20:22 | 表示系统在今天的 20:22 会重启 |
shutdown -c | 取消之前指定的关机计划 |
18. ifconfig
作用:查看或配置当前电脑的网卡信息
常用ifconfig | grep inet
命令查看网卡对应的 IP 地址
提示:一台计算机中有可能会有一个 物理网卡 和 多个虚拟网卡,在 Linux 中物理网卡的名字通常以 ensXX 表示
127.0.0.1 被称为 本地回环/环回地址,一般用来测试本机网卡是否正常
拓展:
- 网卡:一个专门负责网络通讯的硬件设备
- IP 地址:设置在网卡上的地址信息,每台联网的电脑上都有唯一的IP地址,其是保证电脑之间正常通讯的重要设置, 通过 IP 地址可以找到计算机
- 域名:由一串用点分隔的名字组成,例如:www.itcast.cn是IP 地址的别名,方便用户记忆
- 我们可以把 电脑 比作手机,网卡 相当于 SIM 卡,IP 地址 相当于手机号码,域名相当于联系人名字(唯一)
19. ping IP地址
ping IP地址
一般用于检测当前计算机到目标计算机之间的网络是否通畅,数值越大,速度越慢
原理:网络上的机器都有唯一确定的IP 地址,我们给目标 IP 地址发送一个数据包,对方就要返回一个数据包,根据返回的数据包以及时间,我们可以确定目标主机的存在
提示:执行ping命令后数据传输与接收是循环进行的,终止需按 CTRL + C
20. ssh
命令格式:ssh [-p 端口号] 远程服务器用户名@远程服务器IP地址或域名
作用:远程登录其他区用户,可执行0-17终端命令
- SSH传输是经过SSH协议 加密和压缩的,所以可以安全的快速传输
- 端口号是表示主机设备中的每个应用程序(需要网络通讯)
- 通过 端口号 可以找到 计算机上运行的应用程序
- SSH 服务器 的默认端口号是 22,在连接的时候,可以省略
- 若端口号非默认则需要使用
-p 选项
指定正确的端口号,否则无法正常连接到服务器
序号 | 服务 | 默认端口号 |
---|---|---|
01 | SSH 服务器 | 22 |
02 | Web 服务器 | 80 |
03 | HTTP | 80 |
04 | HTTPS | 443 |
05 | FTP 服务器 | 21 |
lsof -i :端口号
查看端口号
被谁占用
注意:
- 使用
exit
退出远程服务器用户登录, 否则都是在远程登录用户下操作 ssh
这个终端命令只能在Linux
或者UNIX
系统下使用
如果在Windows
系统中,需要安装PuTTY
或者XShell
客户端软件- 在使用
ssh
之前必须在系统上安装ssh服务
mac
系统自带Ubuntu
系统需要在终端中输入sudo apt-get install openssh-server
Windows
系统需要安装客户端
建立免密码登录
注意:有关 SSH 配置信息都保存在用户家目录下的 .ssh 目录下
- 配置公钥
执行ssh-keygen
生成 SSH 钥匙,一路回车即可 - 上传公钥到服务器
执行ssh-copy-id [-p 端口号] 用户名@IP地址或域名
让远程服务器记住我们的公钥
配置别名
每次使用ssh [-p 端口号] 远程服务器用户名@远程服务器IP地址或域名
命令时间久了会觉得很麻烦,而 配置别名 可以让我们进一步偷懒
如用:ssh mac
来替代上面这么一长串,那么就在~/.ssh/config
(新建config文件) 里面追加以下内容:
Host 别名(mac)
HostName ip地址(192.168.162.111)
User 远程登录用户名(xiaoming)
Port 端口号(22)
保存之后,即可用 ssh mac
实现远程登录了,scp 同样可以使用
21. scp
命令格式:scp [-r] 远程用户名1@ip地址1:绝对路径/要拷贝的文件 远程用户名2@ip地址2:绝对路径/新文件名
作用:在远程服务器与本计算机之间相互拷贝文件和目录
例如:scp -P 22 -r /hone/python/demo user@remote:/hone/python/Desktop
注意:
- 若没有
用户名1@ip地址1:
, 表示将本电脑中的绝对路径下的拷贝文件
上传到远程计算机1
的指定位置 - 若没有
用户名2@ip地址2:
, 表示将远程计算机2
中的绝对路径下的要拷贝文件
下载到本电脑的指定位置 - 若
用户名1@IP地址1
与用户名2@IP地址2
都存在, 则表示从计算机1
中往计算机2
中拷贝文件 :
后面没有空格
并且尽量使用绝对路径, 如果不是绝对路径,则以用户的家目录作为参照路径- 在指定端口时用的是大写的
-P
而非小写 - 拷贝目录需加
-r
- 在
Windows
系统中, 不能再C盘中操作, 会失败, 要切换到其他盘
22.压缩与解压
-
tar.gz
或..tgz
格式压缩包-
压缩
格式:tar [-zcvf] 压缩包名字 要压缩的文件或目录
-
解压
格式:tar [-zxvf] 压缩包名字 [-C] 解压到指定目录
-
-
tar.bz2
格式压缩包-
压缩
格式:tar [-jcvf] 压缩包名字 要压缩的文件或目录
-
解压
格式:tar [-jxvf] 压缩包名字 [-C] 解压到指定目录
-
注意:
- 选项中的
-
可以省略, 例如tar [-jcvf]
=tar [jcvf]
- 压缩时可以配合
通配符
是来压缩一系列文件和目录 - 压缩后压缩包大小: zip > tar.ga > tar.bz2
- 压缩包的后缀是在
压缩包名字
参数中自己指定的. 若包是以tar.bz2(选项为[-jcvf])
格式压缩的, 但压缩包名字
指定的后缀为.tar.gz
也会压缩成功不会报错, 但是在解压时会产生歧义, 因为他人看见后缀名为.tar.gz
的压缩包就会使用tar.gz(选项为[-zxvf])
格式解压, 所以会解压失败. 因此在压缩包命名时应该遵循压缩包后缀名与压缩包格式一致的习惯
选项 | 说明 |
---|---|
-c | 创建打包文件 |
-v | 显示打包或者解包的详细信息 |
-f | 指定文件名称, 必须放到所有选项后面 , 因为其后需要跟压缩包名字 (参数) |
-z | 压缩或解压缩(.gz) |
-j | 压缩或解压缩(.bz2) |
-x | 解包 |
-C | 解压缩到指定目录 |
-
.zip
格式压缩包- 压缩
格式:zip 压缩包名字 要压缩的文件和目录
- 解压
格式:unzip 压缩包名字 [-d] 解压的路径
- 压缩
终端快捷键
放大终端窗口及文字:Ctrl + Shift + =
缩小终端窗口及文字:Ctrl + -
自动补全:Tab
清屏:Ctrl + l
历史命令切换标题:↑ 和 ↓
不执行本行命令:Ctrl + C
在当前终端再开一个并列终端窗口:Ctrl + Shift + t