Linux面试知识点总结

时间:2022-05-22 13:14:12

1.Linux关机重启命令:

在linux命令中reboot重新启动shutdown -r now是立即停止然后重新启动,都说他们两个是一样的,其实是有一定的区别的。
    shutdown命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。
    精确时间的格式是hh:mm,表示小时和分钟,时间段由+ 和分钟数表示。系统执行该命令后会自动进行数据同步的工作。
    该命令的一般格式: shutdown [选项] [时间] [警告信息]
    命令中各选项的含义为:
       - k 并不真正关机而只是发出警告信息给所有用户
       - r 关机后立即重新启动
       - h 关机后不重新启动
       - f 快速关机重启动时跳过fsck
       - n 快速关机不经过init 程序
       - c 取消一个已经运行的shutdown
    需要特别说明的是该命令只能由超级用户使用。
    例1,系统在十分钟后关机并且马上重新启动: # shutdown –r +10
    例2,系统马上关机并且不重新启动:# shutdown –h now
  halt是最简单的关机命令,其实际上是调用shutdown -h命令。halt执行时,杀死应用进程,文件系统写操作完成后就会停止内核。
    halt命令的部分参数如下:
     [-f] 没有调用shutdown而强制关机或重启
     [-i] 关机或重新启动之前,关掉所有的网络接口
     [-p] 关机时调用poweroff,此选项为缺省选项

reboot的工作过程与halt类似,其作用是重新启动,而halt是关机。其参数也与halt类似。reboot命令重启动系统时是删除所有的进程,而不是平稳地终止它们。因此,使用reboot命令可以快速地关闭系统,但如果还有其它用户在该系统上工作时,就会引起数据的丢失。所以使用reboot命令的场合主要是在单用户模式。
    init是所有进程的祖先,其进程号始终为1。init用于切换系统的运行级别,切换的工作是立即完成的。init 0命令用于立即将系统运行级别切换为0,即关机;init 6命令用于将系统运行级别切换为6,即重新启动。

2.进程对应的内存空间中所包含的5种不同的数据区:

代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作—它是不可写的。
    数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配的变量和全局变量
    BSS段:BSS段包含了程序中未初始化的全局变量,在内存中bss段全部置零。
    堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。
    :栈是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进后出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。

3.Linux文件权限:

为了更加安全的存储文件,Linux为不同的文件赋予了不同的权限,每个文件都拥有下面三种权限:
     ● 所有者权限:文件所有者能够进行的操作。
     ● 组权限:文件所属用户组能够进行的操作。
     ● 外部权限(其他权限):其他用户可以进行的操作。
    查看文件权限
    ls -l 命令可以查看与文件权限相关的信息:

$ls -l /home/amrood
-rwxr-xr-- amrood users Nov : myfile
drwxr-xr--- amrood users Nov : mydir

第一列就包含了文件或目录的权限。

第一列的字符可以分为三组,每一组有三个,每个字符都代表不同的权限,分别为读取(r)、写入(w)和执行(x):
      · 第一组字符(2-4)表示文件所有者的权限,-rwxr-xr-- 表示所有者拥有读取(r)、写入(w)和执行(x)的权限。
      · 第二组字符(5-7)表示文件所属用户组的权限,-rwxr-xr-- 表示该组拥有读取(r)和执行(x)的权限,但没有写入权限。
      · 第三组字符(8-10)表示所有其他用户的权限,rwxr-xr-- 表示其他用户只能读取(r)文件。
   文件访问模式
      文件权限是Linux系统的第一道安全防线,基本的权限有读取(r)、写入(w)和执行(x):
       · 读取:用户能够读取文件信息,查看文件内容。
       · 写入:用户可以编辑文件,可以向文件写入内容,也可以删除文件内容。
       · 执行:用户可以将文件作为程序来运行。
   目录访问模式
      目录的访问模式和文件类似,但是稍有不同:
      · 读取:用户可以查看目录中的文件
      · 写入:用户可以在当前目录中删除文件或创建文件
      · 执行:执行权限赋予用户遍历目录的权利,例如执行 cd 和 ls 命令。

改变权限:
     chmod (change mode) 命令来改变文件或目录的访问权限,权限可以使用符号或数字来表示。
     使用符号表示权限:
     可以增加(+)和删除(-)权限,也可以指定特定权限。
     符号说明:
        +   为文件或目录增加权限
        -   删除文件或目录的权限
        =  设置指定的权限
    下面的例子将会修改testfile文件的权限:

$ls -l testfile
-rwxrwxr-- amrood users Nov : testfile
$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx amrood users Nov : testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx amrood users Nov : testfile
$chmod g=rx testfile
$ls -l testfile
-rw-r-xrwx amrood users Nov : testfile

也可以同时使用多个符号:

$chmod o+wx,u-x,g=rx testfile
$ls -l testfile
-rw-r-xrwx amrood users Nov : testfile

使用数字表示权限:
     除了符号,也可以使用八进制数字来指定具体权限,如下表所示:
     数字权限说明:
      0               没有任何权限                                                         ---
      1               执行权限                                                               --x
      2               写入权限                                                               -w-
      3    执行权限和写入权限:1 (执行) + 2 (写入) = 3                  -wx
      4               读取权限                                                               r--
      5    读取和执行权限:4 (读取) + 1 (执行) = 5                         r-x
      6    读取和写入权限:4 (读取) + 2 (写入) = 6                         rw-
      7    所有权限: 4 (读取) + 2 (写入) + 1 (执行) = 7                    rwx

下面的例子,首先使用  ls -1  命令查看testfile文件的权限,然后使用chmod命令更改权限:

$ls -l testfile
-rwxrwxr-- amrood users Nov : testfile
$ chmod testfile
$ls -l testfile
-rwxr-xr-x amrood users Nov : testfile
$chmod testfile
$ls -l testfile
-rwxr---wx amrood users Nov : testfile
$chmod testfile
$ls -l testfile
----r---wx amrood users Nov : testfile  

更改所有者和用户组
    在Linux中,每添加一个新用户,就会为它分配一个用户ID和群组ID,上面提到的文件权限也是基于用户和群组来分配的。

有两个命令可以改变文件的所有者或群组:
     · chown :chown 命令是"change owner"的缩写,用来改变文件的所有者。
     · chgrp :chgrp 命令是"change group"的缩写,用来改变文件所在的群组。

chown 命令用来更改文件所有者,其语法如下:
        $ chown user filelist
        user 可以是用户名或用户ID,例如
        $ chown amrood testfile
        $ 将testfile文件的所有者改为amrood。

注意:超级用户 root 可以不受限制的更改文件的所有者和用户组,但是普通用户只能更改所有者是自己的文件或目录。

chgrp 命令用来改变文件所属群组,其语法为:
        $ chgrp group filelist
        group 可以是群组名或群组ID,例如
        $ chgrp special testfile
        $ 将文件 testfile 的群组改为 special。

4.死锁:

产生死锁的原因主要是:
   (1) 因为系统资源不足
   (2) 进程运行推进的顺序不合适
   (3) 资源分配不当等。
   如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。 
   产生死锁的四个必要条件:
   (1) 互斥条件:一个资源每次只能被一个进程使用。
   (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
   (3) 不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。
   (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
   这四个条件是死锁的必要条件 ,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。 
   死锁的解除与预防:
   理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源。因此,对资源的分配要给予合理的规划。

5.fork()函数:

不算main这个进程自身,到底创建了多少个进程啊?

int main(int argc, char* argv[])
{
fork();
fork() && fork() || fork();
fork();
}
     (1) A&&B||C
      A为假,跳过B,判断C;
      A为真,判断B,若B为真,跳过C;
                           若B为假,判断C.
     (2) fork()函数父进程返回子进程ID;子进程返回0
     第一条语句新增1个;
     第二条语句新增4*2个;
Linux面试知识点总结
    第三条语句,此时已有进程1+1+4*2个,所以新增10个.
    总数为2*(2+1+2)*2=20;减去自己就是19.