Linux知识及运维面经

Linux知识

  1. 快捷按键
按键 作用
Ctrl+c 结束
Ctrl+d 键盘输入结束或退出终端
Ctrl+s 暂停当前程序,暂停后按下任意键恢复运行
Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg
Ctrl+a 将光标移至输入行头,相当于Home键
Ctrl+e 将光标移至输入行末,相当于End键
Ctrl+k 删除从光标所在位置到行末
Alt+Backspace 向前删除一个单词
Shift+PgUp 将终端显示向上滚动
Shift+PgDn 将终端显示向下滚动

2.通配符
主要用于模糊查询,*和?

字符 含义
* 匹配 0 或多个字符
? 匹配任意一个字符
[list] 匹配 list 中的任意单一字符
[^list] 匹配 除 list 中的任意单一字符以外的字符
[c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9][a-z]
{string1,string2,…} 匹配 string1 或 string2 (或更多)其一字符串
{c1…c2} 匹配 c1-c2 中全部字符 如{1…10}
$ touch rice.txt march.txt
$ ls *.txt
march.txt  rice.txt
$ find *.txt
march.txt
rice.txt
  1. man 查看帮助
$ man <command_name>

通常情况下,man 手册里面的内容都是英文的,这就要求你有一定的英文基础。man 手册的内容很多,涉及了 Linux 使用过程中的方方面面。为了便于查找,man 手册被进行了分册(分区段)处理,在 Research UNIX、BSD、OS X 和 Linux 中,手册通常被分为 8 个区段,安排如下:

区段 说明
1 一般命令
2 系统调用
3 库函数,涵盖了 C 标准函数库
4 特殊文件(通常是/dev 中的设备)和驱动程序
5 文件格式和约定
6 游戏和屏保
7 杂项
8 系统管理命令和守护进程

要查看相应区段的内容,就在 man 后面加上相应区段的数字即可,如:

$ man 1 ls
  1. 查看用户
$ who am i 
参数 说明
-a 打印能打印的全部
-d 打印死掉的进程
-m 同am i,mom likes
-q 打印当前登录用户数及用户名
-u 打印当前登录用户登录信息
-r 打印运行等级

su -l lilei 切换到lilei

  1. 在 Linux 里面如何知道自己属于哪些用户组呢?

    • 使用 groups 命令:groups shiyanlou
    • 查看 /etc/group 文件
      $ cat /etc/group | grep -E "shiyanlou"
      在这里插入图片描述
      /etc/group 的内容包括用户组(Group)用户组口令GID(组 ID)该用户组所包含的用户(User),每个用户组一条记录。格式如下:
      group_name:password:GID:user_list
  2. 删除/添加用户是很简单的事:

    $ sudo adduser lilei
    $ sudo deluser lilei --remove-home
    

    使用--remove-home参数在删除用户时候会一并将该用户的工作目录一并删除。如果不使用那么系统会自动在 /home 目录为该用户保留工作目录。

    Linux知识及运维面经_第1张图片
    删除用户组可以使用 groupdel 命令,倘若该群组中仍包括某些用户,则必须先删除这些用户后,才能删除群组。

  3. 查看文件权限

    $ ls -l
    

    Linux知识及运维面经_第2张图片
    Linux知识及运维面经_第3张图片
    Linux知识及运维面经_第4张图片
    Linux一切届文件

    $ ls -al
    # 查看某一个目录的完整属性,而不是显示目录里面的文件属性
    $ ls -dl <目录名> 
    # 显示所有文件大小,并以普通人类能看懂的方式呈现
    $ ls -asSh 
    
  4. 变更文件所有者

    $ cd /home/lilei
    $ ls iphone11
    $ sudo chown shiyanlou iphone11
    

    Linux知识及运维面经_第5张图片

  5. 文件系统及目录
    Linux知识及运维面经_第6张图片
    Linux知识及运维面经_第7张图片

  6. 新建,复制,删除文件及目录

    $ cd ~
    $ touch test
    $ mkdir mydir
    $ mkdir -p father/son/grandson
    

    对文件的复制操作

    $ cp test father/son/grandson
    

    直接对文件夹复制会出现错误,需要-r或-R参数,表示递归复制。

    $ cd /home/shiyanlou
    $ mkdir family
    $ cp -r father family
    

    删除

    $ rm test
    $ rm -f test #遇到只读文件时的强制删除
    $ rm -r family #递归删除文件夹
    $ rm -rf family #强制递归删除
    

    剪切 重命名

    $ cd /home/shiyanlou/
    
     #使用通配符批量创建 5 个文件:
    $ touch file{
           1..5}.txt
    
     #批量将这 5 个后缀为 .txt 的文本文件重命名为以 .c 为后缀的文件:
    $ rename 's/\.txt/\.c/' *.txt
    
     #批量将这 5 个文件,文件名和后缀改为大写:
    $ rename 'y/a-z/A-Z/' *.c
    
  7. 查看文件
    cat:正序显示
    tac:倒序显示
    nl:带行数打印

    nl参数
    -b : 指定添加行号的方式,主要有两种:
    -b a:表示无论是否为空行,同样列出行号("cat -n"就是这种方式)
    -b t:只列出非空行的编号并列出(默认为这种方式)
    -n : 设置行号的样式,主要有三种:
    -n ln:在行号字段最左端显示
    -n rn:在行号字段最右边显示,且不加 0
    -n rz:在行号字段最右边显示,且加 0
    -w : 行号字段占用的位数(默认为 6 位)

    #带行数的打印
    $ cat -n passwd
    
    • 使用 more 和 less 命令分页查看文件
    • 使用 head 和 tail 命令查看文件
      默认为 10 行,不足 10 行则显示全部)和尾几行
    $ tail /etc/passwd
    $ tail -n 1 /etc/passwd
    
  8. 查看文件类型
    file :
    与 Windows 不同的是,如果你新建了一个 shiyanlou.txt 文件,Windows 会自动把它识别为文本文件,而 file 命令会识别为一个空文件。这个前面我提到过,在 Linux 中文件的类型不是根据文件后缀来判断的。当你在文件里输入内容后才会显示文件类型。
    Linux知识及运维面经_第8张图片

  9. 添加自定义路径到“PATH”环境变量

    $ PATH=$PATH:/home/shiyanlou/mybin
    

    这里一定要使用绝对路径,但仅仅在本次终端有效,如果想要每次启动shell时都有效,可以在每次启动时自动执行添加上面添加自定义路径到PATH的命令
    在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。实验楼的环境使用的 Shell 是 zsh,它的配置文件是 .zshrc,相应的如果使用的 Shell 是 Bash,则配置文件为 .bashrc。它们在 etc 下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。Shell 的种类有很多,可以使用 cat /etc/shells 命令查看当前系统已安装的 Shell

    $ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc
    
  10. 搜索文件
    与搜索相关的命令常用的有 whereiswhichfindlocate

    • whereis简单快速
      whereis 只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。如果想要获得更全面的搜索结果可以使用 locate 命令。

    • locate快而全
      使用 locate 命令查找文件也不会遍历硬盘,它通过查询 /var/lib/mlocate/mlocate.db 数据库来检索信息。不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb 命令来更新数据库。所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb 命令(在我们的环境中必须先执行一次该命令)。注意这个命令也不是内置的命令,例如在我们的环境中就需要手动安装,然后执行更新。

      $ sudo apt-get update
      $ sudo apt-get install locate
      $ sudo updatedb
      
    • which小而精
      which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的程序,因为它只从 PATH 环境变量指定的路径中去搜索命令并且返回第一个搜索到的结果。也就是说,我们可以看到某个系统命令是否存在以及执行的到底是哪一个地方的命令。

    • find精而细
      这条命令表示去 /etc/ 目录下面 ,搜索名字叫做 interfaces 的文件或者目录。这是 find 命令最常见的格式,千万记住 find 的第一个参数是要搜索的地方。命令前面加上 sudo 是因为 shiyanlou 只是普通用户,对 /etc 目录下的很多文件都没有访问的权限,如果是 root 用户则不用使用。

      $ sudo find /etc/ -name interfaces
      

      注意 find 命令的路径是作为第一个参数的, 基本命令格式为 find [path][option] [action]

      与时间相关的命令参数:

      参数 说明
      -atime 最后访问时间
      -ctime 最后修改文件内容的时间
      -mtime 最后修改文件属性的时间
      下面以 -mtime 参数举例:
      -mtime n:n 为数字,表示为在 n 天之前的“一天之内”修改过的文件
      -mtime +n:列出在 n 天之前(不包含 n 天本身)被修改过的文件
      -mtime -n:列出在 n 天之内(包含 n 天本身)被修改过的文件
      -newer file:file 为一个已存在的文件,列出比 file 还要新的文件名Linux知识及运维面经_第9张图片

      列出 home 目录中,当天(24 小时之内)有改动的文件:

      $ find ~ -mtime 0
      

      列出用户家目录下比 /etc 目录新的文件:

      $ find ~ -newer /etc
      
  11. 找出 /etc/ 目录下的所有以 .list 结尾的文件。

    $ locate /etc/\*.list
    $ sudo find /etc/ -name \*.list
    
  12. 文件的打包和解压

    $ cd /home/shiyanlou
    $ zip -r -q -o shiyanlou.zip /home/shiyanlou/Desktop
    $ du -h shiyanlou.zip
    $ file shiyanlou.zip
    

    -r 参数表示递归打包包含子目录的全部内容,-q参数表示为安静模式,即不向屏幕输出信息,-o,表示输出文件,需在其后紧跟打包输出文件名。后面使用 du 命令查看打包后文件的大小,-l 参数将 LF转换为CR+LF来达到以上目的。

    解压:
    将 shiyanlou.zip 解压到当前目录:

    $ unzip shiyanlou.zip
    

    使用安静模式,将文件解压到指定目录:

    $ unzip -q shiyanlou.zip -d ziptest
    

    上述指定目录不存在,将会自动创建。如果你不想解压只想查看压缩包的内容你可以使用 -l 参数:

    $ unzip -l shiyanlou.zip
    

    注意: 使用 unzip 解压文件时我们同样应该注意兼容问题,不过这里我们关心的不再是上面的问题,而是中文编码的问题,通常 Windows 系统上面创建的压缩文件,如果有有包含中文的文档或以中文作为文件名的文件时默认会采用 GBK 或其它编码,而 Linux 上面默认使用的是 UTF-8 编码,如果不加任何处理,直接解压的话可能会出现中文乱码的问题(有时候它会自动帮你处理),为了解决这个问题,我们可以在解压时指定编码类型。

    使用 -O(英文字母,大写 o)参数指定编码类型:

    unzip -O GBK 中文压缩文件.zip
    

    tar:

    $ cd /home/shiyanlou
    $ tar -P -cf shiyanlou.tar /home/shiyanlou/Desktop
    
    # 压缩
    $ tar -czf shiyanlou.tar.gz /home/shiyanlou/Desktop
    # 解压
    $ tar -xzf shiyanlou.tar.gz
    

    -c: 创建压缩未见
    -z :使用 gzip压缩
    -f 压缩文件命名

    常用命令:

    zip:
    打包 :zip something.zip something (目录请加 -r 参数)
    解包:unzip something.zip
    指定路径:-d 参数
    tar:
    打包:tar -cf something.tar something
    解包:tar -xf something.tar
    指定路径:-C 参数

运维 面经


作者:千万201904141704267
链接:https://www.nowcoder.com/discuss/472666?type=all&order=time&pos=&page=1&channel=1009&source_id=search_all
来源:牛客网

1.自我介绍
2.实习经历,负责的业务
3.linux相关知识

kill: kill [-s 信号声明 | -n 信号编号 | -信号声明] 进程号 | 任务声明 ... 或 kill -l [信号声明]
    向一个任务发送一个信号。

    向以 PID 进程号或者 JOBSPEC 任务声明指定的进程发送一个以
    SIGSPEC 信号声明或 SIGNUM 信号编号命名的信号。如果没有指定
    SIGSPEC 或 SIGNUM,那么假定发送 SIGTERM 信号。

    选项:
      -s sig    SIG 是信号名称
      -n sig    SIG 是信号编号
      -l        列出信号名称;如果参数后跟 `-l'则被假设为信号编号,
        而相应的信号名称会被列出

    Kill 成为 shell 内嵌有两个理由:它允许使用任务编号而不是进程号,
    并且在可以创建的进程数上限达到是允许进程被杀死。

    退出状态:
    返回成功,除非使用了无效的选项或者有错误发生。
  • 如何终止进程
  • kill 和kill -9的区别
    默认的kill信号是15,也就是优雅的kill,系统会发送一个SIGTERM的信号给对应的程序。当程序接收到该信号后,具体要如何处理是自己可以决定的。
    这时候,应用程序可以选择:
    1、立即停止程序
    2、释放响应资源后停止程序
    3、忽略该信号,继续执行程序
    和kill -15相比,kill -9就相对强硬一点,系统会发出SIGKILL信号,他要求接收到该信号的程序应该立即结束运行,不能被阻塞或者忽略。
    应用程序是没有时间进行"准备工作"的,所以这通常会带来一些副作用,数据丢失或者终端无法恢复到正常状态等。
  • kill 发送的是什么信号
    2号 SIGINT:中断信号
    9号 SIGKILL:杀死信号
    11号 SIGSEGV:段错误信号
    19号 SIGSTOP:暂停信号(如使用control + z操作)
    18号 SIGCONT:继续信号(对应19号暂停信号)

4.介绍项目
5.tcp三次握手四次挥手,

为什么是三次握手;time_wait状态,close_wait状态过多该怎么处理
Linux知识及运维面经_第10张图片
三次握手的原因:既要保证数据可靠传输,又要提高传输的效率
6.编程,熟悉的语言

作者:Ingram_Zhao
链接:https://www.nowcoder.com/discuss/369542?type=all&order=time&pos=&page=1&channel=1009&source_id=search_all
来源:牛客网

PS:牛客网关于运维开发相关岗位面经和帖子是在太少了,然后与同样想要从事SRE和运开岗位的小伙伴分享

公司部门及团队:阿里巴巴-CBU-SRE团队

岗位:SRE开发工程师

面试时间:2020/2/21 90min

一面:

网络相关:

  1. OSI 七层模型 - TCP/IP 五层模型
    Linux知识及运维面经_第11张图片

  2. TCP和UDP区别

  3. TCP三次握手和四次挥手

  4. 最后一次ACK包丢失会进入什么样的一个状态

  5. 关于TIME_WAIT状态等待2MSL解决什么问题

  6. 滑动窗口

  7. DNS使用的到协议(TCP/UDP分别在什么情况下使用)

  8. 广播风暴产生的原因及解决方法

  9. TLS/SSL处于OSI哪一层
    传输层

  10. http/https区别,https请求流程(加密方式)

系统相关:

  1. 进程/线程

    1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;

    2. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线

    3. 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信号等),某进程内的线程在其他进程不可见;

  2. 调度和切换:线程上下文切换比进程上下文切换要快得多

  3. Apache工作机制和Nginx工作机制对比分析

  4. 进程间通信方式(管道的应用场景)

  5. Linux文件权限755(文件目录x权限区别)
    rwx 4 2 1

  6. cpu load x (x这个值代表什么意思)

    • 若是 load < 0.7 并不会去关注他;
    • 若是 0.7< load < 1 的时候我们就需要稍微关注一下了,虽然还可以应付但是这个值已经离临界不远了;
    • 若是 load = 1 的时候我们就需要警惕了,因为这个时候已经没有更多的资源的了,已经在全力以赴了;
    • 若是 load > 5 的时候系统已经快不行了,这个时候你需要加班解决问题了
  7. 如何查看进程使用到的文件

  8. 软硬链接区别(实现机制)

  9. kill和kill -9的区别,有没有更优雅的方式kill进程

  10. buffer和cache的区别

  11. Shell脚本中的return和exit作用及return的取值范围

容器相关:

  1. 容器和VM的区别

  2. 资源隔离和资源限制相关问题

数据结构和算法:

  1. 元组和链表的区别

  2. hash表是什么,如何解决hash冲突

  3. 快速排序和冒泡排序的时间复杂度和空间复杂度及稳定性

  4. 快速排序和冒泡排序的原理,还有比冒泡排序更慢的算法吗

Python相关:

  1. 生成器和迭代器

  2. Python伪线程

在线编程:

  1. 伯乐测评系统(三选一)

  2. 选的冒泡和快排

腾讯云-技术咨询

时间:2020/02/28 20min

一面:

校园经历

实习经历

获奖证书

表达沟通

详细说说STP生成树协议

腾讯云/阿里云/AWS负载均衡服务的区别

如何理解云计算的

职业发展

百度-手机百度-SRE

一面:

时间:2020/2/29 40min

1.自我介绍

2.实习经历(聊的比较长)

3.子网掩码的作用

4.负载均衡

5.负载均衡算法

6.Linux启动流程

7.Linux常用命令(怎么看平均负载)

8.如何找出日志中 “www.baidu.com” 出现的次数

9.Python模块的使用(简历中写到的)

10.Python中元组和列表的相同点和区别

11.Redis持久化存储机制

12.链表相交问题及空间复杂度

阿里云-混合云

2020/3/7 35min

  1. 思路:判断单链表是否有环

  2. 思路:单链表逆转

  3. 思路:快排

  4. 思路:找到第K大的值

  5. 数据结构中“堆”的概念

  6. TCP三次握手四次挥手

  7. 拥塞控制

  8. 解释vlan,应用程序中关于vlan的使用

  9. Trunk口

  10. Python切片

  11. 装饰器和闭包

  12. Kubernetes控制器有哪些

  13. 服务发现怎么玩的(service keub-proxy)

  14. iptables四表五链

  15. 持久化存储方式(本地 pv pvc)

  16. daemoset 和 statefulset

  17. 线程池实现原理

阿里云-混合云

岗位:基础平台开发

时间:2020/3/3 40min

  1. 学校课程

  2. 冒泡排序

  3. ansible如何去验证(思路)

  4. nova工作流程

  5. Keepalived高可用服务

  6. 关于Gitlab调优

  7. Python数据类型,元组和列表操作

  8. Python协程相关

  9. Python多进程

  10. 最喜欢的公众号

  11. 最近看的一篇文章

开发小哥:为什么想做运维…

部门:腾讯视频

岗位:业务运维

一面:

时间:2020/3/10 16:00 15min

  1. 自我介绍

  2. 挑选个实习经历说说

  3. 职业发展

  4. 语言 项目

  5. TCP三次握手

二面:

时间:2020/3/11 14:30 55min

  1. 项目经历1

  2. 项目经历2

  3. 实习经历1

  4. 实习经历2

  • 基本知识点在项目经历和实习经历中进行发散
  1. 系统调优

  2. Keepalived和LVS原理

  3. 场景题1:服务器CPU负载很高,但是使用率不高

  4. 场景题2:如果腾讯视频有大量用户觉得卡

三面:

时间:2020/3/12 11:00 20min

  1. 校园经历

  2. 成绩和学习课程

  3. 问了几个问题(操作系统) C不会

4.兴趣爱好

HR面:

时间:2020/3/16 17:30 30min

  1. 校园经历

  2. 实习经历

  3. 项目经历

  4. 兴趣爱好

阿里云-运维开发

一面:

  1. 在线编程

  2. 实习经历

3.了解Java吗?不会

百度-手机百度-SRE

二面:应该是被捞的选手

时间:2020/3/18 30min

  1. 自我介绍

  2. 进程和线程

  3. 多进程和多线程(Web Server怎么选)

  4. 快排原理及时间复杂度

  5. 创建0-99个空文件

  6. 判断一个文件中的重复IP地址

  7. 如何反转一个整数

  8. 场景分析:AB模块,B模块原本每秒能接受1000个A的消息,现在只能收到10个

  9. 项目经历(选一个聊)

美团-基础平台-SRE

2020/3/20 60min

一面:

  1. 自我介绍

  2. TCP三次握手和四次挥手

  3. docker如何限制cpu资源

  4. docker的namespace

  5. 实习经历 & 项目经历

  6. 场景分析:共享桌面

  7. 学习方法 & 学习途径

你可能感兴趣的:(linux,运维)