Linux系统第一篇

Linux

Linux系统启动过程(五个阶段)

  1. 内核的引导。
  • 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动系统。

  • 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。

    img

2. 运行 init。

init程序的类型:

  • SysV: init, CentOS 5之前, 配置文件: /etc/inittab。
  • Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf
  • Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。
  • init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。

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

    img

3. 系统初始化。

运行级别

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

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

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

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

    • Linux系统有7个运行级别(runlevel):
    • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
    • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
    • 运行级别2:多用户状态(没有NFS(Network File System)即网络文件系统)
    • 运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
    • 运行级别4:系统未使用,保留
    • 运行级别5:X11控制台,登陆后进入图形GUI模式
    • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
  • 在init的配置文件中有这么一行(跳转到rc.d): si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。

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

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


- /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参数来运行。
	
	![](https://blog-1259147543.cos.ap-guangzhou.myqcloud.com/Linux/clipboard_20190506091817.png)
	
	- 而如果发现存在相应的脚本也存在K打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行。
	
	- 这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。
	
	- 至于在每个运行级中将**运行哪些守护进程**,用户可以通过**chkconfig**或(root权限下)**setup中的"System Services**"来自行设定。

![img](https://www.runoob.com/wp-content/uploads/2014/06/bg2013081705.png)

### 4. 建立终端 。

- rc执行完毕后,**返回init**。这时基本系统环境已经设置好了,各种守护进程也已经启动了。
- init接下来会打开6个终端,以便用户登录系统。
- 在inittab中的以下6行就是定义了6个终端:

> - 1:2345:respawn:/sbin/mingetty tty1
> - 2:2345:respawn:/sbin/mingetty tty2
> - 3:2345:respawn:/sbin/mingetty tty3
> - 4:2345:respawn:/sbin/mingetty tty4
> - 5:2345:respawn:/sbin/mingetty tty5
> - 6:2345:respawn:/sbin/mingetty tty6

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

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

### 5. 用户登录系统。

- (1)命令行登录

  - 当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。
  - Linux 的账号验证程序是 login,login 会接收 mingetty 传来的用户名作为用户名参数。
  - 然后 login 会对用户名进行分析:如果用户名不是 root,且存在 /etc/nologin (不准登录)文件,login 将输出 nologin 文件的内容,然后退出。这通常用来系统维护时防止非root用户登录。
  - 只有/etc/securetty中**登记了的终端**才允许 root 用户登录,如果不存在这个文件,则 root 用户可以在任何终端上登录。
  - /etc/usertty文件用于对用户**作出附加访问限制**,如果不存在这个文件,则没有其他限制。

- (2)ssh登录
- (3)图形界面登录

  - 运行级别为5的图形方式用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入 KDE、Gnome 等窗口管理器。
  
  ![img](https://www.runoob.com/wp-content/uploads/2014/06/bg2013081707.png)

> **图形模式与文字模式的切换方式**
>
  > - Linux预设提供了六个命令窗口终端机让我们来登录。
  > - 默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。
  > - 如果你安装了图形界面,默认情况下是进入图形界面的,此时你就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。
  > - 当你进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。

---

### Linux 关机

- **正确的关机流程**为:sync > shutdown > reboot > halt
- 关机指令为:shutdown ,你可以man shutdown 来看一下帮助文档。

  - sync 将数据由内存同步到硬盘中。
  
- shutdown 关机指令,你可以man shutdown (按q退出) 来看一下帮助文档。例如你可以运行如下命令关机:
  
    ```
    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、 poweroff** 和 **init 0** , 重启系统的命令有 **shutdown –r now、 reboot、 init 6**。

> 补充几个有时候很有用的**快捷键**;
>
> **[Tab] 有『命令补全』与『文件补齐』的功能**
>
> ```
> [Tab]      ## 接在一串指令的第一个字的后面,则为『命令补全』
> [Tab]      ## 接在一串指令的第二个字以后时,则为『文件补齐』
> ```
>
> 若安装 bash-completion 软件,则在某些指令后面使用 [tab] 按键时,可以进行『选项/参数的补齐』功能!
>
> **[Ctrl]+ C 如果在Linux 底下输入了错误的指令或参数,想让当前的程序『停掉』的话,可以输入:**
>
> ```
> [Ctrl] + c 
> ```
>
> **[Ctrl]-d 『键盘输入结束(End Of File, EOF 或 End Of Input)』的意思**
>
> 另外,他也可以用来取代 exit 的输入。
>
> 例如你想要直接离开文字接口,可以直接按下:
>
> ```
> [Ctrl] + d   ## 相当于输入 exit
> ```
>
> **[shift]+{[PageUP]|[Page Down]}**
>
> ```
> [Shift]+[Page Up]    ## 往前翻页 
> 
> [Shift]+[Page Down] ## 往后翻页
> ```

---

## Linux系统目录结构

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

-  **ls /** 

  树状目录结构

  > 在 Linux 或 Unix 操作系统中,所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。
  >
  > 文件系统的最顶层是由根目录开始的,系统使用 **/** 来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。如此反复就可以构成一个庞大的文件系统。
  >
  > 在Linux文件系统中有两个特殊的目录,一个用户所在的工作目录,也叫当前目录,可以使用一个点 **.** 来表示;另一个是当前目录的上一级目录,也叫父目录,可以使用两个点 **..** 来表示。
  >
  > - . :代表当前的目录,也可以使用 ./ 来表示;
  > - .. :代表上一层目录,也可以 ../ 来代表。
  >
  > 如果一个目录或文件名以一个点 . 开始,表示这个目录或文件是一个隐藏目录或文件(如:.bashrc)。即以默认方式查找时,不显示该目录或文件。

![img](https://www.runoob.com/wp-content/uploads/2014/06/003vPl7Rty6E8kZRlAEdc690.jpg)

---

#### 	系统启动相关

- /boot:
  
  - 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
  
- /etc:
  
  - 这个目录用来存放所有的系统管理所需要的配置文件和子目录。

- /lib:
  
  - 这个目录里存放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

- /sys:

- 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。
- sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。

- 该文件系统是内核设备树的一个直观反映。
- 当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

---

#### 指令
- /bin:
  
  - bin是Binary的缩写, 这个目录存放着最经常使用的命令。
- /sbin:

- s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
---
#### 账户

- /home:
  
  - 用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。

- /root:

- 该目录为系统管理员,也称作超级权限者的用户主目录。

- /usr:

-  这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。

    ```
    /usr/bin:
      系统用户使用的应用程序。
    /usr/sbin:
      超级用户使用的比较高级的管理程序和系统守护程序。
    /usr/src:
      内核源代码默认的放置目录。
    ```

---

#### 运行过程中调用的
- /var:
  
  - 这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

- /proc:
- 这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。

- 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

---

#### 外部文件管理
- /dev :
  
  - dev是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。

- /media:

  - linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
- /mnt:

- 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。

#### 临时文件

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


- /tmp:

- 这个目录是用来存放一些临时文件的。

- /lost+found:
  - 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

---

#### 扩展用的


- /opt:

-  这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

- /srv:

-  该目录存放一些服务启动之后需要提取的数据。	

#### 安全


- /selinux:

-  这个目录是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

---

**在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。**

> - /etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
> - /bin, /sbin, /usr/bin, /usr/sbin: 这是系统预设的执行文件的放置目录,比如 ls 就是在/bin/ls 目录下的。
>
> - /var: 这是一个非常重要的目录,系统上跑了很多程序,那么每个程序都会有相应的日志产生,而这些日志就被记录到这个目录下,具体在/var/log 目录下,另外mail的预设放置也是在这里。
>

## Linux 忘记密码解决方法

> https://www.runoob.com/linux/linux-forget-password.html

## Linux远程登录

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

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

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

Window系统上 Linux 远程登录客户端有SecureCRT, Putty, SSH Secure Shell等

---

#### 以Putty为例来登录远程服务器。

putty下载地址:<http://www.putty.org/>

如果你下载了putty,请双击putty.exe 然后弹出如下的窗口。

![5_1](https://www.runoob.com/wp-content/uploads/2014/06/5_1.png)

在Host Name( or IP address) 下面的框中输入你要登录的远程服务器IP(可以通过**ifconfig**命令查看服务器网卡ip),然后回车。

![5_12](https://www.runoob.com/wp-content/uploads/2014/06/5_12.png)

此时,提示我们输入要登录的用户名。

![5_13](https://www.runoob.com/wp-content/uploads/2014/06/5_13.png)

输入root 然后回车,再输入密码,就能登录到远程的linux系统了。

![5_14](https://www.runoob.com/wp-content/uploads/2014/06/5_14.png)

---

#### 使用密钥认证机制远程登录linux

SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定。

SSH 为建立在应用层和传输层基础上的安全协议。

首先使用工具 PUTTYGEN.EXE 生成密钥对。打开工具PUTTYGEN.EXE后如下图所示:

![5_15](https://www.runoob.com/wp-content/uploads/2014/06/5_15.png)

该工具可以生成三种格式的key :SSH-1(RSA) SSH-2(RSA) SSH-2(DSA) ,我们采用默认的格式即SSH-2(RSA)。Number of bits in a generated key 这个是指生成的key的大小,这个数值越大,生成的key就越复杂,安全性就越高。这里我们写2048.

![5_16](https://www.runoob.com/wp-content/uploads/2014/06/5_16.png)

然后单击Generate 开始生成密钥对:

![5_17](https://www.runoob.com/wp-content/uploads/2014/06/5_17.png)

注意的是,在这个过程中鼠标要来回的动,否则这个进度条是不会动的。

![5_18](https://www.runoob.com/wp-content/uploads/2014/06/5_18.png)

到这里,密钥对已经生成了。你可以给你的密钥输入一个密码,(在Key Passphrase那里)也可以留空。然后点 Save public key 保存公钥,点 Save private Key 保存私钥。笔者建议你放到一个比较安全的地方,一来防止别人偷窥,二来防止误删除。接下来就该到远程linux主机上设置了。

1. **创建目录 /root/.ssh 并设置权限**

[root@localhost ~]# mkdir /root/.ssh


​	mkdir用来创建目录,以后会详细介绍,暂时只了解即可。

[root@localhost ~]# chmod 700 /root/.ssh


​	chmod用来修改文件属性权限的,以后会详细介绍。

2. **创建文件 / root/.ssh/authorized_keys**

[root@localhost ~]# vim /root/.ssh/authorized_keys


vim编辑一个文本文件的命令,同样在后续章节详细介绍。

3. 打开刚才生成的public key 文件,建议使用写字板打开,这样看着舒服一些,复制从AAAA开头至 "---- END SSH2 PUBLIC KEY ----" 该行上的所有内容,粘贴到/root/.ssh/authorized_keys 文件中,要保证所有字符在一行。(可以先把复制的内容拷贝至记事本,然后编辑成一行载粘贴到该文件中)。

在这里要简单介绍一下,如何粘贴,用vim打开那个文件后,该文件不存在,所以vim会自动创建。按一下字母"i"然后同时按shift + Insert 进行粘贴(或者单击鼠标右键即可),前提是已经复制到剪切板中了。粘贴好后,然后把光标移动到该行最前面输入 **ssh-rsa** ,然后按空格。再按ESC,然后输入冒号wq 即 :wq 就保存了。格式如下图:

![5_19](https://www.runoob.com/wp-content/uploads/2014/06/5_19.png)

4)再设置putty选项,点窗口左侧的SSh –> Auth ,单击窗口右侧的Browse… 选择刚刚生成的私钥, 再点Open ,此时输入root,就**不用输入密码**就能登录了。

![5_20](https://www.runoob.com/wp-content/uploads/2014/06/5_20.png)

如果在前面你设置了Key Passphrase ,那么此时就会提示你输入密码的。为了更加安全建议大家要设置一个Key Passphrase。

---

## Linux文件基础属性

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

在Linux中我们可以使用ll或者ls –l命令来显示一个文件的属性以及文件所属的用户和组,如:

[hadoop@localhost Desktop]$ ls / -l
total 86
dr-xr-xr-x. 2 root root 4096 Feb 23 03:40 bin
dr-xr-xr-x. 5 root root 1024 Sep 9 2013 boot
drwxr-xr-x. 18 root root 3780 May 7 01:48 dev
...


在Linux中第一个字符代表这个文件是目录、文件或链接文件等等。

- 当为[ d ]则是目录
- 当为[ - ]则是文件;
- 若是[ l ]则表示为链接文档(link file);
- 若是[ b ]则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
- 若是[ c ]则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。

每个文件的属性由左边第一部分的10个字符来确定(如下图)。

![363003_1227493859FdXT](https://www.runoob.com/wp-content/uploads/2014/06/363003_1227493859FdXT.png)

- 第0位确定文件类型,第1-3位确定属主(该文件的所有者)拥有该文件的权限。
- 第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。

## Linux文件属主和属组

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

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

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

### 更改文件属性

- chgrp:更改文件属组

  语法

chgrp [-R] 属组名 文件名


- -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

- chown:更改文件属主,也可以同时更改文件属组

语法

chown [–R] 属主名 文件名

chown [-R] 属主名:属组名 文件名


- chmod:更改文件9个属性

  - Linux文件属性有两种设置方法,一种是数字,一种是符号。

  	- 各权限的分数对照表如下:

  		- r:4
  		- w:2
  		- x:1

  语法

  ```
  chmod [-R] xyz 文件或目录
  ```
  
  选项与参数:
  
  - xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
  - -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
  
  
  
- 我们还可以使用 u, g, o 来代表三种身份的权限

  - 此外, **a** 则代表 **all**,即全部的身份。读写的权限可以写成 **r, w, x**,也就是可以使用下表的方式来看:
  
    | chmod | u g o a | +(加入) -(除去) =(设定) | r w x | 文件或目录 |
    | ----- | ------- | ----------------------- | ----- | ---------- |
    |       |         |                         |       |            |
  
    如果我们需要将文件权限设置为 **-rwxr-xr--** ,可以使用
  
    ```
    chmod u=rwx,g=rx,o=r 文件名
    ```
  
    而如果是要将权限去掉而不改变其他已存在的权限呢?例如要拿掉全部人的可执行权限:
  
    ```
    #  chmod  a-x test1
    # ls -al test1
    -rw-r--r-- 1 root root 0 Nov 15 10:32 test1
    ```

posted on 2019-05-07 22:48  诗悦网络内推有问必答  阅读(209)  评论(0编辑  收藏  举报

导航