运维面试大纲

本文汇总了MySQL数据库服务、Linux系统管理及Shell编程方面的面试常见问题,涵盖了数据库服务软件、MySQL服务进程、数据类型、索引、备份恢复、集群架构、用户授权、系统路径、文件系统、日志管理等多个主题。内容深入浅出,旨在帮助准备面试者掌握关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

MySQL-面试题

1 主流数据库服务软件有哪些?开源且跨平台的数据库软件有哪些?

主流数据库服务软件有:甲骨文公司 Oracle
IBM DB2 微软 SQL Server
美国Sybase公司 Sybase
加州大学伯克利分校计算机系开发的 PostgreSQL 开源且跨平台的数据库软件有:
MySQL、PostgreSQL:开源且跨平台
Oracle、DB2:跨平台不开源
SQL Server:不跨平台不开源
Sybase:跨平台不开源

2 MySQL 数据库的服务进程叫什么名字?监听端口是多少?默认数据库目录是?

服务进程名是mysqld;监听端口是3306;默认数据库目录为 /var/lib/mysql。

3 MySQL 默认的 3 个库叫什么名字?哪个库里的数据不占用物理磁盘空间?

mysql、test 和 information_schema。
其中,information_schema库的数据不占用磁盘空间,仅保存在内存里

4 请列出 MySQL 常用的数据类型,并写出定义这些数据类型所使用的关键字。

MySQL常用的数据类型:数值类型:所用关键字为int、float 字符类型:所用关键字为char、varchar 日期时间类型:所用关键字为year、time、datetime 枚举类型:所用关键字为set、enum

5 简述索引的优点与缺点,默认情况下哪个文件保存表的索引信息?

索引的优点与缺点如下:索引就像一本书的目录加快查询记录的速度会降低插入、更新记录的速度
默认情况下“表名.MYI” 文件保存表的索引信息

6 简述在表中创建外键字段要满足那些条件?

在表中创建外键字段要满足以下条件:表必须都使用innodb存储引擎表中外键字段的类型要匹配被参照字段要有明确的索引

7 简述 MySQL 体系结构的组成,并描述每个组成部分的作用。

主要包括8个部分:连接池:进程数限制、内存检查、缓存检查等。
SQL接口:用户通过sql客户端发过来的命令,由sql接口接收,sql操作(DML数据操作语言:查询、修改、升级数据等;DDL数据定义语言:创建一个新的数据库、新的索引、删除一个用户等;存储过程、视图触发器。
分析器: 分析查询语句 事务处理 对象访问权限。
优化器: 优化访问路径 、 生成执行树。
缓存和缓冲:保存sql查询结果。
存储引擎:用于管理存储的文件系统,将逻辑结构转换为物理结构的程序;不同的存储引擎有不同的功能和存储方式。
管理工具:备份,恢复,安全,移植,集群等,这些工具一般和文件系统打交道,不需要和mysql-server打交道,它们对应的都是命令。物理存储设备(文件系统)。

8 简述 MySQL 数据库访问的执行过程。

1) 客户端发出请求。
2) 服务器端开辟线程响应客户端请求。
3) 客户端发起sql语句查询数据库。
4) 查询缓存:记录用户的sql查询语句,如果查询内容相同,直接从查询缓存回复。
5) 如果缓存没有进入分析器。
6) 分析器:分析用户命令语法是否正确,将用户的命令进行切片,一个词一个词用空格隔开,获得用户要查询的表、内容、用户的权限等。
7) 优化器:执行路径的选择,生成执行树。(每个SQL语句都有很多执行路径,优化的目的就是在这些执行路径里选择最优的执行路径)。
8) 存储引擎:用于管理存储的文件系统,不同的存储引擎有不同的功能和存储方式。

9 简述 MySQL 数据库中插入、更新、查询、删除表记录的指令格式。

连接到MySQL数据库服务器,练习以下表记录操作:向表中插入记录的语法格式更新表记录的语法格式查询表记录的语法格式删除表记录的语法格式参考答案
1) 向表中插入记录的语法格式
insert (into)表名(字段名列表) values(字段名=值,字段名=值,…);
2) 更新表记录的语法格式
update 表名(set) (字段名=值,字段名=值,…) where(条件表达式列表);
3) 查询表记录的语法格式
select (字段名列表) (from) 表名 (where) 条件表达式列表;
4) 删除表记录的语法格式
delete (from) 表名 (where) ( 条件表达式列表);

10 简述用户授权命令的语法格式。

grant 权限列表 on 数据库 to 用户名@“客户端地址” identified by “密码” with grant option;

11 在 MySQL-MMM 集群中有几种角色,各自的功能是什么?

共3种角色:客户端、monitor节点(管理节点)、agent节点(数据库节点)客户端:访问集群管理节点:负责所有的监控工作的监控守护进程,决定故障节点的移除或恢复数据库节点:运行在MySQL服务器上的代理守护进程,提供简单远程服务集、提供给监控节点(可用来更改只读模式、复制的主服务器等)

12 在 MySQL-MMM 集群中可以有多少台主数据库服务器、多少台从数据库服务器?

在MySQL-MMM环境中主数据库有且只能有2台,从数据库理论上可以任意多台。

13 在 MySQL-MMM 集群中均衡模式和排他模式的作用是?

均衡模式一般用于从数据库,可实现多个虚拟IP地址。
排他模式一般用于主数据库,只可设置一个虚拟IP地址。

14,简述 mysqldump 备份数据时数据库名的表示方式。

–all-databases 所有库数据库名 指定单个库数据库名.表名 指定库里的指定表
-B 数据1 数据库2 备份多个库

15,什么是 MySQL 集群?

MySQL 集群是一个无共享的(shared-nothing),分布式节点架构的存储方案,其目的是提供容错性和高性能。数据在单个数据节点(有时也称存储节点)上存储和复制,每个数据节点运行在独立的服务器上并维护数据的一份拷贝。每个集群还有管理节点。数据更新使用读已提交隔离级别(read-committed isolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phased commit)保证所有节点都有相同的数据 (如果任何一个写操作失败,则更新失败)。
MySQL 集群的最初实现将所有信息都保存在主存内,没有任何永久性存储。后来MySQL 集群允许数据存储在磁盘上。通过存储引擎层MySQL 服务器作为查询引擎,可以使MySQL 集群的性能达到最佳。这样就可以将 MySQL 应用透明地迁移到 MySQL 集群中去。

16,MySQL 集群和 MySQL 有和不同?

“集群和复制之间有什么区别那?” 集群的定义很多,通常认为集群包含成员、消息、冗余和自动故障转移等功能,而复制仅仅是一个服务器向别一个服务器发送消息(数据)的方式。我们先讨论集群内部的复制(又称本地复制)。

17,MySQL 集群的特点?

答案:为了实现最高性能。高可用性和冗余等目标。数据在集群内部的对等数据节点之间互相复制。数据复制采用同步机制,每个数据节点到所有其他数据节点上,数据在多个数据节点上存储。

18,MySQL 集群有一些创建高可用性系统的专用功能,主要包括?

节点回复、日志、检查点、系统恢复、热备份恢复、无单点故障、故障转移、分区、联机操作

19、MySQL 中 myisam 与 innodb 的区别,至少 5 点

【评析】将Mysql常见的存储引擎的特点归纳表格如下

20 什么是读写分离?

MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是让主数据库处理事务性查询,而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从数据库。
当然,主服务器也可以提供查询服务。使用读写分离最大的作用无非是环境服务器压力。

21 读写分离的好处

1.增加冗余
2.增加了机器的处理能力
3.对于读操作为主的应用,使用读写分离是最好的场景,因为可以确保写的服务器压力更小,而读又可以接受点时间上的延迟。

22 读写分离提高性能之原因

1.物理服务器增加,负荷增加
2.主从只负责各自的写和读,极大程度的缓解X锁和S锁争用
3.从库可配置myisam引擎,提升查询性能以及节约系统开销
4.从库同步主库的数据和主库直接写还是有区别的,通过主库发送来的binlog恢复数据,但是,最重要区别在于主库向从库发送binlog是异步的,从库恢复数据也是异步的
5.读写分离适用与读远大于写的场景,如果只有一台服务器,当select很多时,update和delete会被这些 select访问中的数据堵塞,等待select结束,并发性能不高。 对于写和读比例相近的应用,应该部署双主相互复制
6.可以在从库启动是增加一些参数来提高其读的性能,例如–skip-innodb、–skip-bdb、–low-priorityupdates以及–delay-key-write=ALL。当然这些设置也是需要根据具体业务需求来定得,不一定能用上
7.分摊读取。假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1分钟内有10条写入,
150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白了就是拿机器和带宽换性能。MySQL官方文档中有相关演算公式:官方文档 见6.9FAQ之“MySQL复制能够何时和多大程度提高系统性能”
8.MySQL复制另外一大功能是增加冗余,提高可用性,当一台数据库服务器宕机后能通过调整另外一台从库来以最快的速度恢复服务,因此不能光看性能,也就是说1主1从也是可以的。

23 varchar 与 char 的区别;varchar(50)中 50 的涵义;int(20)中 20 的涵义;

char是定长变量,varchar是变长变量。 varchar(50)表示这一行的变量最大的存储字节是50个字节,int(20) 同理。
【评析】假设有一行是name char(8),如果有一个数据是叫 AAA,那么它仅仅只有三个字节被存储进去,但是依旧存储了8个字节,多余的5个字节空着也就空着了。而是name varchar(8),同样是AAA,由于是变长,所以只保存了3个字节,剩下5个字节是弹性的,有就用,没有就不用。
在读取方面,char的读取速度要比varchar快,也就是常说的“用读取换容量”,但是还是多用varchar,当数据库内容成万上亿的时候,节省的容量是非常非常可观的。

24 计划,mysqldump 以及 xtranbackup 的实现原理;备份恢复时间;备份恢复失败如何处理

mysqldump是采用sql级别的备份机制,将数据表导成sql脚本文件,在不用的mysql版本之间升级时相对比较合适。
xtranbackup是innodb的hotbackup工具,xtrbackup在启动的时候会复制所有的数据文件,同时会启动一个后台进程,用于监视事务日志,并且从事务日志复制最新的修改。所以xtrbackup在启动的开始,就不懂的将事务日志的每个数据文件的修改都记录下来。
mysqldump的备份和恢复时间都很慢,任何数据的更新和变化都会被挂起。
xtrabackup的恢复时间比mysqldump快一点,但是会锁表。
备份恢复失败的话,其实原因很多,主要可能就是参数设置的不对,检查一下参数。
【评析】使用mysqldump备份数据表的命令,在shell下执行: mysqldump -u用户名 -p密码(可以直接-p) -h主机名 --databases 数据库名 > 要备份的文件路径 mysqldump -u用户名 -p密码 -h主机名 --all-databases >要备份的文件路径
mysqldump -u用户名 -p密码 -h主机名 --no-data 数据库名 >要备份的文件路径这里并不全,另写文章专门补充。

25 MySQL 中 InnoDB 引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的?

InnoDB的行锁是通过加在索引上实现的,为什么这么设计,我也不知道,去问mysql的设计公司。

26 MySQL 数据库备份方式

增量备份、差异备份、完整备份

27 MySQL 主从复制原理?

答案:分为同步复制和异步复制,实际复制架构中大部分为异步复制。
复制的基本过程如下:
1)、Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2)、Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;
3)、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;
4)、Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
Mysql为了解决这个风险并提高复制的性能,将Slave端的复制改为两个进程来完成。提出这个改进方案的人是Yahoo!的一位工程师“Jeremy Zawodny”。这样既解决了性能问题,又缩短了异步的延时时间,同时也减少了可能存在的数据丢失量。当然,即使是换成了现在这样两个线程处理以后,同样也还是存在slave数据延时以及数据丢失的可能性的,毕竟这个复制是异步的。只要数据的更改不是在一个事物中,这些问题都是会存在的。如果要完全避免这些问题,就只能用mysql的cluster来解决了。不过mysql的cluster是内存数据库的解决方案,需要将所有数据都load到内存中,这样就对内存的要求就非常大了,对于一般的应用来说可实施性不是太大。
复制常用架构
Mysql复制环境90%以上都是一个Master带一个或者多个Slave的架构模式,主要用于读压力比较大的应用的数据库端廉价扩展解决方案。因为只要master和slave的压力不是太大(尤其是slave端压力)的话,异步复制的延时一般都很少很少。尤其是自slave端的复制方式改成两个进程处理之后,更是减小了slave端的延时。而带来的效益是,对于数据实时性要求不是特别的敏感度的应用,只需要通过廉价的pc server来扩展slave的数量,将读压力分散到多台slave的机器上面,即可解决数据库端的读压力瓶颈。这在很大程度上解决了目前很多中小型网站的数据库压力瓶颈问题,甚至有些大型网站也在使用类似方案解决数据库瓶颈。

System-面试题

1 什么是绝对路径?什么是相对路径?

绝对路径:以 / 开始的完整路径
相对路径:以当前工作目录为参照的路径

2 常见通配符的含义。

在命令行环境中,通配符 * 、?、[n-m] 、{n,m} 各自的含义是什么?参考答案
* :匹配任意个数的任意字符
? :匹配任意单个字符
[n-m] :匹配从n到m这个连续范围内的任意单个字符
{n,m} :匹配字符串n或m

3 Linux中管道“|”的作用?

将前一个命令的输出结果,交由后面命令处理,当做后面命令的参数

4 简述find命令的格式及常见用法。

命令格式:find [查找范围] [查找条件]
常见的查找条件设置:
-type:按文件类型查找
-name:按文件名称查找
-size:按文件大小查找
-mtime:按内容修改的时间

5 vim编辑器的工作模式及切换。

vim编辑器包括哪几种模式,各自的作用是什么,如何切换?参考答案主要包括三种工作模式:命令模式:启动vim编辑器后默认进入命令模式,该模式中主要完成如光标移动、字符串查找,以及删除、复制、粘贴文件内容等相关操作。
输入模式:该模式中主要的操作就是录入文件内容,可以对文本文件正文进行修改、或者添加新的内容。处于输入模式时,vim编辑器的最后一行会出现“—插入 --”的状态提示信息。
末行模式:该模式中可以设置vim编辑环境、保存文件、退出编辑器,以及对文件内容进行查找、替换等操作。
处于末行模式时,vim编辑器的最后一行会出现冒号“:”提示符。

6 YUM简介。

什么是YUM,其作用是什么,主要支持哪几种方式提供软件源?参考答案是一种基于“C/S”结构的RPM软件更新机制,所有的软件包由集中的软件仓库提供,能够自动分析并解决软件包之间的依赖关系。

  • 支持的软件源主要包括:
    本地文件夹:file://… …
    FTP服务器:ftp://… …
    HTTP服务器:http://
  • 客户端配置文件。
    在建立 .repo 仓库配置文件时,常见的配置条目如下所示,请补充各自的作用。
    [Server]:( ) name:( ) baseurl:( ) enabled:( ) gpgcheck:( )
    gpgkey:( )参考答案自定义源的名称,具有唯一性
    本软件源的描述字串
    指定YUM服务端的URL地址是否启用此频道是否验证待安装的RPM包用于RPM验证的密钥文件
  • 3 客户端配置文件路径与命名
    为RHEL6服务器指定要使用的YUM源时,建立的配置文件一般应放在( )目录下,其扩展名应该是( )。
    参考答案
    /etc/yum.repos.d/*.repo

7 编译源码包过程介绍。

采用源码包编译的方式安装软件包时,有哪些基本过程、各自的作用是什么?参考答案 tar解包:解压、释放安装包内的文件
./configure配置:针对当前系统环境指定安装目录、选择功能等设置。
make编译:将源代码编译成二进制的可执行程序、库文件等数据。
make install:将编译好的程序文件、配置文档等复制到对应的安装目录。

8 Linux目录结构介绍。

Linux系统的根目录下主要包括哪些文件夹,各自的作用是什么?参考答案
/boot:存放Linux内核、引导配置等启动文件。
/bin:存放最基本的用户命令,普通用户有权限执行。
/dev:存放硬盘、键盘、鼠标、光驱等各种设备文件。
/etc:存放各种配置文件、配置目录。
/home:存放普通用户的默认工作文件夹(即宿主目录、家目录)。
/root:Linux系统管理员(超级用户)root的宿主目录。
/sbin:存放最基本的管理命令,一般管理员用户才有权限执行。
/usr:存放额外安装的应用程序、源码编译文件、文档等各种用户资料。
/var:存放日志文件、用户邮箱目录、进程运行数据等变化的文档。
/tmp:存放系统运行过程中使用的一些临时文件。

9 find命令的扩展

在Linux中find常见的选项都有哪些?都有什么作用?参考答案
-type:按文件类型查找
-name:按文件名称查找
-size:按文件大小查找
-mtime:按内容修改的时间
-iname:根据名称查找,忽略大小写
-uid:根据uid查找,属于这个用户的文件
-gid :根据gid查找,属于这个组的文件
-user :根据用户名查找,查找属于这个用户的
-group :根据组名查找,查找属于这个组的
-nouser :查找这个文件不属于任何用户的
-nogroup :查找这个文件不属于任何组的
-maxdepth :限制目录查找的深度
-inum :根据文件i节点编号查找

10 简述autofs服务。

作用、主要配置文件、配置要点?参考答案
1) autofs的作用:
autofs即触发挂载,它是一种看守程序。如果检测到用户正试图访问一个尚未挂载的文件系统,它就会自动检测该文件系统,如果存在,那么autofs会自动将其挂载。另一方面,如果它检测到某个已挂载的文件系统在一段时间内没有被使用,那么autofs会自动将其卸载。因此一旦运行了autofs后,用户就不再需要手动完成文件系统的挂载和卸载。
2) autofs的配置文件:/etc/auto.master与/etc/auto.misc

11 简述LVM的含义及特点。

LVM的含义及优势?/boot是否可建立在LVM卷上,为什么?参考答案
1) LVM:用来整合磁盘空间和文件系统的一种逻辑机制,通过将多个物理分区/磁盘从逻辑上组合成一个更大的整体,从这个整体中划分出不同的逻辑分区,用来创建文件系统。
2) LVM的主要优势如下所述:逻辑分区的大小可以根据需要扩大和缩减,因此生产系统上的文件系统也可以在线改变大小(在卷组容量范围内),不会导致系统中断物理存储空间(硬盘、分区)由LVM统一组织为卷组,可以方便的加入或移走分区,以扩大或减小卷组的容量,充分利用硬盘空间
文件系统建立在LVM逻辑卷之上,可以跨越分区、跨越磁盘,方便使用
3) /boot不能建立在LVM之上,因为/boot/目录下存放着引导程序,而Linux启动不支持从LVM卷上读取引导程序。

12 简述RAID的含义及特点。

RAID的含义及优势?RAID0、RAID1、RAID5分别指什么、各自的特点?参考答案
1) RAID:廉价冗余磁盘阵列,指通过硬件/软件技术将多个较小/低速的磁盘整合成一个大磁盘使用的一种存储技术,其不仅可存储数据,还可以实现一定程度的冗余保障,具有“速度快、安全性高”的优势。
2) RAID0、RAID1、RAID5的含义及特点如下:
RAID0:条带模式,由两个或两个以上的磁盘组成,同一份文档分散在不同的磁盘中,并行写入,提高写效率。
RAID1:镜像模式,由至少两个磁盘组成,同一份文件被分别写入到不同的磁盘中,每份磁盘数据一样,实现容错,提高读效率。
RAID5:分布式奇偶校验的独立磁盘模式,结合RAID0和RAID1的好处,同时避免它们的缺点。由至少3块以上大小相同的磁盘组成,实现冗余。

13 RHEL6.x系统包括哪几种运行级别。

各自的特点是什么?参考答案
默认包括7种运行级别:
0:关机
1:单用户模式
2:字符界面的多用户模式(不支持网络)
3:字符界面的完整多用户模式
4:未分配使用
5:图形界面的多用户模式
6:重启

14请描述RHEL6.x系统的引导过程?

加载BIOS,检查硬件信息读取并执行第一个开机设备内MBR 运行grub引导加载 kernel
内核启动/sbin/init程序
init 系统初始化
确定默认的运行级别
触发runlevel事件,运行/etc/rc.d/rc 最后执行/etc/rc.d/rc.local 加载终端或X-Window接口

15 SSH协议简介。

OpenSSH服务器使用的协议、默认端口、主配置文件分别是什么?SSH与Telnet应用的区别在哪里?参考答案
OpenSSH使用TCP协议,默认端口是22,主配置文件/etc/ssh/sshd_config。
SSH的英文全称是Secure SHell,即安全外壳。SSH会把传输过程中的数据加密,且支持压缩以提高传输速度;而
Telnet在网络上以明文传送口令和数据,安全级别低,容易受到攻击。

16 Linux常见的系统日志文件都有哪些,各自的用途?

/var/log/messages 内核及公共消息日志
/var/log/cron 计划任务日志
/var/log/dmesg 系统引导日志
/var/log/maillog 邮件系统日志
/var/log/secure 记录与访问限制相关日志

17 常见的linux开机设置文件。

/etc/fstab与/etc/initab、/etc/rc.local三个配置文件的作用?
/etc/fstab:实现开机自动挂载设备的配置文件
/etc/initab:定义开机进入默认级别的配置文件
/etc/rc.local:定义开机自定义任务的配置文件

18 FTP协议简介。

FTP服务器在传输层使用的协议、默认端口、FTP主目录绝对路径?参考答案
FTP服务器在传输层使用的协议是tcp 默认的端口号为21
FTP主目录为/var/ftp

19,suid,sgid,sticky bit 的作用?

suid, 以属主的身份运行程序
sgid, 在目录中创建的文件继承所在目录的属主
sticky bit 用户只能修改,删除自己的文件

20.解释下什么是 GPL,GNU,自由软件?

GPL:(通用公共许可证):一种授权,任何人有权取得、修改、重新发布自由软件的权力。
GNU:(革奴计划):目标是创建一套完全自由、开放的的操作系统。
自由软件:是一种可以不受限制地自由使用、复制、研究、修改和分发的软件。主要许可证有GPL和BSD许可证两种。

21.如何选择 Linux 操作系统版本?

一般来讲,桌面用户首选Ubuntu;服务器首选RHEL或CentOS,两者中首选CentOS。
根据具体要求:
①安全性要求较高,则选择Debian或者FreeBSD。
②需要使用数据库高级服务和电子邮件网络应用的用户可以选择SUSE。
③想要新技术新功能功能可以选择Feddora,Feddora是RHEL和CentOS的一个测试版和预发布版本。
④根据现有状况,绝大多数互联网公司选择CentOS。现在比较常用的是7系列,现在市场占有大概一半左右。另外的原因是CentOS更侧重服务器领域,并且无版权约束。

22.初学者在 Linux 系统的开机启动项如何选择?

①.crond: 该服务用于周期地执行系统及用户配置的计划任务。有要周期性执行的任务计划需要开启,此服务是生产场景必须要用的一个软件。
②.iptables: iptables包过滤防火墙,有外网IP时,考虑开启。
③.network: 启动系统时,若想激活/关闭启动时的各个网络接口,则应(必须)考虑开启。
④.sshd: 远程连接Linux服务器时需要用到这个服务程序,所以必须要开启,否则将无法远程连接到Linux服务器。
⑤.rsyslog: 是操作系统提供的一种机制,系统的守护程序通常会使用rsyslog将各种信息收集写入到系统日志文件中,CentOS6以前此服务的名字为syslog。
⑥.sysstat: 是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于Linux系统性能数据很有帮助,比如CPU使用率、硬盘和网络吞吐数据等,这些数据的分析,有利于判断系统运行是否正常,所以它是提高系统运行效率、安全运行服务的助手。

23.请描述 Linux 系统优化的 12 个步骤。

⑴登录系统:不使用root登录,通过sudo授权管理,使用普通用户登录。
⑵禁止SSH远程:更改默认的远程连接SSH服务及禁止root远程连接。
⑶时间同步:定时自动更新服务器时间。
⑷配置yum更新源,从国内更新下载安装rpm包。
⑸关闭selinux及iptables(iptables工作场景如有wan ip,一般要打开,高并发除外)
⑹调整文件描述符数量,进程及文件的打开都会消耗文件描述符。
⑺定时自动清理/var/spool/clientmquene/目录垃圾文件,防止节点被占满(c6.4默认没有sendmail,因此可以不配。)
⑻精简开机启动服务(crond、sshd、network、rsyslog)
⑼Linux内核参数优化/etc/sysctl.conf,执行sysct -p生效。
更改字符集,支持中文,但是还是建议使用英文,防止乱码问题出现。
⑾锁定关键系统文件(chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 处理以上内容后,把chatter改名,就更安全了。
⑿清空/etc/issue,去除系统及内核版本登陆前的屏幕显示。

24.描述 Linux 运行级别 0-6 的各自含义

0:关机模式
1:单用户模式<==破解root密码
2:无网络支持的多用户模式
3:有网络支持的多用户模式(文本模式,工作中最常用的模式)
4:保留,未使用
5:有网络支持的X-windows支持多用户模式(桌面)
6: 重新引导系统,即重启

25.描述 Linux 系统从开机到登陆界面的启动过程

⑴开机BIOS自检,加载硬盘。
⑵读取MBR,MBR引导。
⑶grub引导菜单(Boot Loader)。
⑷加载内核kernel。
⑸启动init进程,依据inittab文件设定运行级别
⑹init进程,执行rc.sysinit文件。
⑺启动内核模块,执行不同级别的脚本程序。
⑻执行/etc/rc.d/rc.local
⑼启动mingetty,进入系统登陆界面。

26.描述 Linux 下软链接和硬链接的区别

在Linux系统中,链接分为两种,一种是硬链接(Hard link),另一种称为符号链接或软链接(Symbolic
Link)。
①默认不带参数的情况下,ln创建的是硬链接,带-s参数的ln命令创建的是软链接。
②硬链接文件与源文件的inode节点号相同,而软链接文件的inode节点号,与源文件不同,
③ln命令不能对目录创建硬链接,但可以创建软链接。对目录的软链接会经常使用到。
④删除软链接文件,对源文件和硬链接文件无任何影响。
⑤删除文件的硬链接文件,对源文件及软链接文件无任何影响。
⑥删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状)。
⑦同时删除源文件及其硬链接文件,整个文件才会被真正的删除。
⑧很多硬件设备的快照功能,使用的就是类似硬链接的原理。
⑨软链接可以跨文件系统,硬链接不可以跨文件系统。

27.生产场景如何对 linux 系统进行合理规划分区?

分区的根本原则是简单、易用、方便批量管理。根据服务器角色定位建议如下:
①单机服务器:如8G内存,300G硬盘
分区: /boot 100-200M,swap 16G,内存大小8G*2,/ 80G,/var 20G(也可不分),/data 180G(存放web及 db数据)
优点:数据盘和系统盘分开,有利于出问题时维护。
RAID方案:视数据及性能要求,一般可采用raid5折中。
②负载均衡器(如LVS等)
分区:/boot 100-200M,swap 内存的1-2倍,/ ,优点:简单方便,只做转发数据量很少。
RAID方案:数据量小,重要性高,可采用RAID1
③负载均衡下的RS server
分区: /boot 100-200M,swap 内存的1-2倍,/ 优点:简单方便,因为有多机,对数据要求低。
RAID方案:数据量大,重要性不高,有性能要求,数据要求低,可采用RAID0
④数据库服务器mysql及oracle如16/32G内存
分区:/boot 100-200M,swap 16G,内存的1倍,/ 100G,/data 剩余(存放db数据)优点:数据盘和系统盘分开,有利于出问题时维护,及保持数据完整。
RAID方案:视数据及性能要求主库可采取raid10/raid5,从库可采用raid0提高性能(读写分离的情况下。)
⑤存储服务器
分区:/boot 100-200M,swap 内存的1-2倍,/ 100G,/data(存放数据) 优点:此服务器不要分区太多。只做备份,性能要求低。容量要大。
RAID方案:可采取sata盘,raid5
⑥共享存储服务器(如NFS)
分区:/boot 100-200M,swap 内存的1-2倍,/ 100G,/data(存放数据) 优点:此服务器不要分区太多。NFS共享比存储多的要求就是性能要求。
RAID方案:视性能及访问要求可以raid5,raid10,甚至raid0(要有高可用或双写方案)
⑦监控服务器cacti,nagios
分区:/boot 100-200M,swap 内存的1-2倍,/ 优点:重要性一般,数据要求也一般。
RAID方案:单盘或双盘raid1即可。三盘就RAID5,看容量要求加盘即可。

28.描述 Linux 下文件删除的原理

Linux系统是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说每个文件两个link计数器来控制i_count和i_nlink。当一个文件被一个程序占用的时候i_count 就加1。当文件的硬链接多一个的时候i_nlink也加1。删除一个文件,就是让这个文件,没有进程占用,同时 i_link数量为0。

29.请简单描述 VI 编辑器的使用

①vi编辑器是linux系统下最最基本和最常用的标准文本编辑器。
②vi编辑器有三种工作模式:普通模式、编辑模式、命令模式。
③普通模式下的键盘输入任何字符都是当作命令来执行的,也可以输入命令进行光标的移动,字符、单词、行的复制、粘帖以及删除等操作。
④编辑模式主要用于文本的输入。在该模式下,用户输入的任何字符都被作为文件的内容保存起来。
⑤命令模式下,用户可以对文件进行一些如字符串查找、替换、显示行号等操作还是必须要进入命令模式的。 ⑥在普通模式下输入冒号即可进入命令模式,此时vi窗口的状态行会显示出冒号,等待用户输入命令。“i”插入模式,即可以进行编辑。用户输入完成后,按【Esc】之后编辑器又返回到普通模式下,在命令模式下,保存退出,可以使用的命令为wq和x。前面加!表示强制退出,强制保存等。

30.请简单说出用户管理的相关命令及用途

#组管理命令
groupadd #添加组 groupdel #删除用户组 groupmod #修改用户组
groups #显示当前用户所属的用户组 grpck #检查用户组及密码文件的完整性(etc/group以及/etc/gshadow文件)
grpconv #通过/etc/group和/etc/gshadow 的文件内容来同步或创建/etc/gshadow ,如果/etc/gshadow 不存在则创建;
grpunconv #通过/etc/group 和/etc/gshadow 文件内容来同步或创建/etc/group ,然后删除gshadow文件 。
#用户管理命令
useradd #添加用户 adduser #添加用户 passwd #为用户设置密码
usermod #修改用户命令,可以通过usermod 来修改登录名、用户的家目录等等 pwcov #同步用户从/etc/passwd 到/etc/shadow pwck #pwck是校验用户配置文件/etc/passwd 和/etc/shadow文件内容是否合法或完整 pwunconv #执行pwunconv指令可以关闭用户投影密码,它会把密码从shadow文件内,重回存到passwd文件里。
finger #查看用户信息工具(危险命令,一般不用) id #查看用户的UID、GID及所归属的用户组 chfn #更改用户信息工具 su #用户切换工具

31.请简述基础正则表达式 grep 高级参数的使用

常用参数:
-v排除匹配内容,
-e支持扩展的正则表达式,
-i忽略大小写,
-o输出匹配的内容(只是一块,不是行),
–color=auto 匹配内容显示颜色,
-n 在行首显示行号。
特殊字符注意事项:
^(尖括号)word :表示搜索以word开头的内容。
word$ 表示搜索以word结尾的内容。
^$ 表示的是空行,不是空格。
. 代表且只能代表任意一个字符。非正则表达式其他功能(当前目录,加载文件)
\ 转义字符,让有着特殊身份意义的字符,脱掉马甲,还原原型。例如.只表示原始小数点意义。

  • 表示重复0个或多个前面的一个字符。不代表所有。
    .* 表示匹配所有的字符。^.*表示以任意字符开头。
    [任意字符如abc] 匹配字符集内任意一个字符[a-z]。
    [^abc] ^在中括号里面是非的意思,不包含之意。意思就是不包含a或b或c的行。

{n,m} 表示重复n到m次前一个字符。{n}至少n次,多了不限。{n}N次,{,m}至多m次,少了不限。
注:使用grep或sed要对{}转义。即\{\}.egrep就不需要转义了。

32.请简述基础正则表达式 sed 高级参数的使用(计时 4 分钟)

-n取消默认输出
-p 打印
-d删除
-e允许多项编辑
sed取行,要特别注意sed -n ‘s###g’ filename 的使用,sed的( )的功能可以记住正则表达式的一部分,其中,\1为第一个记住的模式即第一个小括号中的匹配内容,\2第二记住的模式,即第二个小括号中的匹配内容, sed最多可以记住9个。
实际字符的选取最好要唯一,正则表达式是贪婪的,总是尽可能的匹配更远的符合匹配的内容。另外注意字符串中的空格。

33.请给出查看当前哪些用户在线的 Linux 命令

w #显示目前系统登录用户
who #显示目前已登录用户信息
last #列出目前与过去登入系统的用户相关信息 lastlog #检查某特定用户上次登录时间 whoami #打印与当前生效的用户ID关联的用户名 finger #用户信息查找程序
id #显示指定用户或当前用户的用户与组信息

34.请你描述下 crontab 的作用和语法,以及书写定时任务注意的要点。

设置crontab后我们可以使得Linux主动执行的在固定的间隔时间,执行指定的系统指令或 shell script脚本。
生产环境可以用来日志分析或生产备份等。
语法格式:
crontab [ -u user ] file ===》-u的意思就是指定用户
crontab [ -u user ] { -l 显示文件内容| -r全部删除crontab文件 | -e 编辑crontab文件| -i删除crontab 文件前确认提示}
举例:
*/5 10,12 * 3-8 * * /usr/sbin/ntpdate 10.0.0.155 >/dev/null 2>&1
前五段是时间间隔的设定,单位分别是分钟、小时、日、月、周(尽量避免使用日月和周同时出现,以免造成系统误判)。
第一个时间段 分钟 范围0-59 第二个时间段 小时 范围0-23 第三个世间段 日 范围1-31 第四个时间段 月 范围1-12 第五个时间段 周 范围0-7
*星号代表任何时间都接受命令
,逗号,表示隔开。代表分隔的时间都适用此命令。
- 减号,两个时间段之间,代表在此时间段内执行定时任务。
/n斜线和n(数字)表示每隔n段时间执行一次。
注意要点分为:书写基本要领与书写注意事项
7个基本要领:第一、为定时任务规则加必要的注释
第二、定时任务命令或程序最好写到脚本里执行
第三、定时任务执行的脚本要规范路径,如:/server/scripts 第四、执行shell脚本任务时前加/bin/sh
执行定时任务时,如果是执行脚本,尽量在脚本前面带上/bin/sh命名第五、定时任务结尾加 >/dev/null 2>&1
第六、/dev/null为特殊的字符设备文件,表示黑洞设备或空设备。
第七、有关重定向的说明
>或1> 输出重定向:把前面输出的东西输入到后边的文件中,会删除文件原有内容。
>>或1>> 追加重定向:把前面输出的东西追加到后边的文件中,不会删除文件原有内容。
<或<0 输入重定向:输入重定向用于改变命令的输入,指定输入内容,后跟文件名。
<<或<<0 输入重定向:后跟字符串,用来表示“输入结束”,也可用ctrl+d来结束输入。
2> 错误重定向:把错误信息输入到后边的文件中,会删除文件原有内容。
2>> 错误追加重定向:把错误信息追加到后边的文件中,不会删除文件原有内容。
标准输入(stdin):代码为0,使用<或<<。
标准输出(stdout):代码为1,使用>或>>。正常的输出。
标准错误输出(sederr):代码为2,使用2>或2>>。
特殊:
2>&1就是把标准错误重定向到标准输出(>&)。
/dev/null 2>&1 等价于 1>/dev/null 2>/dev/null

35.请简述修改/etc/sudoers 配置文件的注意事项

①别名的名称可以包含大写字母。数字、下划线。如果是字母必须要大写,(别名为一群拥有相同属性的集合)。
②一个别名下面可以有多个成员,成员间通过半角(,)逗号隔开。成员必须有效实际存在。
别名成员受别名类型 Host_Alias、User_Alias、Runas_Alias、Cmnd_Alias制约,定义什么类型的别名,就要有相什么类型的成员匹配。
③用户组前面必须加%号。命令别名下的成员必须是文件或目录的绝对路径。
④指定切换用户要用()括号括起来,如果省略,则默认root用户,如果括号里是ALL,则代表能切换到所有用户。
⑤命令路径要使用全路径。
⑥别名规则每行算一个规则,一行容不下时用\续行。另外超过一行,用反斜线换行。
⑦一般不建议先给all权限,后面排除。用什么权限,就给什么权限。(注意权限,语法)。
如果不需要密码直接运行命令的应该加NOPASSWD参数。
⑧禁止某类程序或命令执行,要在命令动作前面加上“!”号,并放在允许执行命令之后。

36.请描述如何实现 linux 系统集权分治的权限分级精细管理?

① 收集以及制定用户和权限的匹配信息,原则是给于最小权限,但是又能完成所承担的工作职责。
② 各个用户组设置对应权限,用什么给什么,精细到每一条指令上根据分组情况。
③ 创建规划权限分组的用户.添加相关用户组。并修改etc/sudoers配置文件。
④ 增加sudo的权限开放,确定相关用户加入如soduers权限列表,并详细设置所开放权限内容,并选择是否需要密码的相关执行权限开放。(注意ALL权限,以及密码修改权限设置)。
⑤ 不建议先给all权限,后面排除。建议使用白名单。
⑥实战调试测试相关权限是否正确配置完成。
⑦编写操作说明,及相关注意事项。
⑧调试完毕,邮件周知所有相关人员系统权限设置生效,并附带操作说明及相关注意事项。

37.请写出下面 Linux SecureCRT 命令行快捷键命令的功能?

Ctrl + a 光标到开头
Ctrl + c 中断当前程序
Ctrl + d 退出当前窗口或当前用户
Ctrl + e 光标到结尾
Ctrl + l 清屏 相当与clear
Ctrl + u 剪切、删除(光标以前的)内容 Ctrl + k 剪切、删除(光标以后的)内容
Ctrl + r 查找(最近用过的命令)
tab 所有路径以及补全命令 Ctrl+shift+c 命令行复制内容 Ctrl+shift+v 命令行粘贴内容
Ctrl + q 取消屏幕锁定 Ctrl + s 执行屏幕锁定

38.请描述服务器账户日志审计的 5 种解决方案。

⑴通过环境变量syslog对全部全部日志进行审计(信息量太大,不推荐)
⑵sudo配合syslog服务,进行sudo操作日志进行审计(信息较少,效果不错)
⑶在bash解释器嵌入一个监视器,让所有用户使用修改过的bash程序,作为解释程序。
⑷齐治的堡垒机(商业产品)。

39.如果一台办公室内主机无法上网(打不开网站),请给出你的排查步骤?

①首先确定物理链路是否联通正常。
②查看本机IP,路由,DNS的设置情况是否达标。
③telnet检查服务器的WEB有没有开启以及防火墙是否阻拦。
④ping一下网关,进行最基础的检查,通了,表示能够到达服务器。
⑤测试到网关或路由器的通常情况,先测网关,然后再测路由器一级一级的测试。
⑥测试ping公网ip的通常情况(记住几个外部IP),
⑦测试DNS的通畅。ping出对应IP。
⑧通过以上检查后,还在网管的路由器上进行检查。

40.描述 Linux shell 中单引号、双引号及不加引号的简单区别

单引号:所见即所得,即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就输出什么。
双引号:把双引号里面的内容给输出出来,如果内容中有命令、变量等,会先把,变来那个、命令解析出结果,然后输出最终内容。
双引号内的命令或者变量写法’命令或变量’或$(命令或变量) 无引号:把内容输出出来,可能不会键含有空格的字符串,视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出来,然后输出最终内容,如果字符串中带有空格等特殊字符,则不能完整输出,需要改加双引号。一般连续的字符串,数字,路径等可以用,不过最好用双引号,替代之。

41.请简述 Linux 启动过程中几个重要配置文件的执行过程

Linux 登录后,配置执行顺序为(Debian Serials Capable):
/etc/environment -> /etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc ->
/etc/bashrc -> ~/.bash_logout 关于各个文件的作用说明:
(1) /etc/environment:此配置文件设置基本的PATH变量,及系统当前语言变量,虽然比较短,但却在系统启动中占据举足轻重的作用,比如如下是我的系统中的内容:
(2) /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从
/etc/profile.d目录的配置文件中搜集shell的设置。
(3) /etc/bash.bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
(4) ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(5) ~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(6) ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子" 关系。
(7) ~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。

42.请描述下列路径的内容是做什么的?

/var/log/messages 系统日志文件
/var/log/secure 系统安全文件(显示登录信息的文件)
/var/spool/clientmqueue 例行性任务回执邮件存放文件
/proc/interrupts 当前系统中断报告文件
/etc/fstab 开机自动挂载磁盘的配置文件
/etc/profile 环境变量存放的文件

43.请给出 Linux 中 eth0 的 IP 地址和广播地址的指令,需使用 cut、awk、 grep、sed 指令。

第一种方法:使用grep和cut取值
第二种方法:使用grep和awk(默认分隔符为空格)取值
第三种方法:使用grep和awk(多分隔符)
第四种方法:使用sed和awk
第五种方法:使用grep和awk(多分隔符与加号+)
第六种方法:awk (分隔符及取行)
第七种方法:grep 网卡文件第八种方法:head取行 awk分割

44.请输出你知道的 20 个 LINUX 命令及作用

cp 复制 -a(drp),-r拷贝目录 -p保持属性 mv 移动文件或目录
mkdir 创建目录 -p递归创建目录 mkdir /a/b/c touch 创建文件,
cd 切换目录(~当前用户家目录,-上一次的目录) cat 查看文件内容 -n显示行号
ls 查看目录下文件,-l长格式,-d查看目录**********
rm 删除文件或目录 -r目录 -f强制删除(慎用,mv,find)
find 查找文件或目录 -type 类型(f,d,l,c,b),-name名字 -exec执行动作***** alias 查看及设置别名
unalias 取消别名
seq 打印序列 -s指定分割符 -w数字前面加0补齐位数 head 查看文件前N行,默认10行,-n指定行数
tail 查看文件后N行,默认10行,-n指定行数,-f实时跟踪文件结尾的变化 sed linux三剑客老二,文件增删改查,***** pwd打印当前工作目录 rmdir 删除空目录 echo 显示输出 xargs (配合find,ls)等查找到的内容处理,-n分组 tree -L层数 -d目录 rpm -q query查询 -a all
uname -r内核 -m32位还是64位 -a所有信息, -n主机名(hostname) hostname 主机名
whoami 查看当前用户 users
w
useradd 添加用户
passwd 改密码,–stdin 非交互设置密码 su 切换用户角色,-切换环境变量

shell-面试题

1 自定义 Shell 变量时,变量名有什么规则?

可以包括数字、字母、下划线,不能以数字开头
变量名区分大小写,赋值时等号两边不要有空格
尽量不要使用关键字和特殊字符
给同一个变量多次赋值时,最后一次的赋值生效

2 简述预定义变量$ 、 、 ?、 0 、 0、 0#、 ∗ 、 *、 !的作用。

参考答案
$$ 保存当前运行进程的(PID)号
$? 保存命令执行结果的(返回状态)
$0 保存当前运行的(进程名)或(脚本名)
$# 保存位置变量的(个数)
$* 保存所有位置变量的(值)
$! 保存后台(最后一个进程)的PID号

3 简述三种定界符在变量赋值操作中的特点。

双引号 " ":允许扩展,以 $ 引用其他变量
单引号 ’ ':禁用扩展,即便 $ 也视为普通字符
反撇号` `:将命令的执行输出作为变量值

4 列出常见的整数值比较操作,并说明各自作用

-eq 等于(Equal)
-ne 不等于(Not Equal)
-ge 大于或等于(Greater or Equal)
-le 小于或等于(Lesser or Equal)
-gt 大于(Greater Than)
-lt 小于(Lesser Than)

5 简述 Shell 环境常见的中断及退出控制指令。

break:跳出当前所在的循环体,执行循环体后的语句。
continue:跳过循环体内余下的语句,重新判断条件以便执行下一次循环。
exit:退出脚本,默认返回值是 0。 return:用在函数里 指定返回值。
shift:用于迁移位置变量,将 $1~$9 依次向左顺序移动。

6 正则表达式中的+、?、*分别表示什么含义?

这三个字符用来限制关键词的匹配次数,含义分别如下:
+:最少匹配一次,比如a+可匹配a、aa、aaa等
?:最多匹配一次,比如a?可匹配零个或一个a
:匹配任意多次,比如a可匹配零个或任意多个连续的a

7 简述 awk 工具常用的内置变量、各自的作用。

FS:保存或设置字段分隔符
$n:即$1、$2、$3……,表示指定分隔的第几个字段
$0:保存当前读入的整行文本内容
NF:记录当前处理行的字段个数(列数)
NR:记录当前已读入行的数量(行数)
FNR:保存当前处理行在原文本内的序号(行号)
FILENAME:保存awk 当前处理的(文件名)
ENVIRON:调用Shell环境变量,格式:ENVIRON[“变量名”]

8, 什么是 shell?如何查看当前系统支持的 Shell?

1)实现某种功能的,有执行权限的文件 2)cat /etc/shells

9,如何切换当前使用的 shell

bash

10、/bin/bash 特性有哪些

特性:提供命令补全,命令编辑和命令历史表等功能

11、特性:提供命令补全,命令编辑和命令历史表等功能

1)~/.bashrc ~/.bash_profile
可以在里面定义变量,用户每打开一个终端时加载的文件,只针对用户有效

12、 系统配置文件是哪几个?有什么用?

/etc/profile /etc/bashrc
可以在里面定义变量,用户每打开一个终端时加载的文件,针对所有用户生效

13、 shell 变量类型有哪些?列举出常用的 4 个预定义变量

1)1、自定义变量 2、系统环境变量 3、预定义变量 4、位置变量
2)$? $# $* $$

14、自定义变量的命名规则?

1、 可以用数字字每下载线,但不能用数字开头和纯数字
2、 同一个变量赋两个值,最后一个值生效
3、 给变量赋值时,两边不能有空格
4、 区分大小写

15、变量的生命周期,和作用范围?

1)在脚本里定义的变量,只在脚本执行过程中有效
2) 默认情况下只在当前Shell里可以使用,要想定义的Shell在所有的Shell里被使用,要把变量定义为全局变量

16、脚本的执行过程?脚本的执行方式?

1)从左到右 从上到下
2) sh xx.sh bash xx.sh /xx/xx/sh ./xx.sh

17、编写脚本的步骤?

1、 明确脚本要实现的功能
2、 需要使用哪些命令
3、 需要使用哪些流程控制
4、 数据是变化的,就要用变量来表示

18、Shell 条件判断类型?

1、 文件状态
2、 数值比较
3、 字符比较
4、 逻辑比较

19、eval 在 shell 中有什么作用?请举个例子说明?

#!/bin/bash 
aa=h1 bb=h2 
var=(aa bb)
for vas in ${var[@]} ; do 
echo $vas
eval var_temp=\$${vas}
echo $var_temp
done

20、dirname 有什么作用?请举个例子说明?

#!/bin/bash cd `dirname $0` pwd;ls

21、 ssh -o stricthostkeychecking=no -o ConnectTimeout=60 分别代表什么

意思?

ssh加接时不需要输入key检查,然后六十秒为超时时间

22、 说一下-n -z -d -f -e -r -w -x -l !-z 在 shell 中分别代表什么意思?-n 和-z

-n 非空为真
-z 字符串为空为真
-d 是目录且存在为真
-f 是普通文件且存在为真
-e 存在为真
-r 可读为真
-w 可写为真
-x 可执行为真
-l 是链接为真
!-z不为空
1) -n例子:

JavaApp=($(ps aux | grep "java" | grep "/app/guaji")) if [ -n "${JavaApp[0]}" ];then
echo -e "\033[1;31m 脚本退出 \033[0m"
exit 1
fi
2)	-z例子:
ssh=$(ssh -o StrictHostKeyChecking=no $2 "ls /")
if [[ -z "$ssh" ]];then
echo -e "\033[1;31m \033[5m 远程主机($2)无法连接,脚本退出. \033[0m" exit 1 fi

python-面试题

1、 一行代码实现 1–100 之和利用

sum()函数求和

print(sum(range(0,101)))
###########################
5050

2、 如何在一个函数内部修改全局变量利用 global 修改全局变量

a=5
def fn():
    global  a
    a = 4
fn()
print(a)

###########################
4

3、列出 5 个 python 标准库

os:提供了不少与操作系统相关联的函数 sys: 通常用于命令行参数
re: 正则匹配
math: 数学运算
datetime:处理日期时间

4、字典如何删除键和合并两个字典

del 和 update 方法

dic = {"name":"Labatt","age":18}
del dic["name"]
print(dic)
dic2={"name":"ls"}
dic.update(dic2)
print(dic)
#######
{'age': 18}
{'age': 18, 'name': 'ls'}

5、谈下 python 的 GIL

GIL 是 python 的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行 python 程序的时候会霸占 python 解释器(加了一把锁即 GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个 python 解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大

6、python 实现列表去重的方法

先通过集合去重,在转列表

list=[1,1,23,4,5,2,23]
a=set(list)
print([x for x in a])
#######################
[1, 2, 4, 5, 23]

7、fun(args,**kwargs)中的args,**kwargs 什么意思?

##*args和kwargs主要用于函数定义,你可以将不定数量的参数传递给一个函数,这里的不定的意思,预先并不知道,函数使用者会传递多少个参数给你所以在这个场景下使用这个两个关键字##
##*args用来发送一个非键值对的可变数量的参数列表给一个函数##
def demo(args_f,*args_v):
    print (args_f)
    print(args_v)
    for x in args_v:
        print (x)
demo('a','b','c','d','f')
# a
# ('b', 'c', 'd', 'f')
# b
# c
# d
# f
##**kwargs允许将不定长度的键值对,作为参数传递给一个函数,如果你想要在一个函数里处理带名字的参数,你应该使用**kwargs,这里有个例子帮你理解这个概念:
def demo(**args_v):
    for k,v in args_v.items():
        print (k,v)
demo(name='Labatt')
#name Labatt 

8、python2 和 python3 的 range(100)的区别

python2 返回列表,python3 返回迭代器,节约内存

9、 一句话解释什么样的语言能够用装饰器?

函数可以作为参数传递的语言,可以使用装饰器

10、python 内建数据类型有哪些整型–int 布尔型–bool

字符串–str 列表–list 元组–tuple 字典–dict

11、简述面向对象中__new__和__int__的区别

class Bike:
    def __init__(self,newWheelNum,newcolor):
        self.wheelNum=newWheelNum
        self.color=newcolor   #__init__ 方法自动被调用,可以创建对象接收参数
    def __int__(self,newMove):
        self.Move=newMove

    def move(self):
        print('车会跑')
#creat object
BM = Bike(2,'green')
print(f'车的颜色:{BM.color}')
print(f'轮子的数量:{BM.wheelNum}')


class Bike:
    def __init__(self,newWheelNum,newcolor,newMove):
        self.wheelNum=newWheelNum
        self.color=newcolor
        self.Move=newMove #__init__ 方法自动被调用,可以创建对象接收参数
    # def move(self):
    #     print('车会跑')
#creat object
BM = Bike(2,'green','car run')
print(f'车的颜色:{BM.color}',f'轮子的数量:{BM.wheelNum}',f'car status:{BM.Move}')
print()
#1、_new_至少需要有一个参数cls,代表当前类,此参数在实例化时有python解释器自动识别
#2、_new_必须要有返回值,返回实例化出来的实例,这点在自己实现_new_注意,可以return父类(通过super(当前类名,cls))_new_出来的实例,或者直接object的_new_出来的实例
#3、__init__有一个参数self,就是这个_new_返回的实例,_int_在_new_的基础上可以完成一些其他初始化的动作,__init__不需要返回值
#4、如果_new_创建的是当前类的实例,会自动调用__init__函数,通过return语句里面调用的_new_函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,
# 那么实际创建返回的就是其他的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数
# class A(object):
#     def __init__(self):
#         print("这就是init方法",self)
#
#     def __new__(cls):
#         print("这是cls的ID",id(cls))
#         print("这是new方法",object.__new__(cls))
#         return object.__new__(cls)
# A()
# print("这是类A的ID",id(A))
############################
这是cls的ID 2698555972800
这是new方法 <__main__.A object at 0x000002744E756880>
这就是init方法 <__main__.A object at 0x000002744E756880>
这是类A的ID 2698555972800

12、简述with方法打开处理文件帮我们做了什么

f=open("./1.txt","wb")
try:
    f.write("hello world")
except:
    pass
finally:
    f.close()
#############

#打开文件在进行读写的时候可能出现的异常状况,如果按照常规的f.open写法,我们需要try.except.finally做一场判断,并且文件不管遇到什么情况,
#都要通过finally f.close()关闭文件,with方法帮我们实现了finally中f.close

13、列表[1,2,3,4,5],请使用map函数输出[1,4,9,16,25],并使用列表推导式提取出大于10的数,最终输出[16,25]

map()函数第一个参数是fun,第二个参数一般是list,第三个参数可以写成l

list=[1,2,3,4,5]
def fn(x):
    return x**2
res=map(fn,list)
print(res)
res=[i for i in res if i>10]
print(res)
#################
<map object at 0x0000023F730752E0>
[16, 25]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值