聊点小小的面试

1.如何实现每天0点钟重新启动服务器?

把重启服务的一写配置写到crontab下面。

2.rm -rf * 是什么意思,其中 f 有什么作用

SSH执行“rm -rf /*”,若不了解这个命令,可能导致整个Linux系统文件全部被删除这个删除命令只有 “root” 权限的帐号才可以执行,其它未取得"root"权限的帐户只能删除属于自己用户或用户组内的文件。Linux的目录是使用 / 之类的目录形式存放,rm  是Linux的删除命令,后面带的“-rf”,"-r"指的是 递归删除(意思是删除当前目录下所有文件和文件夹),而“-f”指的是 强制删除 。后方的/*指的是 根目录“/”下的所有文件。

3.Linux压缩文件和解压文件的命令

.tar 

解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
———————————————
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName


.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
———————————————
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName


.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
———————————————
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知


.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
———————————————
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z


解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
———————————————
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
———————————————
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
———————————————
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName
———————————————
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
———————————————
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf -
———————————————
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解压:sEx x FileName.*
压缩:sEx a FileName.* FileName


sEx只是调用相关程序,本身并无压缩、解压功能,请注意!


gzip 命令 
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。


语法:gzip [选项] 压缩(解压缩)的文件名该命令的各选项含义如下:


-c 将输出写到标准输出上,并保留原有文件。-d 将压缩文件解压。-l 对每个压缩文件,显示下列字段:     压缩文件的大小;未压缩文件的大小;压缩比;未压缩文件的名字-r 递归式地查找指定目录并压缩其中的所有文件或者是解压缩。-t 测试,检查压缩文件是否完整。-v 对每一个压缩和解压的文件,显示文件名和压缩比。-num 用指定的数字 num 调整压缩的速度,-1 或 --fast 表示最快压缩方法(低压缩比),-9 或--best表示最慢压缩方法(高压缩比)。系统缺省值为 6。指令实例:


gzip *% 把当前目录下的每个文件压缩成 .gz 文件。gzip -dv *% 把当前目录下每个压缩的文件解压,并列出详细的信息。gzip -l *% 详细显示例1中每个压缩的文件的信息,并不解压。gzip usr.tar% 压缩 tar 备份文件 usr.tar,此时压缩文件的扩展名为.tar.gz。

zcat 等于 gunzip -c 将压缩文件扩展到标准输出。

解压:tar -Jxvf FileName.tar.xz
压缩:tar -Jcvf FileName.tar.xz DirName


4.Linux的目录进行遍历,编写shell脚本

  1. #!/bin/bash  
  2. function ergodic(){  
  3.     for file in ` ls $1 `  
  4.     do  
  5.         if [ -d $1"/"$file ]  
  6.         then  
  7.              ergodic $1"/"$file  
  8.         else  
  9.              wc -L $1"/"$file | cut -d' ' -f1 >> /home/test/out  
  10.         fi  
  11.     done  
  12. }  
  13. INIT_PATH="/home/test/src"
  14. ergodic $INIT_PATH 
  15.  分析一下代码的意思

         1 第一行是一个常规的格式,我们要指定这个脚本是由bash来执行

         2 第二行是一个脚本的函数

         3 第三行是一个for循环,shell里面把反引号里面的命令认为是系统命令,那么代码的意思就是循环枚举这个目录下的文件,$1是指函数的第一个参数

         4 第四行跳过,相信大家都懂

         5 第五行是一个判断语句,如果当前文件是一个目录

         6 if的结构then

         7 递归执行这个函数,传入当前目录

         8 如果文件不是目录,那么我们执行下一行

         9 wc -L $1"/"$file 这个命令是求当前这个文件的行数,没有包括空行

            | cut -d' ' -f1  这个命令是管道的应用,通过前面得到的结果我们去重新定义cut的分割符为空格,并且只显示第一列

            >> /home/test/out      把前面得到的内容重定向到家目录下的out文件

         10 结束for循环

         11 括号,呵呵呵

         12 初始化要遍历的目录的路径

         13 函数调用并传入这个路径


5.

1.        apache默认使用进程管理还是线程管理?如何判断并设置最大连接数?

起因:线上的一台服务器,最近总是出现 访问 很慢的情况发生,点击一个链接要2秒钟以上才能打开,按照我们对于访问人数的估计,服务器应该不至于响应这么慢,从而需要针对这个问题进行分析,来解决网站访问过慢。

分析:

1、首先,在页面访问变慢情况发生时,使用 top 命令查看了服务器的负载情况,发现负载并不高,初步估计不是程序的问题。 
2、然后,查看了线程中的 httpd 的数量, ps -aux | grep httpd | wc -l 发现,线程数已经达到了 apache 设置的最大值。由此断定是网站访问人数过多造成了访问过慢。

 


3、为了验证,查看了连接数和当前的连接数,分别是 
    netstat -ant | grep $ip:80 | wc -l 
    netstat -ant | grep $ip:80 | grep EST | wc -l 
    发现果然,连接数特别多,远远超过我们的估计值。 
4、刚开始的时候,对于服务器的 MPM 配置方式不是特别的熟悉,认为修改服务器配置可以解决问题。主要的配置部分包括 prefork 模式 或者 work 模式的配置,下面是一些简单的介绍。

 

    prefork 模式: 
    以 prefork 模式工作的 apache 的默认配置: 
    <IfModule mpm_prefork_module> 
        ServerLimit             2000    
        StartServers               5    #指定服务器启动时建立的子进程数量 
        MinSpareServers            5    #指定空闲子进程的最小数量 
        MaxSpareServers           10    #指定空闲子进程的最大数量 
        MaxClients               150    #指定同一时间客户端最大接入请求的数量(单个进程并发线程数),任何超过该限制的请求都将进入等候队列,一旦一个连接被释放,队列中的请求将得到服务 
        MaxRequestsPerChild        0    #指定每个子进程在其生存周期内允许伺服的最大请求数量,默认为10000,0表示子进程永远不结束 
    </IfModule>


    prefork 控制进程在最初建立“StartServers”个子进程后,为了满足 MinSpareServers 设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。 
    MaxSpareServers 设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比 MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。 
    MaxClients是这些指令中最为重要的一个,设定的是 Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep httpd|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256。在 apache2 中通过ServerLimit指令无须重编译Apache就可以加大MaxClients。 
    虽然通过设置ServerLimit,我们可以把MaxClients加得很大,但是往往会适得其反,系统耗光所有内存。以一台服务器为例:内存2G,每个apache进程消耗大约0.5%(可通过ps aux来确认)的内存,也就是10M,这样,理论上这台服务器最多跑200个apache进程就会耗光系统所有内存,所以,设置MaxClients要慎重。

 

prefork的工作原理:

控制进程在最初建立StartServers个子进程后, 为了满足MinSpareServers设置的需要,创建一个进程,等待一秒钟,继续创建第二个,等待一秒钟,继而创建四个,如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止,这也就是预派生(prefork)的由来。这种模式可以使得不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。

axSpareServers 设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill某些多余进程。这个值一般不要设的过大,但如果设的比MinSpareServers小,Apache会自动把它调整为MinSpareServers+1。如果站点负载较大的话,可考虑同时加大MinSpareServers和MaxSpareServers。

MaxRequestsPerChild设置的是每个子进程可以处理的请求数。每个子进程在处理了MaxRequestsPerChild个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:

1、可防止意外的内存卸漏;

2、在服务器负载下降的时侯会自动减少子进程数。

因此,可根据服务器的负载来调整这个值,如果非零的话,笔者认为10000左右是比较合适的。事实上这个值对Apache的性能影响不是很大。

MaxClients 是这些指令中最为重要的一个,它设定的就是Apache可以同时处理的请求,这是对Apache性能影响最大的参数.在我个人看来,缺省的150是远远不够的,如果请求总数已达到这个值(可通过ps –ef|grep httpd|wc –l来确认),那么下面的请求就要排队,直到某个已处理请求完毕。这就是为什么系统资源还剩下很多,而http访问却很慢的主要原因。系统管理员可以根据硬件配置和负载情况来动态调整这个值,虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制是不能大于256。如果把这个值设为大于256那么Apache将无法起动。事实上,256对于负载稍重的站点也是很不够的。在Apache1.3中这是个硬限制,如果要加大这个值,必须在configure前手工修改源代码树下的src/include/httpd.h,查找256,会发现#define HARD_SERVER_LIMIT 256这行,把256改为你要增大的值如4000,然后重新编译Apache即可。我想这个方法稍有些经验的Apache系统管理员都知道,不过我相信在Apache2.0中知道如何加大这个值的人就不会太多了。

在Apache2.0中新加入了ServerLimit指令,使得无须重编译Apache就可以加大MaxClients。下面是笔者的prefork配置段。

6.细说一下linux下chmod的命令参数

chmod命令用于改变linux系统文件或目录的访问权限。用它控制文件或目录的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。
  文件或目录的访问权限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。可执行权限表示允许将该文件作为一个程序执行。文件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任何组合。
  有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中每一位用户都能访问该用户拥有的文件或目录。
  每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。 例如:

命令: 

ls -al

输出:

[root@localhost test]# ll -al

总计 316lrwxrwxrwx 1 root root     11 11-22 06:58 linklog.log -> log2012.log

-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log

-rw-r--r-- 1 root root     61 11-13 06:03 log2013.log

-rw-r--r-- 1 root root      0 11-13 06:03 log2014.log

-rw-r--r-- 1 root root      0 11-13 06:06 log2015.log

-rw-r--r-- 1 root root      0 11-16 14:41 log2016.log

-rw-r--r-- 1 root root      0 11-16 14:43 log2017.log

我们以log2012.log为例:

-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log

第一列共有10个位置第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是d,表示是一个目录。从第二个字符开始到第十个共9个字符,3个字符一组,分别表示了3组用户对文件或者目录的权限。权限字符用横线代表空许可r代表只读,w代表写,x代表可执行。

例如
  - rw- r-- r--
  表示log2012.log是一个普通文件;log2012.log的属主有读写权限;与log2012.log属主同组的用户只有读权限;其他用户也只有读权限。

  确定了一个文件的访问权限后,用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限。也可以利用chown命令来更改某个文件或目录的所有者。利用chgrp命令来更改某个文件或目录的用户组。 

chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限chmod命令详细情况如下。

1. 命令格式:

chmod [-cfvR] [--help] [--version] mode file   

2. 命令功能:

用于改变文件或目录的访问权限用它控制文件或目录的访问权限

3. 命令参数:

必要参数
-c 当发生改变时,报告处理信息
-f 错误信息不输出
-R 处理指定目录以及其子目录下的所有文件
-v 运行时显示详细处理信息

选择参数
--reference=<目录或者文件> 设置成具有指定目录或者文件具有相同的权限
--version 显示版本信息
<权限范围>+<权限设置> 使权限范围内的目录或者文件具有指定的权限
<权限范围>-<权限设置> 删除权限范围的目录或者文件的指定权限
<权限范围>=<权限设置> 设置权限范围内的目录或者文件的权限为指定的值

权限范围
u :目录或者文件的当前的用户
g :目录或者文件的当前的群组
o :除了目录或者文件的当前用户或群组之外的用户或者群组
a :所有的用户及群组

权限代号
r :读权限,用数字4表示
w :写权限,用数字2表示
x :执行权限,用数字1表示
- :删除权限,用数字0表示
s :特殊权限 

该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。
  1. 文字设定法:
   chmod [who] [+ | - | =] [mode] 文件名
  2. 数字设定法
  我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
  例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。
  数字设定法的一般形式为:
   chmod [mode] 文件名

数字与字符对应关系如下:

r=4,w=2,x=1
若要rwx属性则4+2+1=7
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。 

4. 使用实例:
实例1:增加文件所有用户组可执行权限

命令:

chmod a+x log2012.log

输出:

[root@localhost test]# ls -al log2012.log 

-rw-r--r-- 1 root root 302108 11-13 06:03 log2012.log

[root@localhost test]# chmod a+x log2012.log 

[root@localhost test]# ls -al log2012.log 

-rwxr-xr-x 1 root root 302108 11-13 06:03 log2012.log

[root@localhost test]#

说明:
  即设定文件log2012.log的属性为:文件属主(u) 增加执行权限与文件属主同组用户(g) 增加执行权限其他用户(o) 增加执行权限
 

例2:同时修改不同用户权限

命令:

chmod ug+w,o-x log2012.log

输出:

[root@localhost test]# ls -al log2012.log 

-rwxr-xr-x 1 root root 302108 11-13 06:03 log2012.log

[root@localhost test]# chmod ug+w,o-x log2012.log 

[root@localhost test]# ls -al log2012.log 

-rwxrwxr-- 1 root root 302108 11-13 06:03 log2012.log


说明:
  即设定文件text的属性为:文件属主(u) 增加写权限;与文件属主同组用户(g) 增加写权限;其他用户(o) 删除执行权限

实例3:删除文件权限

命令:

chmod a-x log2012.log

输出:

[root@localhost test]# ls -al log2012.log 

-rwxrwxr-- 1 root root 302108 11-13 06:03 log2012.log

[root@localhost test]# chmod a-x log2012.log 

[root@localhost test]# ls -al log2012.log 

-rw-rw-r-- 1 root root 302108 11-13 06:03 log2012.log

说明:
  删除所有用户的可执行权限 
 

实例4:使用“=”设置权限 

命令:

chmod u=x log2012.log

输出:

[root@localhost test]# ls -al log2012.log 

-rw-rw-r-- 1 root root 302108 11-13 06:03 log2012.log

[root@localhost test]# chmod u=x log2012.log 

[root@localhost test]# ls -al log2012.log 

---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log

说明:

撤销原来所有的权限,然后使拥有者具有可读权限 

实例5:对一个目录及其子目录所有文件添加权限 

命令:

chmod -R u+x test4

输出:

[root@localhost test]# cd test4

[root@localhost test4]# ls -al

总计 312drwxrwxr-x 2 root root   4096 11-13 05:50 .

drwxr-xr-x 5 root root   4096 11-22 06:58 ..

-rw-r--r-- 1 root root 302108 11-12 22:54 log2012.log

-rw-r--r-- 1 root root     61 11-12 22:54 log2013.log

-rw-r--r-- 1 root root      0 11-12 22:54 log2014.log

[root@localhost test4]# cd ..

[root@localhost test]# chmod -R u+x test4

[root@localhost test]# cd test4

[root@localhost test4]# ls -al

总计 312drwxrwxr-x 2 root root   4096 11-13 05:50 .

drwxr-xr-x 5 root root   4096 11-22 06:58 ..

-rwxr--r-- 1 root root 302108 11-12 22:54 log2012.log

-rwxr--r-- 1 root root     61 11-12 22:54 log2013.log

-rwxr--r-- 1 root root      0 11-12 22:54 log2014.log

说明:

递归地给test4目录下所有文件和子目录的属主分配权限 

其他一些实例:

1

命令:

chmod 751 file   

说明:

给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限

2

命令:

chmod u=rwx,g=rx,o=x file 

说明:

上例的另一种形式

3

命令

chmod =r file 

说明:                    

为所有用户分配读权限

3

命令:

chmod 444 file 

说明: 

    同上例

4

命令:

chmod a-wx,a+r   file

说明:

同上例


7.

当前目录下有一个文件为 showme.sh,如何修改其所有人为root?

 [root@linux ~]#chown [-R] 账户名称:文件或目录
[root@linux ~]#chown [-R] 账户名称:用户组名称、文件或目录

chown  root:root  install.log

我们知道如何改变文件的用户组与拥有者了,那么什么时候要使用chown或chgrp呢?或许你你会觉得奇怪,但是,确实有时候需要更改文件的拥有者。最常见的例子就是将文件复制给其他人,我们使用最简单的cp来进行说明:

 [root@linux ~]#cp 源文件  目的文件
假设今天要讲.bashrc文件复制成为.bashrc_test,并给bin这个人,您可以这样做:
 [root@linux ~]# cp .bashrc  .bashrc_test
[root@linux ~]#ls –al .bashrc*
-rw-r--r--  1  root  root  24343 Jun 23 08:33  .bashrc
-rw-r--r--  1  root  root  24343 Jun 23 08:33  .bashrc_test
怎么办?.bashrc_test还是属于root所有,即使将文件拿给bin用户了,他仍然无法修改,所以必须修改这个文件的拥有者与用户组。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值