Nowcoder专项练习:Linux(四)

1,报文命令分析

subnet 166.173.197.131 netmask 255.255.255.192{
range 166.173.197.10 166.173.197.107;
default-lease-time 600;
max-lease-time 7200;
}

以上报文表示,
对子网166.173.197.131(其子网掩码为255.255.255.192,即网络号占高26位,主机号占低6位),该子网的网络地址为:166.173.197.128,其主机范围为166.173.197.128-166.173.197.191.
现在对该可选择范围内申请主机号范围在166.173.197.10-166.173.197.107的IP地址;
该申请默认租用时间为600s,最大租用时间不超过7200秒

  • subnet 设置一个子网
  • range 可分配的IP地址范围
  • default-lease-time 默认租用时间
  • max-lease-time 最大租用时间

2,DISPLAY

Linux X Window System中X是一个开放的协议规范,当前版本为11,俗称X11。

X Window System由客户端和服务端组成,服务端X Server负责图形显示,而客户端库X Client根据系统设置的DISPLAY环境变量将图形显示请求发送给相应的X Server。


3,whereis

whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。

和find相比,whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和下面即将介绍的locate时,会从数据库中查找数据,而不是像find命令那样,通过遍历硬盘来查找,效率自然会很高。
但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

1.命令格式:
whereis [-bmsu] [BMS 目录名 -f ] 文件名

2.命令功能:
whereis命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。 这些文件的属性应属于原始代码,二进制文件,或是帮助文件。whereis 程序还具有搜索源代码、指定备用搜索路径和搜索不寻常项的能力。

3.命令参数:
-b 定位可执行文件。
-m 定位帮助文件。
-s 定位源代码文件。
-u 搜索默认路径下除可执行文件、源代码文件、帮助文件以外的其它文件。
-B 指定搜索可执行文件的路径。
-M 指定搜索帮助文件的路径。
-S 指定搜索源代码文件的路径。

另外几条命令含义:

  • which 查看可执行文件的位置
  • whatis 查询命令都有什么功能
  • apropos 查询指定关键字的命令

4,压缩文件命令

如果我们需要将一个文件压缩成一个压缩包,需要将打包后的文件名放在前面

Q:若要将当前目录中的myfile.txt文件压缩成myfile.txt.tar.gz,则实现的命令为?

A:tar –zcvf myfile.txt.tar.gz myfile.txt

其中:

  • -c 建立压缩文件件
  • -v 压缩的过程显示文件
  • -f 使用档名
  • -z 表示使用gzip压缩
  • -j 表示使用bzip2压缩
  • -x 表示解压缩

Q:将/home/stud1/wang目录做归档压缩,压缩后生成wang.tar.gz 文件,并将此文件保存到/home 目录下,实现此任务的tar 格式为?

A:tar zcvf /home/wang.tar.gz /home/stud1/wang


5,用户态到内核态

用户态到内核态一共有三种方式:
1,系统调用
2,异常
3,外围设备的中断

Q:下列选项中,会导致用户进程从用户态切换到内核的操作是?
I. 整数除以零
II. sin( )函数调用
III. read系统调用

A:在上面的三个选项中,I是属于异常,III是属于系统调用,因此是I和III。


6,网络连接不通问题

Q:在局域网络内的某台主机用ping命令测试网络连接时发现网络内部的主机都可以连通,而不能与公网连通,问题可能是:
A. 主机IP设置有误
B. 没有设置连接局域网的网关
C. 局域网的网关或者主机的网关设置有误
D. 局域网DNS服务器设置有误

A:
对于A选项,错误,因为如果主机IP设置有误的话,内网也不会连通。
对于B选项,错误,因为若是没有连接局域网网关,局域网内也不会通。
对于C选项,正确
对于D选项,DNS服务器设置有误,IP地址有可能是通的。


7,UNIX的目录结构

在UNIX中,目录结构采用带链接树形目录结构

带链接树形目录结构又称非循环图目录结构,它是指访问一文件(或目录)可以有多条路径。一般常说UNIX的文件系统是树形结构,其实是指带链接的树形结构,而不是纯树形目录结构。

带链接树形目录结构

在这里插入图片描述

单级目录结构

在这里插入图片描述

二级目录结构

在这里插入图片描述

多级目录结构(树形目录结构)

在这里插入图片描述


8,替换命令

Q:使用sed命令, 将文件xyz中的单词AAA全部替换为BBB,命令应该是?

A:sed ‘s/AAA/BBB/g’ xyz

在上面这条指令中,s表示替换命令,/AAA表示匹配AAA,/BBB表示匹配BBB,/g表示在一行内全面替换,xyz表示替换文件的名称

需要注意的是,上面的这条命令并不会改变原文件的内容,而是把替换后的文件内容输出。如果想要改变原文件中的内容的话,可以使用如下的命令:

  • sed ‘s/AAA/BBB/g’ xyz > xyz.tmp

即赋值xyz生成了一个新的文件xyz.tmp,并且里面的内容是被替换过的。

  • g 表示行内全面替换
  • p 表示打印行
  • w 表示把行写入一个文件
  • x 表示互换模板块中的文本和缓冲区中的文本
  • y 表示把一个字符串翻译为另外的字符(但是不用于正则表达式)
  • \1 字符串匹配标记
  • & 已匹配字符串标记

9,Linux查阅文件内容

在Linux中,查阅全部文件内容的命令一共有三种:cat、more、less

  • more命令:可以让屏幕在显示满一屏幕时,此时可按空格健继续显示下一个画面,或按 Q 键停止显示。
  • less命令:可以分页显示文件,和more命令的区别就在于它支持上下键卷动屏幕,当结束浏览时,只要在less命令的提示符“:”下按Q即可。
  • cat命令:主要有三大功能:
    (1)一次显示整个文件: $ cat filename
    (2)从键盘创建一个文件:$ cat > filename
    (3)将几个文件合并为一个文件:$ cat file1 file2 > file

而对于ls命令而言,它是list的缩写,用来打印当前目录的清单,而不可以查阅文件的内容。
如果ls指定其他目录,那么就可以显示指定目录里的文件以及文件夹清单了。


10,赋值方法

一共有五种赋值方法:

  1. 直接赋值
    其格式为:变量名 = 变量值
  2. 使用read命令
    该命名是系统内置命令,语法格式为:read 变量1 变量2
  3. 使用命令行参数赋值
    $ 命令 参数1 参数2 参数3
  4. 使用命令的输入结果赋值,例如,
    currentdir = ‘pwd’
    echo $currentdir
  5. 从文件中读取数据,例如:
    #!/bin/bash
    ls *.sh >execfile
    while read LINE
    do
    chmod a+x $LINE
    done<execfile

11,user相关操作

  • useradd: 增加用户
  • usermod: 修改用户账户信息
  • groupadd: 添加组账号
  • userdel: 删除用户

12,ls引发的系统调用

首先,任何shell都会执行exec 和 fork

而对于ls而言,还会执行read

因此,ls所引发的系统调用为exec、fork、read。


13,子进程与父进程

在Linxu中,对于多进程而言:
子进程继承父进程的有:

  • 用户号UIDs和用户组号GIDs
  • 环境Environment
  • 堆栈
  • 共享内存
  • 打开文件的描述符
  • 执行时关闭(Close-on-exec)标志
  • 信号(Signal)控制设定
  • 进程组号
  • 当前工作目录
  • 根目录
  • 文件方式创建屏蔽字
  • 资源限制
  • 控制终端

子进程独有的:

  • 进程号PID
  • 不同的父进程号
  • 自己的文件描述符和目录流的拷贝
  • 子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
  • 不继承异步输入和输出

父进程和子进程拥有独立的地址空间PID参数

子进程从父进程继承了用户号和用户组号,用户信息,目录信息,环境(表),打开的文件描述符,堆栈,(共享)内存等。

经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。
事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。这里的“共享”一词意味着“竞争”


14,显示特定行数的内容

Q:采取什么命令可以查看file1文件的第300-500行的内容?
A. cat file1 | tail -n +300 | head -n 200
B. cat file1| head -n 500 | tail -n +300
C. sed -n ‘300,500p’ file1

A:
正确的答案应该是B和C。

首先,对于head而言:

head -n k          # 打印前k行
head -n -k         # 打印除最后k行外的所有内容

对tail而言:

tail -n k          # 打印最后k行
tail -n +k         # 从k行开始打印

题目的要求是,输出300-500行的内容。

A选项:
从第300行开始,接着输出前200行的内容,但这里的200行包括了第300行,不包括第500行
所以应该改为cat file1 | tail -n +300 | head -n 201。

B选项:先取出前500行,再从300行开始。 cat file1 | head -n 500 | tail -n + 300 ,正确。

C选项:sed命令 p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
sed -n ‘300-500p’ 打印300-500行,正确。


15,线程的补充知识

  • 线程是进程的一个实体,一个进程包含多个线程,线程是CPU调度和分派的基本单位,是比进程更小的、能够独立运行的基本单位。
  • 但是,线程不能够直接独立运行,必须依附于应用程序中,由应用程序提供多个线程控制。
  • 进程有独立的地址空间,线程没有独立的空间,线程是共享进程的地址空间。
  • 线程是程序的多个顺序的流态执行。

16,fork与缓冲机制

Q:下面的程序中一共输出多少个"-"?

int main(void)
{
  int i;
  for(i=0;i<2;i++){
    fork();
    printf("-");
  }
  return 0;
} 

A:
printf是一个行缓冲函数,先写到缓冲区,满足条件后才将缓冲区刷新到对应文件中,刷新缓冲区的条件如下:
1)缓冲区填满;
2)写入的字符中有‘\n’、’\r’;
3)调用fflush手动刷新缓冲区;
4)调用scanf要从缓冲区读取数据时,也会将缓冲区内的数据刷新。
另外,当执行printf的进程或线程结束的时候,也会主动调用flush来刷新缓冲区。

本题中printf没有’\n’,是因为进程执行结束,才去刷新缓冲区,在屏幕上显示字符,这是理解本题的关键。

在这里插入图片描述

当i=1时,parent进程中printf的缓冲区内容为"–",第一个’-‘为i=0时printf的输出,只是没有’\n’而囤积到这一次。child2进程中printf缓冲区的第一个’-‘则是因为子进程会复制父进程的缓冲区,因此复制了parent的buf。
程序结束即所有进程都结束后,会自动刷新缓冲区,此时会一下子把parent,child2,child1和child1_2的缓冲区输出到显示屏幕上,输出的顺序可能会随机。因此最后共输出8个’-’。


17,管道机制

管道实际上是一种固定大小的缓冲区,管道对管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在于内存中。

它类似于通信中的半双工信道的进程通信机制,一个管道只能保证一个一个方向上的数据传输,要实现双向数据传输必须使用两个管道

管道的容量大小通常为内存的一页,其容量受多方面因素影响,包括缓冲区的大小、磁盘容量大小等问题。

当管道满时,进程在写管道会被阻塞
而当管道空时,进程在读管道会被阻塞。
因此,当管道中没有信息的话,从管道中读取的进程会等待,直到另一端的进程放入信息。当管道被放满信息的时候,尝试放入信息的进程会等待,直到另一端的进程取出信息。当两个进程都终结的时候,管道也自动消失。进程对管道进行读操作和写操作都可能被阻塞。

管道的一端连接一个进程的输出。这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息,管道可以同时进行读进程和写进程。

详细博客地址:
Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)


18,fork相关问题

Q:

int main{
    fork() || fork()
}

上面的代码,一共创建了多少个进程?

A:
fork()给子进程返回一个零值,给父进程返回一个非零值。

在main这个主进程中,首先执行 fork() || fork(),左边的fork()返回一个非零值,根据||的短路原则,前面的表达式为真时,后面的表达式不执行,故包含main的这个主进程创建了一个子进程。

由于子进程会复制父进程,而且子进程会根据其返回值继续执行,就是说,在子进程中, fork() ||fork()这条语句左边表达式的返回值是0,所以||右边的表达式要执行,这时在子进程中又创建了一个进程,
即main进程->子进程->子进程,一共创建了3个进程。


19,log

  • /var/log/messages — 包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。
  • /var/log/dmesg — 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们。
  • /var/log/auth.log — 包含系统授权信息,包括用户登录和使用的权限机制等。
  • /var/log/boot.log — 包含系统启动时的日志。
  • /var/log/daemon.log — 包含各种系统后台守护进程日志信息。
  • /var/log/dpkg.log – 包括安装或dpkg命令清除软件包的日志。
  • /var/log/kern.log – 包含内核产生的日志,有助于在定制内核时解决问题。
  • /var/log/lastlog — 记录所有用户的最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容。
  • /var/log/maillog /var/log/mail.log — 包含来着系统运行电子邮件服务器的日志信息。例如,sendmail日志信息就全部送到这个文件中。
  • /var/log/user.log — 记录所有等级用户信息的日志。
  • /var/log/Xorg.x.log — 来自X的日志信息。
  • /var/log/alternatives.log – 更新替代信息都记录在这个文件中。
  • /var/log/btmp – 记录所有失败登录信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“。
  • /var/log/cups — 涉及所有打印信息的日志。
  • /var/log/anaconda.log — 在安装Linux时,所有安装信息都储存在这个文件中。
  • /var/log/yum.log — 包含使用yum安装的软件包信息。
  • /var/log/cron — 每当cron进程开始一个工作时,就会将相关信息记录在这个文件中。
  • /var/log/secure — 包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里。
  • /var/log/wtmp或/var/log/utmp — 包含登录信息。使用wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等。
  • /var/log/faillog – 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。
  • /var/log/httpd/或/var/log/apache2 — 包含服务器access_log和error_log信息。
  • /var/log/lighttpd/ — 包含light HTTPD的access_log和error_log。
  • /var/log/mail/ – 这个子目录包含邮件服务器的额外日志。
  • /var/log/prelink/ — 包含.so文件被prelink修改的信息。
  • /var/log/audit/ — 包含被 Linux audit daemon储存的信息。
  • /var/log/samba/ – 包含由samba存储的信息。
  • /var/log/sa/ — 包含每日由sysstat软件包收集的sar文件。
  • /var/log/sssd/ – 用于守护进程安全服务

20,DVM

DVM指dalvik的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。

总结起来一句话:
每一个DVM都是在Linux中的一个进程!


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值