C++常见面试问题汇总4——Linux

  • Linux常用的命令

常用命令:

  1. ls   显示文件或目录-l           列出文件详细信息l(list)-a          列出当前目录下所有文件及目录,包括隐藏的a(all)
  2. mkdir 创建目录 -p           创建目录,若无父目录,则创建p(parent)
  3. cd 切换目录
  4. touch 创建空文件
  5. echo 创建带有内容的文件。
  6. cat 查看文件内容
  7. cp 拷贝
  8. mv 移动或重命名
  9. rm 删除文件-r            递归删除,可删除子目录及文件-f            强制删除
  10. find 在文件系统中搜索某文件
  11. wc 统计文本中行数、字数、字符数
  12. grep 在文本文件中查找某个字符串
  13. rmdir 删除空目录
  14. tree 树形结构显示目录,需要安装tree包
  15. pwd 显示当前目录
  16. ln 创建链接文件
  17. more、less 分页显示文本文件内容
  18. head、tail 显示文件头、尾内容
  19. ctrl+alt+F1 命令行全屏模式

vim使用:

vim三种模式:命令模式、插入模式、编辑模式。使用ESC或i或:来切换模式。

命令模式下:

:q 退出

:q! 强制退出

:wq 保存并退出

:set number 显示行号

:set nonumber 隐藏行号

/apache 在文档中查找apache 按n跳到下一个,shift+n上一个

yyp 复制光标所在行,并粘贴

h(左移一个字符←)、j(下一行↓)、k(上一行↑)、l(右移一个字符→)
 

linux下通过进程名查看其占用端口:

  1. 先查看进程pid         ps -ef | grep 进程名
  2. 通过pid查看占用端口        netstat -nap | grep 进程pidlinux

通过端口查看进程:

  1. netstat -nap | grep 端口号
  • Linux的I/O模型介绍以及同步异步阻塞非阻塞的区别(超级重要)

1) 阻塞 I/O(blocking I/O)  
2) 非阻塞 I/O (nonblocking I/O)
3)  I/O 复用 (select 和poll) (I/O multiplexing)
4) 信号驱动 I/O (signal driven I/O (SIGIO))
5) 异步 I/O (asynchronous I/O (the POSIX aio_functions))
前四种都是同步,只有最后一种才是异步 IO。
同步 IO 和异步 IO 的区别就在于:数据拷贝的时候进程是否阻塞!
阻塞 IO 和非阻塞 IO 的区别就在于:应用程序的调用是否立即返回!

  • 文件系统的理解(EXT4,XFS,BTRFS)

  • 文件处理grep,awk,sed这三个命令必知必会

awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

grep(关键字: 截取) 文本搜集工具, 结合正则表达式非常强大
主要参数 []
-c : 只输出匹配的行
-I : 不区分大小写
-h : 查询多文件时不显示文件名
-l : 查询多文件时, 只输出包含匹配字符的文件名
-n : 显示匹配的行号及行
-v : 显示不包含匹配文本的所有行(我经常用除去grep本身)
基本工作方式: grep 要匹配的内容 文件名, 例如:
       grep 'test' d* 显示所有以d开头的文件中包含test的行
       grep 'test' aa bb cc 显示在 aa bb cc 文件中包含test的行
       grep '[a-z]\{5}\' aa 显示所有包含字符串至少有5个连续小写字母的串
 

sed(关键字: 编辑) 以行为单位的文本编辑工具 sed可以直接修改档案, 不过一般不推荐这么做, 可以分析 standard input
基本工作方式: sed [-nef] '[动作]' [输入文本]
          a\ : 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
      c\ :用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每⾏末尾需用”\"续行
      i\ :在当前行之前插入文本。多行时除最后一行外,每行末尾需用”\"续行删除行
      h : 把模式空间里的内容复制到暂存缓冲区
      H : 把模式空间里的内容追加到暂存缓冲区
     g : 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
     G: 把暂存缓冲区的内容追加到模式空间⾥,追加在原有内容的后面
     l : 列出非打印字符
     p : 打印行
     q : 结束或退出sed
     r : 从文件中读取输入行
     ! : 对所选行以外的所有行应用命令
     s : 用一个字符串替换另一个
     g : 在行内进行全局替换
      w : 将所选的行写入文件
     x : 交换暂存缓冲区与模式空间的内容
     y : 将字符替换为另一字符(不能对正则表达式使用y命令)
选项
  -e : 进行多项编辑,即对输入行应用多条sed命令时使用
  -n : 取消默认的输出
  -f :指定sed脚本的文件名

sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。

awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,

但是行分隔符和列分隔符都可以自定义,比如/etc/passwd文件的每一行有干个字段,字段之间以:分隔,就可以重新定义awk的列分隔符为:并以列为单位处理这个文件。

awk实际上是一门很复杂的脚本语言,还有像C语言一样的分支和循环结构,但是基本语法和sed类似,awk命令行的基本形式为:

  awk option 'script' file1 file2 ...


  awk option -f scriptfile file1 file2 ...
  和sed一样,awk处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,编辑命令可以直接当命令行参数传入,也可以用-f参数指定一个脚本文件,

编辑命令的格式为:

  /pattern/{actions}

  和sed类似,pattern是正则表达式,actions是一系列操作。 awk程序一行一行读出待处理文件,如果某一行与pattern匹配,或者满足condition条件,

则执行相应的actions,如果一条awk命令只有actions部分,则actions作用于待处理文件的每一行。
 

  • IO复用的三种方法(select,poll,epoll)深入理解,包括三者区别,内部原理实现?

select, poll, epoll 都是I/O多路复用的具体的实现,

I/O多路复用这个概念被提出来以后, select是第一个实现 (1983 左右在BSD里面实现的)。

select 被实现以后,很快就暴露出了很多问题。

  • select 会修改传入的参数数组,这个对于一个需要调用很多次的函数,是非常不友好的。
  • select 如果任何一个sock(I/O stream)出现了数据,select 仅仅会返回,但是并不会告诉你是那个sock上有数据,于是你只能自己一个一个的找,10几个sock可能还好,要是几万的sock每次都找一遍,这个无谓的开销就颇有海天盛筵的豪气了。
  • select 只能监视1024个链接, 这个跟草榴没啥关系哦,linux 定义在头文件中的,参见FD_SETSIZE。
  • select 不是线程安全的,如果你把一个sock加入到select, 然后突然另外一个线程发现,尼玛,这个sock不用,要收回。对不起,这个select 不支持的,如果你丧心病狂的竟然关掉这个sock, select的标准行为是。。呃。。不可预测的, 这个可是写在文档中的哦.

poll 去掉了1024个链接的限制不再修改传入数组

epoll 现在是线程安全的。

epoll 现在不仅告诉你sock组里面数据,还会告诉你具体哪个sock有数据,你不用自己去找了。

可是epoll 有个致命的缺点。。只有linux支持。比如BSD上面对应的实现是kqueue。

  • Epoll的ET模式和LT模式(ET的非阻塞)

  • 查询进程占用CPU的命令(注意要了解到used,buf,cache代表意义)

used:已经使用物理内存的大小
total:总的物理内存
free:空闲的物理内存
buffers:用于内核缓存的内存大小
cache:缓冲的交换空间的大小 

buffers于cached区别:buffers指的是块设备的读写缓冲区,cached指的是文件系统本身的页面缓存。他们都是Linux系统底层的机制,为了加速对磁盘的访问。
 

  • linux的其他常见命令(kill,find,cp等等)

kill命令用来删除执行中的程序或工作。kill可将指定的信息送至程序

kill 3268
find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

find /home -name "*.txt"
cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。

cp file /usr/men/tmp/file1
 

  • shell脚本用法

  • 硬连接和软连接的区别

  • 文件权限怎么看(rwx)

三种基本权限 R 读 数值表示为4,W 写 数值表示为2,X 可执行 数值表示为1

如jdk-7u21-linux-i586.tar.gz文件的权限为-rw-rw-r–

-rw-rw-r–一共十个字符,分成四段。

第一个字符“-”表示普通文件;这个位置还可能会出现“l”链接;“d”表示目录

第二三四个字符“rw-”表示当前所属用户的权限。 所以用数值表示为4+2=6

第五六七个字符“rw-”表示当前所属组的权限。 所以用数值表示为4+2=6

第八九十个字符“r–”表示其他用户权限。 所以用数值表示为2

所以操作此文件的权限用数值表示为662

  • 文件的三种时间(mtime, atime,ctime),分别在什么时候会改变

访问时间(Access time),状态时间(Modify time),修改时间(Change time),linux下我们通常通过stat 这条命令来查看这三个时间

  1. ctime(修改时间):文件的内容被最后一次修改的时间,我们经常用的ls -l命令显示出来的文件时间就是这个时间,当用vim对文件进行编辑之后保存,它的mtime就会相应的改变;
  2. atime(访问时间):对文件进行一次读操作,它的访问时间就会改变。例如像:cat、more等操作,但是像之前的stat还有ls命令对atime是不会有影响的;
  3. mtime(状态时间):当文件的状态被改变的时候,状态时间就会随之改变,例如当使用chmod、chown等改变文件属性的操作是会改变文件的ctime的。
  • Linux监控网络带宽的命令,查看特定进程的占用网络资源情况命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章