Skip to content

Linux 概述

Unix 介绍

Unix 是一个强大的多用户、多任务操作系统

Linux 介绍

  • Linux 是一套免费的类 Unix 操作系统
  • Linux 是一套免费使用和自由传播的类 Unix 操作系统,可以任意修改其源代码。
  • Linux 存在着许多不同的 Linux 版本,但它们都使用了 Linux 内核。

Linux 的特点:它是多用户,多任务,丰富的网络功能,可靠的系统安全,良好的可移植性,具有标准兼容性,良好的用户界面,出色的速度性能

  • Linux 的基本思想有两点:
    1. 一切都是文件
    2. 每个软件都有确定的用途

全字符界面,需要任何页面效果渲染,速度快。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)存放二进制可执行文件。如常用的命令 lstarmvcat 等。
  • /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: 放置系统管理员使用的可执行命令。
    • fdiskshutdownmount 等。与/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 ~]#

以上登陆系统后显示的终端仿真器,如果提示符的最后一个字符是 #,那么意味着这个终端会话是拥有超级用户权限;如果是 $,则是普通用户

关于文件名的重要规则

  1. 以 “.” 字符开头的文件名是隐藏文件。直接使用ls或者ll命令是否无法列出它们,需要使用ls -a或者ll -a才能显示这些文件。
  2. 文件名和命令名是大小写敏感的。文件名“File1”和“file1”是指两个不同的文件名。
  3. Linux 没有“文件扩展名”的概念。与其它系统不一样,文件不是根据文件的扩展名来决定该文件的用途与内容。但是有些应用程序还是会根据扩展名来决定文件的作用!
  4. Linux 支持长文件名,文件名可能包含空格,标点符号但标点符号仅限使用“.”(点),“”(中划线),“_”(下划线)。最重要的是,不要在文件名中使用空格。如果想表示词与词间的空格,用下划线字符来代替。过些时候,你会感激自己这样做

vi / vim 文档编辑器

简介

vi 是 Linux 操作系统是最常用的文本编辑器。vi 编辑器是所有 linux 的标准编辑器,用于编辑任何 ASCⅡ 文本,对于编辑源程序尤其有用。vi 编辑器功能非常强大,可以对文本进行创建,查找,替换,删除,复制和粘贴等操作。

在 linux 系统 shell 提示符中输入 vi 文件名 后,就进入 vi 编辑界面。如果系统内还不存在该文件,就等于新建文件,如果系统内存在给文件,就意味着编辑该文件。

而 vim 可以理解为 vi 的升级版。

vi 命令

语法格式与参数

语法格式:

bash
vi [参数] [文件名]

常用参数:

参数作用
-s静默模式
-- -cmd<命令>加载任何vimrc文件之前执行指定命令
-R只读模式
-vVi 模式
-eEx 模式
-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.log

vi / 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 -> 回车

删除多行:

  1. 首先在命令模式下,输入 :set nu 显示行号。
  2. 通过行号确定要删除的行。
  3. 命令模式下输入 :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 的操作顺序:

  1. 虚拟机启动 linux,并登录系统
  2. 打开客户端远程连接工具

SSH Secure

SSH Secure 是免费的图形化界面及命令行窗口集一身的远程工具。使用步骤如下:

  1. 进行远程连接前,先获取虚拟机的ip地址:

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

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

关于 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

恢复

  1. 使用lsof命令查看当前是否有进程打开/root/selenium/Spider/MySql.Data.dll文件:
shell
> lsof | grep /root/selenium/Spider/MySql.Data.dll

从上面可以看出,当前文件状态为已删除(deleted)。

  1. 查看是否存在恢复数据:

/proc/13067/fd:进程操作的文件描述符目录。
86:文件描述符。

shell
> cat /proc/13067/fd/86
  1. 使用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 包含的信息包括:

  1. 文件类型:如普通文件、目录、字符设备、块设备等。
  2. 权限:文件或目录的访问权限,如读、写和执行权限。
  3. 所有者和组:文件或目录的所有者ID和组ID。
  4. 文件大小:文件的大小。
  5. 时间戳:文件的创建时间、最后访问时间和最后修改时间。
  6. 数据块指针:指向实际存储文件内容的磁盘块的指针。

每个文件或目录都有一个唯一的 inode 号,可以使用 ls -i 查看。

I know where dry desert ends, green grass grows · MooN