zoukankan      html  css  js  c++  java
  • Linux 基础

    0 运行环境

    • 本机系统:Windows 7

    • 虚拟机软件:Oracle VM VirtualBox 6

    • 虚拟机系统:CentOS 7

    1 Linux 安装

    详情参考这篇博文:

    VirtualBox 6 安装 CentOS 7:https://www.cnblogs.com/PikapBai/p/13513474.html

    2 Linux SSH 远程登录

    Linux 一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的 Linux 服务器。

    这时我们就需要远程登录到Linux服务器来管理维护系统。

    Linux 系统中是通过 SSH 服务实现的远程登录功能,默认 SSH 服务端口号为 22。

    详情参考这篇博文:

    MobaXterm 连接 VirtualBox 6 虚拟机中的 CenOS 7:https://www.cnblogs.com/PikapBai/p/13514531.html

    3 Linux 系统 启动过程

    3.1 内核引导

    当计算机打开电源后,首先是 BIOS 开机自检,按照 BIOS 中设置的启动设备来启动。操作系统接管硬件后,首先读入 /boot 目录下的内核文件

    3.2 运行 init

    init 进程是系统所有进程的起点,没有这个进程,系统中任何进程都不会启动。

    init 程序首先是需要读取配置文件 /etc/inittab。

    3.2.1 运行级别

    许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。

    init进程的一大任务,就是去运行这些开机启动的程序。

    但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。

    Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。

    Linux系统有 7 个运行级别(runlevel):

    • 运行级别 0:系统停机状态,系统默认运行级别不能设为 0,否则不能正常启动

    • 运行级别 1:单用户工作状态,root 权限,用于系统维护,禁止远程登陆

    • 运行级别 2:多用户状态(没有 NFS)

    • 运行级别 3:完全的多用户状态(有 NFS),登陆后进入控制台命令行模式

    • 运行级别 4:系统未使用,保留

    • 运行级别 5:X11 控制台,登陆后进入图形 GUI 模式

    • 运行级别 6:系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动

    3.3 系统初始化

    在 init 的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了 /etc/rc.d/rc.sysinit,而 rc.sysinit 是一个 bash shell 的脚本,它主要是完成一些系统初始化的工作,rc.sysinit 是每一个运行级别都要首先运行的重要脚本。

    它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。

    l5:5:wait:/etc/rc.d/rc 5

    这一行表示以 5 为参数运行 /etc/rc.d/rc,/etc/rc.d/rc 是一个 Shell 脚本,它接受 5 作为参数,去执行 /etc/rc.d/rc5.d/ 目录下的所有的 rc 启动脚本,/etc/rc.d/rc5.d/ 目录中的这些启动脚本实际上都是一些连接文件,而不是真正的 rc 启动脚本,真正的 rc 启动脚本实际上都是放在 /etc/rc.d/init.d/目录下。

    而这些 rc 启动脚本有着类似的用法,它们一般能接受 start、stop、restart、status 等参数。

    /etc/rc.d/rc5.d/ 中的 rc 启动脚本通常是 K 或 S 开头的连接文件,对于以 S 开头的启动脚本,将以 start 参数来运行。

    而如果发现存在相应的脚本也存在 K 打头的连接,而且已经处于运行态了(以 /var/lock/subsys/ 下的文件作为标志),则将首先以 stop 为参数停止这些已经启动了的守护进程,然后再重新运行。

    这样做是为了保证是当 init 改变运行级别时,所有相关的守护进程都将重启。

    至于在每个运行级中将运行哪些守护进程,用户可以通过 chkconfig 或 setup 中的 "System Services" 来自行设定。

    3.4 建立终端

    rc 执行完毕后,返回 init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。

    init 接下来会打开 6 个终端,以便用户登录系统。在 inittab 中的以下 6 行就是定义了 6 个终端:

    2345:respawn:/sbin/mingetty tty1
    2345:respawn:/sbin/mingetty tty2
    2345:respawn:/sbin/mingetty tty3
    2345:respawn:/sbin/mingetty tty4
    2345:respawn:/sbin/mingetty tty5
    2345:respawn:/sbin/mingetty tty6
    

    从上面可以看出在2、3、4、5的运行级别中都将以 respawn 方式运行 mingetty 程序,mingetty 程序能打开终端、设置模式。

    同时它会显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给 login 程序来验证用户的身份。

    3.5 用户登录系统

    一般来说,用户的登录方式有三种:

    1. 命令行登录

    2. ssh登录

    3. 图形界面登录

    对于运行级别为 5 的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入 KDE、Gnome 等窗口管理器。

    而本文主要讲的还是文本方式登录的情况:当我们看到 mingetty 的登录界面时,我们就可以输入用户名和密码来登录系统了。

    Linux 的账号验证程序是 login,login 会接收 mingetty 传来的用户名作为用户名参数。

    然后 login 会对用户名进行分析:如果用户名不是 root,且存在 /etc/nologin 文件,login 将输出 nologin 文件的内容,然后退出。

    这通常用来系统维护时防止非 root 用户登录。只有 /etc/securetty 中登记了的终端才允许 root 用户登录,如果不存在这个文件,则 root 用户可以在任何终端上登录。

    /etc/usertty 文件用于对用户作出附加访问限制,如果不存在这个文件,则没有其他限制。

    4 图形模式与文字模式的切换方式

    Linux 预设提供了六个命令窗口终端机让我们来登录。

    默认我们登录的就是第一个窗口,也就是 tty1,这个六个窗口分别为 tty1,tty2 … tty6,你可以按下 Ctrl + Alt + F1 ~ F6 来切换它们。

    如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按 Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。

    当你进入命令窗口界面后再返回图形界面只要按下 Ctrl + Alt + F7 就回来了。

    如果你用的 VMWare 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1~F6. 如果你在图形界面下请按 Alt + Shift + Ctrl + F1~F6 切换至命令窗口。

    5 Linux 关机

    在 linux 领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。

    正确的关机流程为:sync > shutdown > reboot > halt

    关机指令为:shutdown ,你可以 man shutdown 来看一下帮助文档。

    例如你可以运行如下命令关机:

    sync 将数据由内存同步到硬盘中。
    
    shutdown 关机指令,你可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:
    
    shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。
    
    shutdown –h now 立马关机
    
    shutdown –h 20:25 系统会在今天20:25关机
    
    shutdown –h +10 十分钟后关机
    
    shutdown –r now 系统立马重启
    
    shutdown –r +10 系统十分钟后重启
    
    reboot 就是重启,等同于 shutdown –r now
    
    halt 关闭系统,等同于shutdown –h now 和 poweroff
    

    最后总结一下,不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中。

    关机的命令有 shutdown –h now halt poweroffinit 0 , 重启系统的命令有 shutdown –r now reboot init 6

    6 Linux 文件

    6.1 Linux 文件

    Linux 系统中一切皆文件。

    在 Linux 系统中任何东西都是以文件形式来存储的。这其中不仅包括我们熟知的文本文件、可执行文件等等,还包括硬件设备、虚拟设备、网络连接等等,甚至连目录其实都是一种特殊的文件。

    6.2 Linux 文件权限位

    Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。

    在 Linux 中我们 可以使用 ll 或者 ls –l 命令来列出文件的详细信息,如下所示:

    ls -l 命令显示的信息中,开头是由 10 个字符构成的字符串,这就是 Linux 文件权限位

    其中第一个字符表示文件类型,它可以是下述类型之一:

    • 当为[ d ]则是目录

    • 当为[ - ]则是普通文件

    • 若是[ l ]则表示为符号链接,链接文档(link file);

    • 若是[ b ]则是块设备文件,表示为装置文件里面的可供储存的接口设备(可随机存取装置);

    • 若是[ c ]则是字符设备文件,表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

    • 若是[ s ]则是 socket 文件,网络套接字

    • 若是[ p ]则是管道

    后面的 9 个字符表示文件的访问权限,分为 3 组,每组 3 位,且均为『rwx』 的三个参数的组合,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]。

    • 第一组表示文件属主的权限

    • 第二组表示同组用户的权限

    • 第三组表示其他用户的权限。

    每一组的三个字符分别表示对文件的读、写和执行权限。各权限如下所示:

    • r 读

    • w 写

    • x 可执行。对于目录,表示进入权限。

    • s 当文件被执行时,把该文件的 UID 或 GID 赋予执行进程的 UID(用户ID)或 GID(组 ID)。

    • t 设置标志位(sticky bit)。如果是有 sticky bit 的目录,在该目录下任何用户只要有适当的权限即可创建文件,但文件只能被超级用户、目录拥有者或文件属主删除。如果是有 sticky bit 的可执行文件,在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。

    • 没有相应位置的权限。

    6.3 Linux 文件属主和属组

    [root@www /]# ls -l
    total 64
    drwxr-xr-x 2 root  root  4096 Feb 15 14:46 cron
    drwxr-xr-x 3 mysql mysql 4096 Apr 21  2014 mysql
    ……
    

    对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。

    同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。

    文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。

    因此,Linux 系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。

    在以上实例中,mysql 文件是一个目录文件,属主和属组都为 mysql,属主有可读、可写、可执行的权限;与属主同组的其他用户有可读和可执行的权限;其他用户也有可读和可执行的权限。

    对于 root 用户来说,一般情况下,文件的权限对其不起作用。

    6.4 Linux 连接

    Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln 命令产生硬链接。

    6.4.1 硬连接

    硬连接指通过索引节点来进行连接。

    在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为 索引节点号(Inode Index)

    在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。

    硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以实现“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

    6.4.2 软连接

    另外一种连接称之为符号连接(Symbolic Link),也叫软连接。
    软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。

    在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。比如:A 是 B 的软链接(A 和 B 都是文件名),A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号不相同,A 和 B 指向的是两个不同的 inode,继而指向两块不同的数据块。但是 A 的数据块中存放的只是 B 的路径名(可以根据这个找到 B 的目录项)。A 和 B 之间是“主从”关系,如果 B 被删除了,A 仍然存在(因为两个是不同的文件),但指向的是一个无效的链接。

    7 Linux 目录结构

    在 Windows 中,每一个盘符下是一个独立的文件系统,硬盘有多少个分区就有多少个文件系统。而在 Linux 系统中不管创建了多少个硬盘分区都只有一个文件系统。整个文件系统的根目录是 “/”,从 “/” 根目录出发理论上可以找到 Linux 系统中的所有目录和文件。

    登录系统后,在当前命令窗口下输入命令:

    ls /

    会看到如下图所示:

    树状目录结构:

    以下是对这些目录的解释:

    系统启动必须:

    • /boot:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。

    • /etc:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。

    • /lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

    • /sys: 这是 linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。sysfs 文件系统集成了下面 3 种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中

    指令集合:

    • /bin:存放着最常用的程序和指令

    • /sbin:只有系统管理员能使用的程序和指令。

    外部文件管理:

    • /dev :Device(设备)的缩写, 存放的是 Linux 的外部设备。注意:在 Linux 中访问设备和访问文件的方式是相同的。

    • /media:类 windows 的其他设备,例如U盘、光驱等等,识别后 linux 会把设备放到这个目录下。

    • /mnt:临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

    临时文件:

    • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

    • /lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。

    • /tmp:这个目录是用来存放一些临时文件的。

    账户:

    • /root:系统管理员的用户主目录。

    • /home:用户的主目录,以用户的账号命名的。

    • /usr:用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

    • /usr/bin:系统用户使用的应用程序与指令。

    • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。

    • /usr/src:内核源代码默认的放置目录。

    运行过程中要用:

    • /var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。

    • /proc:管理内存空间。虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。

    扩展用的:

    • /opt:默认是空的,我们安装额外软件可以放在这个里面。

    • /srv:存放服务启动后需要提取的数据(不用服务器就是空)

    7.1 绝对路径和相对路径

    . ..

    • 每个目录下都有 ...

    • . 表示当前目录

    • .. 表示上一级目录,即父目录

    • 根目录下的 ... 都表示当前目录

    绝对路径:从 “/” 根目录开始逐层查找文件和目录。

    相对路径:以当前目录或上一级目录为基准逐层查找文件和目录。
    例如:当前目录:“./” ; 当前目录的上一级目录:“../”

    绝对路径: 凡是以根开始的路径就是绝对路径 或者以 ~ 开头的路径也是绝对路径
    相对路径: 不是以根为开头的路径就是相对路径

    7.2 用户 home 目录

    Linux 系统为每一个用户提供了一个专属的目录用来存放它自己的文件内容,位于 /home/user,称之为用户工作目录或家目录,表示方式为:

    /home/user
    ~
    

    查看自己家目录下的文件,输入 ls ~,如下所示:

  • 相关阅读:
    LeetCode对撞指针汇总
    167. Two Sum II
    215. Kth Largest Element in an Array
    2018Action Recognition from Skeleton Data via Analogical Generalization over Qualitative Representations
    题解 Educational Codeforces Round 84 (Rated for Div. 2) (CF1327)
    题解 JZPKIL
    题解 八省联考2018 / 九省联考2018
    题解 六省联考2017
    题解 Codeforces Round #621 (Div. 1 + Div. 2) (CF1307)
    题解Codeforces Round #620 (Div. 2)
  • 原文地址:https://www.cnblogs.com/PikapBai/p/13525685.html
Copyright © 2011-2022 走看看