Appearance
Linux 概述
Unix 介绍
Unix 是一个强大的多用户、多任务操作系统
Linux 介绍
- Linux 是一套免费的类 Unix 操作系统
- Linux 是一套免费使用和自由传播的类 Unix 操作系统,可以任意修改其源代码。
- Linux 存在着许多不同的 Linux 版本,但它们都使用了 Linux 内核。
Linux 的特点:它是多用户,多任务,丰富的网络功能,可靠的系统安全,良好的可移植性,具有标准兼容性,良好的用户界面,出色的速度性能
- Linux 的基本思想有两点:
- 一切都是文件
- 每个软件都有确定的用途
全字符界面,需要任何页面效果渲染,速度快。linux安全性好,开源
比如:window系统安装tomcat软件,网络中的其他的电脑默认都可以访问tomcat。linux如果安装了tomcat,网络中的其他的电脑默认是无法访问tomcat的,必须要通过设置相关操作才可以访问。所以linux安全性方面比window做的好,从这点可以看出安全性高的linux适合做服务器,安全性低的window适合普通个人用户使用。
Linux 系统的应用
- 服务器系统:Web 应用服务器、数据库服务器、接口服务器、DNS、FTP 等等;
- 嵌入式系统:路由器、防火墙、手机、PDA、IP 分享器、交换器、家电用品的微电脑控制器等等,高性能运算、计算密集型应用:Linux 有强大的运算能力。
- 桌面应用系统
- 移动手持系统:android底层就是linux系统
Linux 的版本
Linux 的版本分为两种:内核版本(https://www.kernel.org/)和发行版本。
- 内核版本是指在 Linus 领导下的内核小组开发维护的系统内核的版本号
- 发行版本是一些组织和公司根据自己发行版的不同而自定的
目前学习使用的版本 CentOS是 Linux 发行版之一。Red Hat Enterprise Linux 提供的源代码编译而成。很多公司使用 CentOS 替代商业版 RedHat Linux
Linux 目录结构

/:根目录,一般根目录下只存放目录,不要存放文件。/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中
/bin::/usr/bin: (binaries)存放二进制可执行文件。如常用的命令ls、tar、mv、cat等。/boot:放置 linux 系统启动时用到的一些文件。/boot/vmlinuz为 linux 的内核文件,以及/boot/gurb。建议单独分区,分区大小 100M 即可
/dev:(devices) 存放 linux 系统下的设备文件,访问该目录下某个文件,相当于访问某个设备。- 常用的是挂载光驱
mount/dev/cdrom/mnt。
- 常用的是挂载光驱
/etc:(etcetera) 系统配置文件存放的目录,不建议在此目录下存放可执行文件。- 重要的配置文件有
/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11、/etc/sysconfig、/etc/xinetd.d修改配置文件之前记得备份。注:/etc/X11存放与 x windows 有关的设置。
- 重要的配置文件有
/home:系统默认的用户家目录,新增用户账号时,用户的家目录都存放在此目录下,~表示当前用户的家目录,~test表示用户test的家目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据/lib:(library)/usr/lib:/usr/local/lib:系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,比较重要的目录为/lib/modules。/root: 系统管理员 root 的家目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。/sbin: (super user binaries)/usr/sbin:/usr/local/sbin: 放置系统管理员使用的可执行命令。- 如
fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root账号使用的命令,一般用户只能"查看"而不能设置和使用。
- 如
/usr:(unix shared resources) 应用程序存放目录/usr/bin:存放应用程序/usr/share:存放共享数据/usr/lib:存放不能直接运行的,却是许多程序运行所必需的一些函数库文件。/usr/local:存放软件升级包。/usr/share/doc:系统说明文件存放目录。/usr/share/man:程序说明文件存放目录,使用man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间
/var:(variable) 放置系统执行过程中经常变化的文件,如:/var/log:随时更改的日志文件/var/log/message:所有的登录文件存放目录/var/spool/mail:邮件存放的目录/var/run:程序或服务启动
/opt:给主机额外安装软件所摆放的目录。以前的 Linux 系统中,习惯放置在/usr/local目录下/tmp:(temporary) 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下/srv:服务启动之后需要访问的数据目录,如 www 服务需要访问的网页数据存放在/srv/www内/mnt:/media:(mount)光盘默认挂载点,通常光盘挂载于/mnt/cdrom下,也不一定,可以选择任意位置进行挂载。/proc:此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等
Linux 使用小细节总结
终端仿真器
bash
[root@MoonKirA ~]#以上登陆系统后显示的终端仿真器,如果提示符的最后一个字符是 #,那么意味着这个终端会话是拥有超级用户权限;如果是 $,则是普通用户
关于文件名的重要规则
- 以 “
.” 字符开头的文件名是隐藏文件。直接使用ls或者ll命令是否无法列出它们,需要使用ls -a或者ll -a才能显示这些文件。 - 文件名和命令名是大小写敏感的。文件名“File1”和“file1”是指两个不同的文件名。
- Linux 没有“文件扩展名”的概念。与其它系统不一样,文件不是根据文件的扩展名来决定该文件的用途与内容。但是有些应用程序还是会根据扩展名来决定文件的作用!
- Linux 支持长文件名,文件名可能包含空格,标点符号。但标点符号仅限使用“
.”(点),“-”(中划线),“_”(下划线)。最重要的是,不要在文件名中使用空格。如果想表示词与词间的空格,用下划线字符来代替。过些时候,你会感激自己这样做。
vi / vim 文档编辑器
简介
vi 是 Linux 操作系统是最常用的文本编辑器。vi 编辑器是所有 linux 的标准编辑器,用于编辑任何 ASCⅡ 文本,对于编辑源程序尤其有用。vi 编辑器功能非常强大,可以对文本进行创建,查找,替换,删除,复制和粘贴等操作。
在 linux 系统 shell 提示符中输入 vi 文件名 后,就进入 vi 编辑界面。如果系统内还不存在该文件,就等于新建文件,如果系统内存在给文件,就意味着编辑该文件。
而 vim 可以理解为 vi 的升级版。
vi 命令
语法格式与参数
语法格式:
bash
vi [参数] [文件名]常用参数:
| 参数 | 作用 |
|---|---|
-s | 静默模式 |
-- -cmd<命令> | 加载任何vimrc文件之前执行指定命令 |
-R | 只读模式 |
-v | Vi 模式 |
-e | Ex 模式 |
-y | 简易模式 |
-- -- | 之后只有文件名 |
-c<命令> | 加载第一个文件之后执行指定命令 |
-s<脚本输入文件> | 从指定脚本输入文件阅读普通模式命令 |
-w<脚本输出文件> | 追加所有类型的命令写入脚本输出文件 |
-W<脚本输出文件> | 写入所有类型的命令到指定脚本输出文件 |
+ | 从文件末尾开始 |
+<行数> | 从指定行开始 |
-- -noplugin | 不要加载插件脚本 |
-p<数量> | 打开指定数量的标签页(带文件名) |
-r<文件名> | 恢复崩溃的会话 |
-L | 等同于-r |
-r | 列出交换文件并退出 |
-u<vimrc> | 熟用指定vimrc,而不是.vimrc |
-T<终端> | 设置使用指定终端 |
-o<数量> | 打开指定数量的窗口 |
-n | 不使用交换文件,只用内存 |
-Z | 受限模式 |
-m | 不允许修改(写入) |
-b | 二进制模式 |
-M | 在文本中不允许修改 |
示例
- 使用vi编辑器
vi- 编辑指定文件
vi linuxcool.log- 从第6行开始编辑指定文件
vi +6 linuxcool.log- 以只读模式打开指定文件
vi -R linuxcool.logvi / vim 基础
基本上 vi 可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
- 命令行模式 command mode):控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入 Insert mode 下,或者到 last line mode。
- 插入模式(Insert mode):只有在 Insert mode 下,才可以做文字输入,按「ESC」键可回到命令行模式。
- 底行模式(last line mode):将文件保存或退出 vi,也可以设置编辑环境,如寻找字符串、列出行号……等。
基本操作
- 输入
vim 文件名进入“一般模式” - 按下
i从一般模式,进入“插入模式” - 按下“esc”从“插入模式”退出到“一般模式”
- 在“一般模式”下,输入
:wq,退出编辑。

vi/vim 键盘图

Vim 操作命令速查表(15 张)
进入 vim

vim 配置

移动光标

gg移动文本的第一行Shift+g移动到文本的最后一行
屏幕滚动

插入文本类
需要从一般模式进入到插入模式

i在光标前插入shift+i在光标当前行开始插入a在光标后插入shift+a在光标当前行末尾插入o在光标当前行的下一行插入新行shift+o在光标当前行的上一行插入新行
删除命令

dd删除当前光标所在的一行ndd删除当前行及其后面 n-1 行。(即总删除 n 行)
Vim 命令删除文本的所有内容
清空文件内容:
- 方法1: 输入
ggdG - 方法2: 输入
:%d-> 回车
删除多行:
- 首先在命令模式下,输入
:set nu显示行号。 - 通过行号确定要删除的行。
- 命令模式下输入
:32,65d,按回车键,32-65 行就被删除了
如果无意中删除错了,可以在命令模式下使用 u 键恢复
复制粘贴
复制或粘贴功能是在浏览模式下进行操作:

yy单行复制,将光标移动到将要复制的行处- nyy 多行复制,将光标移动到将要复制的首行处
- p 粘贴,将光标移动到将要粘贴的行处。粘贴的内容是使用
x或者d删除的文本
撤销

搜索及替换

/关键字从文档当前位置向下查找关键字,按 n 键查找关键字下一个位置?关键字从文档挡圈位置向上查找关键字,按 n 键向上查找关键字n在同一方向重复上一次搜索命令Shift+n在反方向上重复上一次搜索命令
书签

visual 模式

行方式命令

若不指定 n1,n2,则表示将整个文件内容作为 command 的输入 |
宏

窗口操作

文件及其他

:q退出 vi,不保存(没有做任何修改时):q!强制退出并且不保存:w保存当前文件,不退出:wq保存当前文件后退出
Linux 的硬链接和软链接
Linux 中的硬链接和软链接(符号链接)的主要区别包括:
硬链接:
- 指向文件的 inode。
- 不能跨文件系统。
- 删除原文件后,硬链接仍然可以访问文件内容。
- 不可以链接目录。
软链接(符号链接):
- 类似于 Windows 的快捷方式,指向文件的路径。
- 可以跨文件系统。
- 如果原文件被删除或移动,软链接将失效。
- 可以链接目录。
这两种链接类型在文件系统中有着不同的使用场景和优劣。
Linux 的I/O调度器
Linux 中的I/O调度器负责管理对磁盘的读写请求。主要类型及其特点包括:
- CFQ(完全公平队列)调度器:为每个进程提供公平的磁盘时间。适用于多任务和通用系统。
- Deadline 调度器:确保请求在一定时间内完成,优先处理即将到期的请求。适用于需要快速响应的系统。
- NOOP(无操作)调度器:是一个简单的FIFO队列,适用于高级存储系统(如SSD)。
- Anticipatory 调度器:基于启发式方法,预测下一个即将到来的I/O请求,减少磁盘寻道时间。
根据系统的具体需求和硬件配置,选择合适的I/O调度器可以显著提高系统性能。
其他
查看当前系统的版本
bash
getconf LONG_BIT输入以上命令后,如果返回的结果是32则说明是32位,返回的结果是64则说明是64位。
远程连接工具
实际开发中,Linux 服务器都在其他的地方,要通过远程的方式去连接 Linux 并操作它,Linux 远程的操作工具有很多,企业中常用的有 Puttty、secureCRT、SSH Secure 等。
客户端远程工具连接 linux 的操作顺序:
- 虚拟机启动 linux,并登录系统
- 打开客户端远程连接工具
SSH Secure
SSH Secure 是免费的图形化界面及命令行窗口集一身的远程工具。使用步骤如下:
- 进行远程连接前,先获取虚拟机的ip地址:

- 点击图形化界面图标,进入界面:

注意上面这个工具不支持传送中文名字文件,会出现乱码。


关于 SSH Secure 远程连接工具乱码解决方案:
使用远程工具进行连接时,如果 linux 有中文文件或目录,显示时会出现乱码,原因是 linux 编码是 UTF-8,而远程工具默认是当前系统本地编码即 GBK。所以解决方案是统一两者编码就 OK 了,但是该 SSH Secure 工具不能设置编码,所以通过修改 linux 的系统编码的方式进行统一编码。
在 linux 的 /etc/sysconfig 目录下有一个 i18n 的文件,配置了 linux 的系统编码。

将 LANG="zh_CN.UTF-8" 修改成 LANG="zh_CN.GBK",重新连接 linux 即可
使用 rm -f 误删除后如何恢复(网上资料,待实践)
模拟场景-删除
误删除服务器目录/root/selenium/Spider下的MySql.Data.dll文件:
shell
> rm -f /root/selenium/Spider/MySql.Data.dll
> ll /root/selenium/Spider/MySql.Data.dll
ls: cannot access /root/selenium/Spider/MySql.Data.dll: No such file or directory恢复
- 使用lsof命令查看当前是否有进程打开/root/selenium/Spider/MySql.Data.dll文件:
shell
> lsof | grep /root/selenium/Spider/MySql.Data.dll从上面可以看出,当前文件状态为已删除(deleted)。
- 查看是否存在恢复数据:
/proc/13067/fd:进程操作的文件描述符目录。
86:文件描述符。
shell
> cat /proc/13067/fd/86- 使用I/O重定向恢复文件:
shell
> cat /proc/23778/fd/86 > /root/selenium/Spider/MySql.Data.dll
> ls -l /root/selenium/Spider/MySql.Data.dll
-rw-r--r-- 1 root root 702464 Feb 10 12:03 /root/selenium/Spider/MySql.Data.dll重新运行程序:说明恢复的文件没有问题。
分析
- 通过前面的模拟场景演示了恢复文件的整个过程,那么原理是什么,在什么情况下,文件才是可恢复的。
- 在Linux系统中,每个运行中的程序都有一个宿主进程彼此隔离,以/proc/进程号来体现(Linux本质上就是一个文件系统)。
- 比如:
ls -l /proc/13067查看进程PID为13067的进程信息;当程序运行时,操作系统会专门开辟一块内存区域,提供给当前进程使用,对于依赖的文件,操作系统会发放一个文件描述符,以便读写文件,当我们执行 rm -f 删除文件时,其实只是删除了文件的目录索引节点,对于文件系统不可见,但是对于打开它的进程依然可见,即仍然可以使用先前发放的文件描述符读写文件,正是利用这样的原理,所以我们可以使用I/O重定向的方式来恢复文件。
总结
如果不小心误删了文件,不要着急,首先使用 lsof 查看打开该文件的进程,然后再使用 cat /proc/进程号/fd/文件描述符 查看恢复数据,最后使用I/O重定向的方式来恢复文件。
Linux 的 inode
在 Linux 中,inode 是文件系统中的一个重要概念。它代表了文件系统中的一个文件或目录的元数据。inode 包含的信息包括:
- 文件类型:如普通文件、目录、字符设备、块设备等。
- 权限:文件或目录的访问权限,如读、写和执行权限。
- 所有者和组:文件或目录的所有者ID和组ID。
- 文件大小:文件的大小。
- 时间戳:文件的创建时间、最后访问时间和最后修改时间。
- 数据块指针:指向实际存储文件内容的磁盘块的指针。
每个文件或目录都有一个唯一的 inode 号,可以使用 ls -i 查看。