• 跟阿铭学Linux习题答案


    第一章:走进Linux

    1、简述它的发展历史,列举几种代表性的发行版

    Linux之前是Unix,由于Unix收费昂贵,so,Richard Stallman 发起了开发自由软件的运动,并成立了自由软件基金会(Free Software Foundation,FSF)和GNU 项目和协议GPL(是GNU General Public License)。之后一个大学的教授(名字为AndrewTanenbaum,谭邦宁)的Minix。经过对minix改造,芬兰赫尔辛基大学的一位计算机系名为Linus Torvalds 的学生开发了Linux ;

    2、请简述GNU和GPL两个概念,列举几种GPL协议发型的软件;
    FSF(Free Software Foundation)是自由软件基金会,GNU 是FSF主要的项目。
    GNU 的全称为GNU’s not unix, 意思是“ GNU 不是UNIX”。
    GNU计划,它的目标是创建一套完全自由的操作系统;
    它要求软件以源代码的形式发布,并规定任何用户能够以源代码的形式将软件复制或发布给别的用户。
    GPL:GNU通用公共许可证(GNU General Public License)
    简单地理解,GPL 许可的核心是保证任何人有共享和修改自由软件的自由,任何人有权取得、修改和重新发布自由软件 的源代码权利,但都必须同时给出具体更改的源代码。
    列举软件:vi、gcc等

    3、列举流行的Linux版本,说明特点
    Debian(1993) → ubuntu(2004)
    Slackware(1993)→suse(1994)
    redhat(1994)→rhel(redhat企业版[2002]) 注:2002后之前的redhat变为Fedora,指rhel的实验版
    sentos(2003)→由redhat改过来的,免费,可以使用yum

    第二章:初次安装使用

    1、32和64位操作系统区别?如何查看?

    那就是64 位操作系统的CPU 运算速度更快,支持更大的内存使用,可以发挥更大更好的硬件性能,提升业务工作效率。
    查看命令:uname -m (uname -a可以查看内核版本)也可用uname -r一起查看

    2、swap的作用?如何划分;
    要有一个swap(交换)分区,它的作用相当于Windows 里的虚拟内存,swap 分区的大小一般为物理内存容量的1.5 倍(内存<8GB)。但当系统物理内存大于8GB ,
    则swap 分区配置8 ~ 16GB 即可,太大无用,浪费磁盘空间。swap 分区不是必需的,但是大多数情况应该设置,个别企业的数据库应用场景不分swap。

    3、查资料了解BootLoader、grub的概念和作用

    Bootloader是嵌入式系统在加电后执行的第一段代码,对CPU和硬件的初始化,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。

    grub是一个多重操作系统启动管理器。用来引导不同系统,如windows,linux。


    4、如何在安装系统时给grub设置密码

    安装界面勾选设置密码,然后设置


    5、在安装Linux时你是如何分区的?

    无特殊要求的话
    200m的/boot、swap为真实内存的1.5倍(真实内存超过4g都分8g 的swap也可)、/分区分20G,其他都给/data

    第三章 远程登录

    1、Linux连接必须要用到sshd服务,默认监控什么端口,如何自定义sshd端口;
    默认为22,sshd是系统自启动服务
    修改/etc/ssh这个目录下面 sshd_config 这个文件中 port字段

    2、常用的远程工具有?
    xshell、secureCRT、Putty等

    3、网卡配置文件在哪?默认配置需要修改什么?
    /etc/sysconfig/network-scripts/ifcfg-***
    DEVICE=eth0
    HWADDR=00:0C:29:5D:A8:83
    TYPE=Ethernet
    UUID=48a3ab45-edc3-434f-b04b-13af94863772
    ONBOOT=yes (需要修改为yes,代表随系统启动)
    NM_CONTROLLED=yes
    #BOOTPROTO=dhcp
    BOOTPROTO=static
    IPADDR=10.0.0.254
    NETMASK=255.255.255.0
    GATEWAY=10.0.0.254


    4、网卡重启命令
    service network restart
    systemctl restart network.service

    5、如何临时关闭selinux?如何永久关闭?
    setenforce 0
    vi /etc/selinux/config 修改为SELINUX=disabled

    6、查看Linux有几块网卡用什么命令?查看网卡ip用什么命令?
    #lspci |grep -i eth
    查看ip:ifconfig、ip addr
    7、我们为什么要使用密匙登录Linux呢?
    为了安全,将密码加密,用密码加密的私匙解密公匙登录。

    第四章 文件和目录管理


    课后习题:
    1、命令rmdir -p用来删除一串目录,比如rmdir -p /tmp/test/1/2/3 。如果2下除了3还有4,4下还有5,是否可以成功删除?用rmdir -p删除不存在的目录时会不会报错?是否能成功删除:不能,因为3不是空的

    # rmdir -p /tmp/test/1/2/3

    rmdir: failed to remove directory `/tmp/test/1/2': Directory not empty

    删除不存在目录会报错。
    # rmdir -p lalala
    rmdir: failed to remove `lalala': No such file or directory

    2、删除一个目录或文件时,在删除之前会询问y/n,如果直接回车会删除吗?输入其他字符的效果是?
    都相当于输入了n的效果。

    3、如何创建一串目录?
    用mkdir -p

    4、使用mv命令,如果目标文件不是目录,但该文件存在会怎样?
    # mv 1 3
    mv: overwrite `3'?
    会提示是否覆盖

    5、使用less命令查看文件/etc/passwd下共出现了几个root?按哪个键可以上下逐行移动?
    /root可以定位到第一个root,按n跳到下一个,
    按j、k上下移动

    6、为什么目录必须要有x权限才能查看目录下的文件呢?
    按要求操作时确实有问题,提示权限错误,因为打开目录就是在执行目录。

    7、Linux系统中默认的目录权限?文档权限?分别用3个数字表示。如果umask=001,那么用户默认创建的目录和文件的权限是?
    首先要说默认的umask为0022,所以默认的目录为755,普通文件644。目录是由777-022得到的,文件是666-022(这个不能数字减,因为有些umask为033,直接用数字减会导致错误,正确的方法见下面的例子)
    umask001,这时目录权限776;文件权限,666

    # umask 001
    
    # mkdir test001
    # touch test001file

    #ll drwxrwxrw
    - 2 root root 6 May 26 12:55 test001 -rw-rw-rw- 1 root root 0 May 26 12:55 test001file

    8、用find找出/var目录下最近一天内变化的文件,再用find找出/root目录下一个小时内变更的文件;
    介绍三个参数:-atime +n/-n 表示访问或执行时间
    -ctime +n/-n 表示写入更改inode
    -mtime +n/-n 表示内容修改
    find /var -type f -ctime -1
    find /root -type f -mmin -60(貌似不能用小时,这里用-mmin分钟)

    9、用find找出/etc目录下一年没有变更过的文件
    find /etc/ -type f ! -mtime -365 (百度的)
    find /etc/ -type f -mtime +365(我写的)

    10、为什么硬链接不能链接目录?硬链接的文件是否占用空间大小?硬链接可否跨分区?
    规定: 因为每个目录下面都会有一个.和..也就是说每个目录下面的子目录肯定会有它本身和它上一级目录,那么一旦设置了硬链接则会造成一种混乱,设置会导致死循环。
    硬链接的文件并不会占用空间大小,它只是复制了该文件的一份inode信息;
    硬链接文件是不可以跨分区创建的。(因为每个分区都有不同的iNode表)

    11、Linux系统里,分别用什么符号表示纯文本、二进制、目录、链接文件、块设备以及字符设备?
    -:普通文件
    d:目录
    l:链接
    b:块设备
    c:设备文件
    s:套接字文件

    12、如何把dira目录以及该目录下的所有文件和目录所有者修改为 user1、所属组为users?
    chown -R user1:user dira

    13、修改dirb目录的权限,使其所有者可读、写、执行,所属组可读且可执行,其他用户不可读、写和执行用什么命令?
    chmod 750 dirb

    14、如何使文件只能写不能删除?如何使文件不能删除、重命名、设定链接、写入和新增数据?
    chattr +a file 文件只能写不能删除
    chattr +i file 文件不能被删除、重命名、设定链接接、写入、新增数据

    15、Linux下的一个点"."和两个点"..",分别表示?
    当前目录和上级目录

    16、cd - 表示?
    切换到上次所在目录

    17、ls -l命令输出第二列的意思是?如果一个目录的第二列为3,那么这个3是如何得到的?
    第二列数值该文件占用的inode
    如果一个目录的这列为3,我们可以通过使用 ls -al dir/ |grep ^d| wc -l 这条命令得到 

    18、如果系统中没有locate命令,我们需要安装哪个软件包?初次使用locate会报错can not open '/var/lib/mlocate.db':No such file or directory我们需要怎么做?

    没有locate命令,需要安装mlocate包,yum install -y mlocate, 初次使用报错,是因为对应的数据库文件还没有生成,手动生成的命令是:updatedb

    19、复制一个文件如果目标文件存在会提示是否覆盖,如何做就不询问了?
    使用cp的绝对路径 /bin/cp a.txt b.txt 因为cp可能有alias -i

    20、加入一个文件一直在增加,如何动态的显示这个文件的内容?
    tail -f 文件名

    21、如何查看当前用户的目录?
    echo $HOME

    22、假如一个目录任何人可写,怎么做到只有所有者才可更改?
    chmod o+wt dir

    23、简述软硬链接区别?
    软连接可以理解为,源文件的快捷方式,软连接文件记录的是源文件的路径,占用空间非常小。当把源文件删除后,那么软连接文件也就变成一个坏文件了,不能使用了。
    硬链接和源文件的inode信息是一模一样的,可以说硬链接文件只是复制了一份源文件的inode信息,在我们看来硬链接文件和源文件没有什么区别,删除任何一个文件对方都不受影响,唯一的是少了一份inode,硬链接只能在同一个分区下创建,而软连接不受限制。硬链接文件和源文件虽然看起来像是两个文件,但是只占用一个文件的磁盘空间。

    24、cat a.txt会更改a.txt的什么时间?chmod 644 a.txt会更改它的什么时间?vim呢?直接touch呢?
    cat 会更改atime(访问时间)
    chmod 会更改ctime
    vim 更改 atime 和 mtime 、ctime
    touch 更改 atime 和 mtime 、ctime

    第五章 系统用户和用户组管理

    课后习题:
    1、查看/etc/shadow第一行root账号的第三个字段(:分隔)中的数字,计算这个数字是怎么得到的
    答:shadow文件的第三个字段表示最近修改密码的日期,为距离1970年1月1日的天数,注意1970年1月1日为1,然后经过几天就加几。关于/etc/shadow文件每个字段的含义请参考http://www.cnblogs.com/zhousir1991/archive/2011/07/25/2116520.html

    2、写出一个您认为很强悍的密码.
    答:LcY$&5jH%@*bGsN

    3、查资料搞明白 /sbin/nologin 和 /bin/false 的区别,您知道他们用在什么场合吗?

    答:这两个Shell都有禁止用户登录的功能,如果用户启动时的Shell被设置成之一都无法登录系统。但是/bin/false相对更加严格,禁止一切服务,将用户的shell设置为/bin/false,用户会无法登录,并且不会有任何提示。而/usr/sbin/nologin相对礼貌一些,将用户的shell设置为/usr/sbin/nologin会礼貌的向用户显示一条信息,并拒绝用户登录:This account is currently not available。/usr/sbin/nologin可以用于FTP服务上,不让用户登录但是仍可以提供FTP服务

    4、请想一想,当我们创建一个新的账号时,系统会修改哪几个文件呢?

    答:用户密码文件:/etc/passwd
    加密密码文件:/etc/shadow
    用户组文件:/etc/group
    用户组密码文件:/etc/gshadow
    创建homeuser家目录

    5、假如我们已经创建了一个普通用户user1, 默认这个用户的家目录为/home/user1, 做实验证明能否直接修改/etc/passwd配置文件中user1的家目录那个字段而改变user1的家目录呢? (提示: 您可以使用 “cd ~ ”命令来进入当前用户家目录的方法来验证)

    答:[root@CentOS6 ~]# useradd user1
    [root@CentOS6 ~]# su - user1
    [user1@CentOS6 ~]$ cd ~
    [user1@CentOS6 ~]$ pwd
    /home/user1
    [user1@CentOS6 ~]$ logout
    [root@CentOS6 ~]# mkdir /tmp/rachy
    [root@CentOS6 ~]# vi /etc/passwd
    修改passwd文件中user1的配置行中/home/user1为/tmp/rachy,保存退出
    [root@CentOS6 ~]# su - user1
    -bash-4.1$ cd ~
    -bash-4.1$ pwd
    /tmp/rachy
    -bash-4.1$ logout
    [root@CentOS6 ~]#
    可见,修改passwd配置文件可以直接修改用户的家目录。

    6、/etc/passwd 文件以":"为分隔符,第三和第四个字段表示什么含义?如果把某一行的第三个字段改为‘0‘ 会发生什么?

    答:第三个和第四个字段分别表示用户id和组id,如果把某一行的第三个字段改为0,则该用户变成root用户。关于/etc/passwd文件每个字段的含义请参考

    http://os.51cto.com/art/201003/187533.htm。

    7、先新增一个组group11,然后再新增一个账号user12, 使该账号所属组为刚刚新增的组。

    答:[root@CentOS6 ~]# groupadd group11
    [root@CentOS6 ~]# tail -2 /etc/group
    user1:x:500:
    group11:x:501:
    [root@CentOS6 ~]# useradd -g group11 user12
    [root@CentOS6 ~]# id user12
    uid=501(user12) gid=501(group11) 组=501(group11)

    8、如果删除一个组时报错: “cannot remove the primary group of user ‘aming‘” 这是什么意思?如何解决该问题呢?

    答:删除用户组报错说明该用户组非空,可以先根据需要将里面的用户删除或者移到别的组,然后删除空了的组。

    9、如何删除某个账户时,连带这个账户的家目录一并删除?

    答:userdel -r username 使用-r选项连带家目录一并删除。

    10. 如果您的Linux没有命令"mkpasswd", 需要安装哪个包?

    答:需要安装expect包,使用命令 yum install -y expect 进行安装。

    11. 普通账户可以修改自己的密码吗?

    答:可以,需要输入自己的旧密码进行身份验证,验证通过即可修改。

    12. 使用su时,后面加了 ‘-‘ 表示什么含义?

    答:su user1 只切换到用户user1,不切换环境变量,仍然是root用户的环境变量;su - user1 切换到用户user1,并切换到用户user1的环境变量。

    13. sudo的作用是什么呢?

    答:使普通用户临时拥有root用户的权限,通常用来执行某些命令,不需要知道root密码,只需要知道自己的密码即可,提高安全性。

    14. 创建系统账号时,帐户名要符合什么样的规范?

    答:可以是大小写字母、数字、减号(不能出现在首位)、点以及下划线,其他字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位为点时,另外减号也不建议使用,因为容易造成混淆。

    15. Linux系统里,你知道最大uid能有多大吗?默认创建一个普通帐号的uid最小是多少?

    答:普通用户的uid最大为65535,目前的 linux 核心 (2.6.x 版)已经可以最大支持到 4294967295 (2^32-1) 。默认普通账号的最小uid为500。

    16. 请思考,一个用户可以同时属于多个用户组吗?如果可以,如何把一个用户加入到另外的组里? 同时加入多个组怎么做?

    答:一个用户可以同时属于多个组;使用-g选项可以指定要加入的组;同时加入多个组可以使用命令usermod -g grp1,grp2,grp3 username。

    第六章 磁盘管理

    课后习题:
    1. vi 与 vim 有什么区别呢,它们之间有什么关系?

    Vim是从Vi发展出来的一个文本编辑器,可以看作是vi的升级版。Vim的主要功能与原始的Vi完全兼容,与Vi不同的是,vi不会显示颜色,而vim会根据文件内容显示不同颜色,方便阅读和编辑。而且Vim具有代码补完、编译及错误跳转等方便编程的丰富功能,在程序员中被广泛使用。( Vim和Emacs并列成为类Unix系统用户最喜欢的编辑器。)

    2. 如何查看当前系统vim的版本?

    vim --version

    3. 如果想把文档中出现的全部"abc"替换成"def"怎么做?又如何只替换每行中出现的第一个"abc"呢?

    :1,$s/abc/def/g or :%s/abc/def/g

    :1,$s/abc/def

    4. 当搜索某个关键词时,光标所定位的关键词所在的行是如何决定的?如果想从当前关键词移动到下一个关键词怎么操作?移动到上一个关键词又怎么操作?

    需要看vim进入文档时,光标所在位置,定位关键词是依据于光标所在的位置。

    如果使用/搜索关键词,则按‘n‘向下移动,按shift + n 向上,如果使用?搜索关键词,和前者正好相反。

    5. 当编辑完文档后,按ESC进入命令模式,输入命令 :x 会怎么样?

    输入命令:x后也能保存文件并退出,有点类似:wq ,但两者有区别。

    :x #写入文件并退出。仅当文件被修改时才写入,并更新文件修改时间,否则不会更新文件修改时间。

    :wq #强制性写入文件并退出。即使文件没有被修改也强制写入


    6. 在一般模式下如何快速的把光标快速的向右或向左移动10个字符?

    向右:10空格

    向左:10l

    7. vim + filename 表示什么含义, vim +10 filename 将会发生什么?

    vim + 进入文档后,定位到最后一行

    vim +10 进入文档后,光标定位到第10行

    8. 用vim打开一个文档后,我想让光标跳到第20行,怎么做?跳到最后一行怎么做?

    跳到20行,输入20G

    最后一行,输入G


    9. vim 打开文档后,默认是不显示行号的,如何做让它显示行号?

    :set nu

    10. vim打开文档后,我想把20-50行中的第一个‘abc‘ 替换为 ‘efg‘ 怎么操作?如果是想替换所有呢?

    :20,50s/abc/efg 只替换第一个

    :20,50s/abc/efg/g 替换全部

    11. vim打开文档后,如何快速删除前100行?

    先按‘gg‘ 到第一行,然后输入100d

    12. vim打开文档后,如何复制一行,并粘贴到第20行的下面?

    定位到要复制的行,然后输入yy,然后输入20G,再输入p

    第七章 压缩与解压

    课后习题:
    1. gzip, bzip2 能否直接压缩目录呢?
    不能直接压缩目录

    2. 请快速写出,使用gzip和bzip2压缩和解压一个文件的命令。
    gzip 1.txt
    gzip -d 1.txt.gz
    bzip2 1.txt
    bzip2 -d 1.txt.bz2

    3. tar 在打包的时候,如果想排除多个文件或者目录如何操作?
    tar cvf 123.tar --exclude a.txt --exclude b.txt 123/

    4. 请实验,如果不加 "-" 是否正确, 如 tar zcvf 1.tar.gz 1.txt 2.txt ?
    不加 - 一样没有问题

    5. 如何使用tar打包和解包 .tar.gz, .tar.bz2 的压缩包?
    tar zcvf 1.tar.gz 1
    tar zxvf 1.tar.gz
    tar jcvf 1.tar.bz2 1
    tar jxvf 1.tar.bz2

    6. 找一个大点的文件,使用tar 分别把这个文件打成 .tar.gz和.tar.bz2 压缩包,比较一下哪个包会更小,从而得出结论,是gzip压缩效果好还是bzip2压缩效果好?
    理论上.tar.bz2的压缩包小一些,但个别时候,有相反的情况。但大多时候bzip2压缩效果好。

    7. 使用tar打包并压缩的时候,默认压缩级别为几? 想一想如何能够改变压缩级别呢?(提示,tar本身没有这个功能哦,可以尝试拆分打包和压缩)
    tar打包压缩时,是按照gzip和bzip2的默认压缩级别来的,gzip工具默认压缩级别为6,bzip2默认压缩级别为9.
    改变默认压缩级别可以这样来做,首先tar打包,然后再使用gzip或者bzip2压缩工具来压缩,压缩的时候指定压缩级别。如: tar cvf 1.tar 123/; gzip -2 1.tar

    第八章 文档的压缩与打包

    课后习题:

    1.gzip命令和bzip2命令能否直接压缩目录呢?

    答:不可压缩目录,会报错

    2. 请快速写出gzip和bzip2压缩和解压一个文件的命令

    答:gzip 1.txt ;gzip -d 1.txt.gz
    bzip2 1.txt ;bzip2 -d 1.txt.bz2

    3. tar在打包时想排除多个文件或目录怎么操作?

    答:tar cvf xxx.tar --exclude filename

    4. 请实验如果不加-是否正确,如tar zcvf 1.tar.gz 1.txt

    答:依然正常压缩,故有无-都没关系

    5. 如何使用tar打包和解包格式为.tar.gz和.tar.bz2格式的压缩包?

    答:-z用gzip压缩;-j用bz2压缩;-x表示解压;-c表压缩
    tar zcvf 1.tar.gz 1

    tar zxvf 1.tar.gz

    tar jcvf 1.tar.bz2 1

    tar jxvf 1.tar.bz2


    6. 找个大点文件,用.tar.gz和.tar.bz2格式的压缩比较一下哪个包更小,并且判断是gzip压缩效果好还是bzip2压缩效果好

    答:理论上.tar.bz2的压缩包小一些,但个别时候,有相反的情况。但大多时候bzip2压缩效果好。

    7.使用tar打包并压缩时,默认压缩级别是几?如何指定级别?。

    答:tar打包压缩时,是按照gzip和bzip2的默认压缩级别来的,gzip工具默认压缩级别为6,bzip2
    默认压缩级别为9.
    改变默认压缩级别可以这样来做,首先tar打包,然后再使用gzip或者bzip2压缩工具来压缩,压缩的时候指定压缩级别。如: tar cvf 1.tar 123/; gzip -2 1.tar

    第九章 安装rpm包或源码包

    课后习题:

    1.区分rpm与-qi、-qf、-ql和-qa这四个不同组合的作用。
    答:rpm -qi 包名 查看一个包的详细信息

    rpm -qf 文件名 查看一个文件是由哪个包安装的

    rpm -ql 包名 查看一个包安装了哪些文件

    rpm -qa 查看系统中安装了哪些包


    2. rpm -qi 后面如果跟一个未安装的包名,会显示什么信息?

    答:包名 is not installed

    3. 请找出 vim 这个命令是由哪个rpm包安装来的?

    答:rpm -qf `which vim`

    4. 使用rpm安装和卸载某个包的命令是什么?

    答:安装:rpm -i 包名 或 rpm --install 包名

    卸载:rpm -e 包名 或 rpm --erase 包名

    5. rpm安装某个包有依赖关系时,如何忽略依赖关系,强制安装该包?

    答:rpm -i --nodeps 包名

    6. 如何使用rpm升级一个包?

    答:rpm -Uvh 包名

    7. 使用yum搜索包含关键词 "tidy" 的rpm包,并安装,安装后再使用yum将其卸载。

    答:yum list |grep tidy

    yum install -y tidy

    yum remove tidy

    8. 如何使用yum来下载一个rpm包?

    答:yum install -y yum-plugin-downloadonly #安装下载插件

    yum install 包名 --downloadonly --downloaddir=/tmp/ #仅下载一个没安装的包vte到目录/tmp/下

    yum reinstall 包名 --downloadonly --downloaddir=/tmp/ #下载一个安装过的包

    9. 请到php的官方网站下载一个php的源码包,动手试试编译安装它?(php官网地址 http://www.php.net/)

    答:下载源码包php-7.1.0.tar.gz

    tar -zxvf php-7.1.0.tar.gz

    cd php-7.1.0

    ./configure --prefix=/usr/local/php7

    报错:configure: error: xml2-config not found. Please check your libxml2 installation.

    yum list |grep xml2

    yum install -y libxml2*

    ./configure --prefix=/usr/local/php7 配置

    echo $? 返回0表示配置成功

    make 编译

    echo $? 返回0表示编译成功

    make install 安装

    echo $? 返回0表示安装成功

    10. 查资料搞明白 yum upgrade 以及 yum update 两者的区别?它们在什么情况下使用?

    答:yum --help看到:

    update 更新系统中的一个或多个软件包

    upgrade 更新软件包同时考虑软件包取代关系

    yum upgrade与yum update都能更新系统的所有软件包,不同的就是upgrade相当一次大规模的升级,连带了旧的要淘汰的包也升级。update 和 upgrade 的侧重点不一样,update主要是使软件达到最新,但upgrade更侧重的是软件功能得到一个很大的提升,区别于频繁的发布最新的补丁。upgrade不改变软件设置和系统设置,系统版本升级,内核不改变;update改变软件设置和系统设置,系统版本内核都升级。

    yum upgrade : 用于大规模的版本升级,更新Linux系统和整个软件版本

    yum update : 用于安装补丁文件,更新内核和软件包到最新

    11. 如何查看Linux系统中(CentOS)是否安装过某个包?

    答:yum list installed | grep 包名 或者 rpm -qa | grep 包名

    12. ./configure 完成后,并不知道到底有没有成功,用什么命令可以验证呢?

    答: 使用“echo $?”命令查看上条命令执行是否成功,返回码为“0”表示成功,非零表示出错。

    13. 如果在./configure 这一步出现这样的错误"configure: error: no acceptable C compiler found in $PATH" 我们该怎么办?

    答:表示在当前用户的环境变量$PATH指示的路径中没有找到可用的C编译器,需要安装gcc :

    yum install -y gcc

    14. 有时,你忘记某个编译参数是如何写的,你怎么办?

    答:查看帮助文档,README,INSTALL,CONFIGURE等,或者使用./configure --help

    15. 如何使用光盘构建yum仓库?

    答:mount /dev/cdrom /mnt/

    cd /etc/yum.repos.d       切换到配置文件夹下

    mv CentOS-Base.repo CentOS-Base.repo.bak    不使用网络yum源

    vim CentOS-Media.repo 编辑本地配置文件CentOS-Media.repo

    修改其内容如下:

    [local_cdrom]                           //为yum名,可以自定义,指定使用yum时用到

    name=cd

    baseurl=file:///mnt/                        //挂载点目录

    gpgcheck=0

    enabled=1

    #gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6~

    Esc:wq

    yum list 右侧的名字变成了local_cdrom

    yum grouplist 查看本地yum可用的包

    LANG=en 切换到英文

    yum groupinstall -y "Khmer Support" 从制作好的本地yum源安装一个语言套件

    第十章 shell基础知识

    课后习题:
    1. 设置环境变量 HISTSIZE , 使其能够保存10000条命令历史。

    答: vim /etc/profile,搜索到HISTSIZE,将1000改为10000,然后保存退出,再执行 source /etc/profile使其生效。

    [root@centos6 ~]# echo $HISTSIZE

    1000

    [root@centos6 ~]# HISTSIZE=10000 #临时修改

    [root@centos6 ~]# echo $HISTSIZE

    10000

    2. 为什么如果这样设置PS1 (PS1="[u@h W]$ ") 显示的结果和我们预想的不一样,那要如何设置才能恢复原来默认的?

    答: Shell中双引号保留原有字符的特殊含义,单引号可以去掉原有字符的特殊含义。所以我们有两种改法:

    (1)PS1="[u@h W]\$ "

    (2)PS2=‘[u@h W]$ ‘

    3. 想办法把当前目录下的文件的文件名中的小写字母全部替换为大写字母。

    答:使用脚本来完成该目标:

    [root@centos6 ~/test 01:04 #10]# vim lower2Upper.sh

    #!/bin/sh
    for i in `ls`
    do
        mv $i `echo $i |tr ‘[a-z]‘ ‘[A-Z]‘`
    done

    [root@centos6 ~/test 01:04 #10]# /bin/sh lower2Upper.sh

    4. 使用sort以":"为分隔符,对/etc/passwd文件的第5段排序。

    答:sort -t: -k5 -n /etc/passwd #按第5段排序

    5. 使用cut以":"为分隔符,截出/etc/passwd的第三段字符。

    答:cut -d: -f3 /etc/passwd #截出第三段

    6. 简述这几个文件的作用: /etc/profile, /etc/bashrc, .bashrc, .bash_profile.

    答:这几个都是配置文件。

    /etc/profile系统级的配置文件,其中变量对所有用户都有效;

    /etc/bashrc系统级的bash变量配置文件,任何用户运行bash则会读取其中内容。

    .bashrc:用户级的bash相关变量配置文件,只对当前用户有效,无需登录,主要通过该用户运行命令行就会读取该文件。

    .bash_profile用户级的变量配置文件,只对当前用户生效,在用户登录后才读取。

    7. export 的作用是什么?

    答:声明一个变量,使其进入子shell后也生效

    8. linux下自定义变量要符合什么样的规则呢?

    答:自定义变量的格式为 varname=value, 等号两边不能有空格;变量名只能由字母、数字和下划线组成,且不能以数字开头;原则上自定义变量要小写,不能与系统系统变量、函数名、关键字等相同;当变量内容带有特殊字符(如空格)时,需要加上单引号;变量内容中本身带有单引号,需要用到双引号;如果变量内容中需要用到其他命令运行结果则可以使用反引号;

    9. 如何把要运行的命令丢到后台跑?又如何把后台跑的进程给调到前台?

    答:运行之前,可用“命令 &”直接在后台运行;正在运行的命令,可以使用jobs查看其PID,然后使用"bg PID"命令将其调到后台运行;也可以使用“fg PID”将其调到前台运行。
    也可以用jobs查到jobs id 用 fg id 或bg id

     另:Ctrl +z 暂停进程

    10. 列出当前目录下以"test"开头的文件和目录。

    答:ls -ld test*

    11. 如何把一个命令的输出内容不仅打印到屏幕上而且还可以重定向到一个文件内?

    答:ls -ld test* |tee ls.log

    12. 假如有个命令很长,我们如何使用一个简单的字符串代替这个复杂的命令呢?请举例说明。

    答:可以使用别名alias:alias ls=‘ls --color=auto‘;

    也可以使用变量:myls=‘ls --color=auto‘,调用时只需加上$符即可:$myls

    13. 我如何实现这样的功能,把一条命令丢到后台运行,而且把其正确输出和错误输出同时重定向到一个文件内?

    答:vmstat 1 > /tmp/1.log 2>&1 &
    shell上:
    0表示标准输入
    1表示标准输出
    2表示标准错误输出
    > 默认为标准输出重定向,与 1> 相同
    2>&1 意思是把 标准错误输出 重定向到 标准输出.
    &>file 意思是把 标准输出 和 标准错误输出 都重定向到文件file中


    14. 如何按照大小(假如按照10M)分隔一个大文件,又如何按照行数(假如10000行)分隔?

    答:split -b 10M filename

    split -l 10000 filename

    15. 做实验,搞明白 ; && || 这三个符号的含义。

    答:(1);结束一条命令,可以用来将多条命令写在一行中

    (2)&&逻辑与,前面语句为真才执行后面语句,前面为假不执行后面语句

    (3)||逻辑或,前面语句为假才执行后面语句,前面为真不执行后面语句

    16. 如果只想让某个用户使用某个变量如何做?

    答:可以以该用户身份编辑其家目录下的.bashrc文件,加入一行 var=10,保存退出后执行

    source .bashrc使其立刻生效即可。

    17. 使用哪个命令会把系统当中所有的变量以及当前用户定义的自定义变量列出来?

    答:env只能列出系统变量,set不仅能列出系统变量,还能列出用户变量。

    第十一章 正则表达式

    课后习题:
    1. 如何把 /etc/passwd 中用户uid 大于500 的行给打印出来?
    awk -F ':' '$3 > 500' /etc/passwd

    2. awk中 NR,NF两个变量表示什么含义?awk -F ':' '{print $NR}' /etc/passwd 会打印出什么结果出来?
    NR表示行号
    NF是总共有多少段
    NR表示行数,NF表示一共有多少段
    awk -F ':' '{print $NR}' /etc/passwd 会依次打印对应的行数的段,第一行打印第一段,第二行打印第二段... 到了最后就打印空行了

    3. 用grep把1.txt文档中包含'abc'或者‘123’的行过滤出来,并在过滤出来的行前面加上行号.
    grep -E -n 'abc|111' test.txt

    4. grep -v '^$' 1.txt 这样会过滤出哪些行?
    会把非空行过滤出来

    5. '.' '*' 和 '.*' 分别表示什么含义?'+'和'?'表示什么含义,这五个符号是否可以在grep中使用,是否可以在egrep、sed以及awk中使用?
    '.':表示一个任意的字符;
    '*':表示前面紧邻的那个字符有零个或多个,即前面紧邻的那个字符可以不存在,也可以有多个;
    '.*':表示零个或多个的任意字符,包括空行;
    '+':表示前面紧邻的那个字符有一个或多个;
    '?':表示前面紧邻的那个字符有零个或一个;
    grep和sed可以使用'.' 、 '*' 和 '.*',但是不能使用'+'和'?' egrep和awk全部可以使用。

    6. grep 里面用到一个 {} ,它用在什么情况下?

    { },其内部为数字,表示前面的字符要重复的次数。数字可以是单个数字{n},也可以是一个区间{n1,n2}。注意,在字符串中,{ }左右都需要加上脱意字符 ‘’。

    例如, grep 'o{3}' /etc/passwd //输出有3连续的'o'的行


    7. sed有一个选项,可以直接更改文本文件,是哪个选项?
    sed -i

    8. sed -i 's/.*ie//;s/["|&].*//' file 这条命令表示什么操作呢?

    该命令由;分割了两部分,首先第一部分表示把file中出现的以ie结尾的字符串删除,
    第二部分是把file中以"或|或&开头的字符串删除


    9. 如何删除一个文档中的所有数字或者字母?

    删除所有数字: sed -i 's/[0-9]//g' file
    删除所有字母: sed -i 's/[a-Z]//g' file


    10. 截取日志1.log的第一段(以空格为分隔符), 按数字排序、然后去重,但是需要保留重复的数量如何做?

    awk '{print $1}' 1.log |sort -n|uniq -c|sort -n

    11. 使用awk过滤出1.log中第7段(空格分隔)为'200' 并且第8段为'11897'的行。

    awk '$7 == "200" && $8 == "11897"' 1.log

    12. 请比较这两个命令的异同: grep -v '^[0-9]' 1.txt 和 grep '^[^0-9]' 1.txt

    grep -v '^[0-9]' 1.txt //输出文件中不以数字开头的行,但输出空行
    grep '^[^0-9]' 1.txt //输出文件中不以数字开头的行,但不输出空行(不是0到9开头,但是需要有内容)

    13. awk中的$0表示什么?为什么以下两条命令的$0结果不一致呢? awk -F ':' '{print $0}' 1.txt 和 awk -F ':' '$7=1 {print $0}' 1.txt
    $0表示整行
    awk -F ':' '{print $0}' 1.txt //打印所有的行 ,即整个记录
    awk -F ':' '$7=1 {print $0}' 1.txt
    //以冒号为分隔符,输出时将每行的第七段的内容更改为1,并打印所有的行,此时并不会连带分隔符一起输出(因为此时有对分隔的段进行相关的操作,这样分隔就有意义了,所以不会打印分隔符)

    14. 使用grep过滤某个关键词时,如何把包含关键词的行连同上面一行打印出来,那下面一行呢?同时上面和下面都打印出来呢?

    grep -B1 上面一行
    grep -A1 下面一行
    grep -C1 上下各一行

    第十二章 shell脚本 

    课后习题:

    1. shell脚本中,怎么做可以把某一行给注释掉
    在该行的最前面加一个警号#

    2. 如何执行一个shell脚本呢
    bash 1.sh 或者 chmod +x 1.sh; ./1.sh

    3. 为了方便管理,我们约定把shell脚本都放到哪个目录下
    放到 /usr/local/sbin/下

    4. 为了更好的调试shell脚本,我们可以加一个选项来观察shell脚本的执行过程,是哪个选项呢
    bash -x 1.sh

    5. 使用date命令打印5天前的日期,要求日期格式为: xxxx-xx-xx
    date -d "-5 day" +%Y-%m-%d

    6. 请判断,阿铭的脚本哪里有问题
    #! /bin/bash

    a = 1
    b = 2
    echo $a, $b

    赋值变量值的时候,带了空格

    7. shell脚本中如何使用数学运算请举例说明。
    a=1; b=2
    c=$[$a+$b]
    echo $c

    8. shell脚本中有一个命令可以实现脚本和用户交互,请问是哪个命令,怎么使用 

    read -p
    例如
    read -p "please input a number" n
    这样会把用户输入的内容作为n这个变量的值

    9. 在shell中如何进行大小或者等于判断
    大于       -gt

    小于是      -lt

    等于是      -ne

    大于等于是    -ge

    小于等于是    -le

    格式如下:
    if [ $a -ge 0 ]; then ... ;fi

    10. shell脚本中,用什么符号表示并且,用什么符号表示或者
    && 并且
    || 或者

    11. shell脚本中,case逻辑判断的结构是什么样的

    case $a in 
    1) 
    command 
    ;; 
    2) 
    command 
    ;; 
    *) 
    command 
    ;; 
    esac

    12. 列举出shell脚本中常用的循环结构。
    for a in ... ; do ... ; done
    while ...; do ...; done

    13. shell脚本中函数的作用是什么函数结构是什么样的
    函数可以理解成shell脚本中一个小代码单元,当要用到这段代码时直接调用函数名即可,从而避免重复书写这段代码,提高代码书写效率和质量。
    函数的结构为
    function fu_name() {
    .....
    }

    14. 写脚本实现,把一个目录下的所有文件(不含有目录)全部在文件名后面加一个.bak
    #! /bin/bash

    for f in `find . -type f`; do mv $f $f.bak; done

    15. 编写一个shell脚本,将当前目录下大小大于100k的文件全部移动到/tmp/ 目录下。
    for f in `find . -type f -size +100k`; do mv $f /tmp/ ; done

    16. 写一个小脚本,获取本机的hostname、ip地址以及dns地址。

    #!/bin/bash
    hostname=`hostname` 
    echo "hostname : " $hostname 
    ip=`/sbin/ifconfig | grep inet[[:space:]] |awk '$2!="127.0.0.1"' | tr -s ' ' |cut -d' ' -f3` 
    #
    ip=`/sbin/ifconfig | grep inet[[:space:]] |awk '$2!="127.0.0.1"' |awk -F' ' '{print $2}'
    echo "ip : " $ip dns=`cat /etc/resolv.conf |grep nameserver|grep -v '#'` echo "dns: "$dns

    17. 写两个小脚本验证break和continue在循环中的作用。

    #!/bin/bash 
    for i in `seq 1 5` 
    do
        echo $i 
     
    if [ $1 -eq 3 ] 
    then 
        break 
    fi 
    echo $i 
    done 

    输出结果是;1 1 2 2 3 到最后一个echo 没有输出 结束了当前层

    将上面的break 换成 continue
    结果是: 1 1 2 2 3 4 4 5 5
    当等于3的时候下面那句不执行,
    继续执行 之一到5

    第十三章 系统管理

    1. 如何看当前linux系统有几颗物理cpu和每颗cpu的核数
    物理cpu个数:cat /proc/cpuinfo |grep -c 'physical id'
    cpu一共有多少核:grep -c processor /proc/cpuinfo
    将cpu的总核数除以物理cpu的个数,得到每颗cpu的核数。

    2. 查看系统负载有两个常用的命令,是哪两个这三个数值表示什么含义呢
    两个命令分别是 w 和 uptime
    这三个系统负载值分别表示在1分钟、5分钟和15分钟内平均有多少个任务处于活动状态。

    3. vmstat r, b, si, so, bi, bo 这几列表示什么含义呢

    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     2  0  29248 1003816      0 302720    0    1    37    58   90   89  2  1 98  0  0

    r 表示运行和等待cpu时间片的进程数
    b 表示等待资源的进程数,比如等待i/o, 内存等
    si 表示由交换区进入内存的数量
    so 由内存进入交换区的数量
    bi 从块设备读取数据的量(读磁盘)
    bo 从块设备写入数据的量(写磁盘)

    4. linux系统里,您知道buffer和cache如何区分
    简单讲,buffer里的数据是将要写入到磁盘里的,而cache里的数据时从磁盘里读出来的。
    cache用来缓存从磁盘中读取出来的数据,以方便数据下次被访问,提高数据的访问效率,避免频繁读取磁盘操作。linux自动地使用所有空闲的内存作为高速缓冲,当程序需要更多的内存时,它也会自动地减小缓冲的大小。
    buffer用来缓冲数据的磁盘写入操作,通过将分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写磁盘),也可以通过sync命令手动清空缓冲。

    5. 使用top查看系统资源占用情况时,哪一列表示内存占用呢
    res这一列表示物理内存占用数量

    6. 如何实时查看网卡流量为多少?如何查看历史网卡流量 ?
    sar -n DEV 1 100
    sar -n DEV 可以查看当天的历史网卡流量
    sar -n DEV -f /var/log/sa/saxx 其中xx是日期

    7. 如何查看当前系统都有哪些进程
    ps aux

    8. ps 查看系统进程时,有一列为stat, 如果当前进程的stat为ss 表示什么含义如果为z表示什么含义
    ss表示当前的进程是主进程,且处于休眠状态; z表示僵尸进程

    9. 如何查看系统都开启了哪些端口
    netstat -lnp

    10. 如何查看网络连接状况
    netstat -an

    11. 想修改ip,需要编辑哪个配置文件,修改完配置文件后,如何重启网卡,使配置生效
    vim /etc/sysconfig/network-scripts/ifcft-eth0 如果是eth1则文件名为ifcft-eth1
    修改网卡后,可以使用命令: ifdown eth0; ifup eth0 重启网卡,也可以重启网络服务:service network restart

    12. 能否给一个网卡配置多个ip 如果能,怎么配置
    可以给一个网卡配置多个ip,配置步骤如下:
    1) cd /etc/sysconfig/network-scripts/ cp ifcfg-eth0 ifcfg-eth0:1
    2) vim ifcfg-eth0:1 #修改device和ipaddr、netmask以及gateway的值(如果有必要)
    3) 重启网络服务

    临时配置的话:ifconfig eth:0 192.168.0.xx/24 up

    13. 如何查看某个网卡是否连接着交换机
    mii-tool eth0 或者 mii-tool eth1

    14. 如何查看当前主机的主机名,如何修改主机名要想重启后依旧生效,需要修改哪个配置文件呢
    输入命令 hostname 可以查看当前主机名,修改主机名可以通过命令: hostname newhostname
    要想重启后依旧生效,需要修改配置文件 /etc/sysconfig/network

    15. 设置dns需要修改哪个配置文件
    需要修改 /etc/resolv.conf,
    有时修改该文件后再重启网络服务dns相关设置丢失的话,需要在/etc/sysconfig/network-scripts/ifcfg-eth0中增加dns1=xxxxx这样的设置

    16. 使用iptables 写一条规则:把来源ip为192.168.1.101访问本机80端口的包直接拒绝
    iptables -I INPUT -s 192.168.1.101 -p tcp --dport 80 -j REJECT

    17. 要想把iptable的规则保存到一个文件中如何做如何恢复
    保存:iptables-save > 1.ipt
    恢复:iptables-restore < 1.ipt

    18. 如何备份某个用户的任务计划
    直接拷贝用户的cron文件 cp /var/spool/cron/username /bak/

    19. 任务计划格式中,前面5个数字分表表示什么含义
    分   时  日  月  周

    20. 如何可以把系统中不用的服务关掉
    ntsysv 工具
    或者使用chkconfig servicename off

    21. 如何让某个服务(假如服务名为 nginx)只在3,5两个运行级别开启,其他级别关闭
    chkconfig nginx off
    chkconfig --level 35 nginx on

    22. rsync 同步命令中,下面两种方式有什么不同呢
    (1) rsync -av /dira/ ip:/dirb/ 是通过ssh方式同步的
    (2) rsync -av /dira/ ip::dirb 是通过rsync服务的方式同步的

    23. rsync 同步时,如果要同步的源中有软连接,如何把软连接的目标文件或者目录同步?
    如果源中有软连接,那么需要加一个-l选项

    24. 某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
    有两个日志文件:
    1)/var/log/secure 这个记录验证用户信息的过程
    2)/var/log/wtmp 这个日志记录成功登陆的用户信息

    25. 网卡或者硬盘有问题时,我们可以通过使用哪个命令查看相关信息?
    dmesg

    26. 分别使用xargs和exec实现这样的需求,把当前目录下所有后缀名为.txt的文件的权限修改为777.
    xargs: find ./ -type f -name "*.txt" |xargs chmod 777
    exec: find ./ -type f -name "*.txt" -exec chmod 777 {} ;

    27. 有一个脚本运行时间可能超过2天,如何做才能使其不间断的运行,而且还可以随时观察脚本运行时的输出信息
    使用screen工具

    28. 在linux系统下如何按照下面要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中
    tcpdump -nn -s0 host 192.168.0.111 and port 80 -c 1000 -w 1.cap

    29. rsync 同步数据时,如何过滤出所有.txt的文件不同步
    --exclude="*.txt"

    30. rsync同步数据时,如果目标文件比源文件还新,则忽略该文件,如何做?
    -u 选项

    31. 想在linux命令行下访问某个网站,并且该网站域名还没有解析,如何做 ?
    修改 /etc/hosts 增加解析记录,或者使用curl -x

    32. 自定义解析域名的时候,我们可以编辑哪个文件是否可以一个ip对应多个域名是否一个域名对应多个ip
    编辑 /etc/hosts ,可以一个ip对应多个域名,不可以一个域名对多个ip

    33. 我们可以使用哪个命令查看系统的历史负载(比如说两天前的)
    sar -q -f /var/log/sa/saxx 其中xx为两天前的日期

    34. 在linux下如何指定dns服务器,来解析某个域名
    dig @dnsip domain.com

    35. 使用rsync同步数据时,假如我们采用的是ssh方式,并且目标机器的sshd端口并不是默认的22端口,那我们如何做
    rsync "--rsh=ssh -p port"

    36. rsync同步时,如何删除目标数据多出来的数据,即源上不存在,但目标却存在的文件或者目录
    --delete

    37. 使用free查看内存使用情况时,哪个数值表示真正可用的内存量
    第二行 -/+ buffers/cache 对应的free的那一个数

    38. 有一天你突然发现公司网站访问速度变的很慢很慢,你该怎么办呢(服务器可以登陆,提示:你可以从系统负载和网卡流量入手)
    首先登陆服务器,先看看负载情况,使用命令w, 如果第一个数值很大,再使用vmstat 1 查看是哪些资源缺乏造成的负载高,可以通过r,b,si,so 几列的数值推算是因为哪些资源缺乏。比如r列数值很大,需要使用top命令查看是哪个进程占用cpu比较多,如果si,so两列的数值变化频繁,则说明内存不足,也可以使用top命令查看哪些进程占用较多内存。
    如果系统的负载不高,则需要查看一下网卡流量是否正常: sar -n dev 1 10 对比平时的网络流量看是否正常。

    39. rsync使用服务模式时,如果我们指定了一个密码文件,那么这个密码文件的权限应该设置成多少才可以
    600 或者 400 总之组和其他用户都不能读不能写也不能执行

    第十四章  LAMP搭建

    课后习题:

    1. 为什么下载源码包需要到官网上去下载
    简单说就是为了安全,如果是非官方下载的源码包,有可能被别有用心的人动过手脚,毕竟是源码的,任何人都可以修改代码。

    2. 64位机器是否可以安装32位rpm包64位机器是否可以安装32位的mysql二进制免编译包
    64位机器是可以安装32位rpm包的,同样的64位机器也能安装32位的mysql二进制免编译包(centos5.x的确是支持,但是centos6.x不支持)。

    3. 编译安装apache时, 如果不加--with-included-apr 会有什么问题
    会报错,cannot use an external apr with the bundled apr-util,因为apr是一个底层的接口库,编译apache必须要有这个支持。

    4. 编译php时,必须加上 --with-apxs2=/usr/local/apache2/bin/apxs 这是什么意思呢
    apxs是apache编译动态模块并自动配置加载到httpd.conf文件的一个工具,由于php也是作为apache的一个动态加载模块,我们编译php的目的就是为了生成这个模块,所以必须要指定apxs的地址。

    5. 当配置好apache的配置文件后,如何检验配置文件是否正确
    /usr/local/apache2/bin/apachectl -t

    6. 如何查看80端口是否启动
    netstat -lnp |grep ':80'

    7. 更改apache配置文件httpd.conf后,如何重新加载配置文件
    /usr/local/apache2/bin/apachectl graceful

    8. 如何查看apache加载了哪些模块
    /usr/local/apache2/bin/apachectl -m

    9. 怎么查看php加载了哪些模块
    /usr/local/php/bin/php -M

    10. 简单描述静态加载和动态共享模块的区别。
    不管编译httpd还是php,都会有一个静态模块和动态模块的概念。首先,动态和静态模块宏观上分析,静态会直接编译进httpd这个可执行文件内,而动态的模块是单独的一个文件;其次,静态模块是和httpd这个文件一同加载的,只要服务一开启就会加载所有的静态模块,而动态模块是根据需求什么时候用什么时候加载。

    11. 当我们配置好lamp环境后,访问php程序无法解析,你如何去排查这个问题呢
    (1) apachectl -m 看是否加载了libphp5.so
    (2) 如果没有加载,那查看/usr/local/apache2/modules/是否有libphp5.so,然后查看httpd.conf 中是否有loadmodule libphp5.so
    (3) 再看httpd.conf中是否有 addtype application/x-httpd-php .php
    (4) apache一定要重启服务

    12. 如何配置apache的虚拟主机
    vim httpd.conf
    #include conf/extra/httpd-vhosts.conf
    把该行最前面的#去掉,然后修改:
    <directory />
    options followsymlinks
    allowoverride none
    order deny,allow
    deny from all
    </directory>
    改为
    <directory />
    options followsymlinks
    allowoverride none
    order deny,allow
    allow from all
    </directory>

    再 vim conf/extra/httpd-vhosts.conf 根据实际需求修改

    13. 如何配置apache的用户验证
    vi httpd.conf
    在相应的虚拟主机配置文件段,加入
    <directory *>
    allowoverride authconfig
    authname "自定义的"
    authtype basic
    authuserfile /data/.htpasswd // 这个目录你可以随便写一个,没有限制
    require valid-user
    </directory>

    保存后,然后创建apache的验证用户 htpasswd -c /data/.htpasswd test

    14. 如何配置apache的日志以及日志按天切割
    在httpd.conf 在相应的虚拟主机配置段,加入
    customlog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/www.yourdomain.com-access_%y%m%d.log 86400" combined
    注意,需要写成绝对路径,写成相对的路径可能不生效

    15. 如何配置apache的图片等静态文件的过期时间

    httpd.conf 中加入

    <ifmodule mod_expires.c>
    expiresactive on
    expiresbytype image/gif "access plus 1 days"
    expiresbytype image/jpeg "access plus 24 hours"
    expiresbytype image/png "access plus 24 hours"
    expiresbytype text/css "now plus 2 hour"
    expiresbytype application/x-javascript "now plus 2 hours"
    expiresbytype application/x-shockwave-flash "now plus 2 hours"
    expiresdefault "now plus 0 min"
    </ifmodule>

    16. 如何限定某个目录下的php文件没有执行权限
    vim httpd.conf
    在相关的虚拟主机段,加入
    <directory /www/htdocs/path>
    php_admin_flag engine off
    </directory>
    其中 /www/htdocs/path 为要限制的目录

    17. 如何配置apache的域名重定向
    要把访问域名 www.domain1.com 的域名转发到 www.domain2.com 上
    实现:
    在相关的虚拟主机中增加
    <ifmodule mod_rewrite.c>
    rewriteengine on
    rewritecond %{http_host} ^www.domain1.com$
    rewriterule ^(.*)$ http://www.domain2.com/$1 [r=301,l]
    </ifmodule>

    如果是多个域名重定向到一个域名
    <ifmodule mod_rewrite.c>
    rewriteengine on
    rewritecond %{http_host} ^www.domain.com[or]
    rewritecond %{http_host} ^www.domain1.com$
    rewriterule ^(.*)$ http://www.domain2.com/$1 [r=301,l]
    </ifmodule>

    18. 如何配置php的错误日志
    vim php.ini 检查并配置如下两项
    log_errors = on
    error_log = logs/error.log

    19. 如何在php中配置open_basedir, 是否可以在httpd.conf 中针对虚拟主机配置open_basedir
    vim php.ini
    加入 open_basedir=/var/www/
    httpd.conf中也可以针对虚拟主机限制openbasedir:
    在相对应的虚拟主机配置文件中加入:
    php_admin_value open_basedir "/var/www/htdocs"

    20. 如何禁止php的函数exec
    vim php.ini 找到
    disable_functions =
    改为
    disable_functions = exec 如果是多个函数,可以在exec后面继续增加函数名用逗号分开即可

    21. 我们以源码安装lamp环境时,先安装哪个,后安装哪个为什么呢
    安装顺序可以是 mysql apache php 也可以是 apache mysql php
    把php放到最后,这是因为安装php时,需要指定mysql安装目录,也需要指定apache的apxs工具

    22. 怎么确定你的php.ini 在哪个目录下
    php -i |grep 'configuration file'

    23. 怎么确定你的php的extension_dir 在哪里
    php -i |grep 'extension_dir'

    第十五章 LNMP搭建

    1. 到mysql官方下载一个源码包,尝试编译安装,编译参数可以参考我们已经安装过的mysql的编译参数。
    操作略,有问题的话把问题发出来。
    mysql官网 http://dev.mysql.com/downloads/mysql/5.1.html#downloads 选择source code
    查看mysql编译参数的方法是 cat /usr/local/mysql/bin/mysqlbug|grep configure

    2. mysql的配置文件my.cnf,是否可以放到除了/etc/目录下的其他目录下
    可以放到其他目录下,不过启动的时候需要指定配置文件,或者在启动脚本中定义一下配置文件的路径
    手动启动mysql的命令: /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/my.cnf --user=mysql --datadir=/data/mysql
    或者在启动脚本中/etc/init.d/mysqld 中,搜索conf=/etc/my.cnf,并修改

    3. 比较一下,lamp环境和lnmp环境编译php时,编译参数有哪些区别
    lamp的php有指定 apxs,lnmp中没有指定;lnmp中有一项叫做 --enable-fpm,lamp没有

    4. 安装好php后,比较一下lamp的php和lnmp的php的目录结构有什么不同
    lnmp的php比lamp的php多出来几个目录:sbin, share, var

    5. 想一想,lamp环境下的php安装目录 /usr/local/php 是否可以删除
    可以删除掉,因为lamp中的php是作为apache的一个动态模块libphp5.so来调用的,唯一有影响的是如果指定了php的配置文件php.ini在php的目录下,如果删除后则配置文件失效。

    6. php的配置文件是什么 php-fpm 的配置文件是什么
    php的配置文件时php.ini, php-fpm的配置文件时 php-fpm.conf

    7. 如何检测nginx配置文件是否有错如何检测php-fpm的配置文件是否有错
    /usr/local/nginx/sbin/nginx -t
    /usr/local/php/sbin/php-fpm -t

    8. 在本章中,出现了两次 "chmod 755 /etc/init.d/xxx" 其中xxx 为php-fpm 和 nginx, 想一想为什么要更改他们的权限,如果不改,会有什么问题
    因为php-fpm和nginx是启动脚本,脚本执行必须要有执行权限,如果不给执行权限,不能正确把它们加入到系统服务中。

    9. nginx是如何做到解析php文件的它是如何和php联系在一起的
    nginx解析php,是以代理的方式代理的php-fpm,在nginx的配置文件中有这样一段:
    location ~ .php$ {
    include fastcgi_params;
    fastcgi_pass unix:/tmp/php-fcgi.sock;
    fastcgi_index index.php;
    fastcgi_param script_filename /backup/sphinx/build/html$fastcgi_script_name;
    }
    这就是用来指定php-fpm的,nginx本身不能解析php,它只是一个简单的web服务软件,但nginx有一个很好的功能就是可以作为代理服务器,而php-fpm是可以解析php的,所以只要nginx代理一下php-fpm就可以解析php啦。

    10. 配置nginx的访问日志,并编写日志切割脚本按天切割。
    配置nginx的日志,首先需要定义一下日志格式,这个格式在 nginx.conf的 httpd模块下配置,参考格式:
    log_format main1 '$proxy_add_x_forwarded_for - $remote_user [$time_local] '
    '"$request" $status $body_bytes_sent '
    '"$http_referer" "$http_user_agent"';
    其中 main1为日志格式的名字,这个会用到。然后在虚拟主机配置段中,也就是server部分中配置加上
    access_log /var/log/xxx/access.log main1;
    日志切割脚本(已知访问日志为/var/log/xxx/access.log):

    #! /bin/bash
    d=`date -d "-1 day" +%y%m%d`
    /bin/mv /var/log/xxx/access.log /var/log/xxx/$d-access.log
    /bin/kill -hup `cat /usr/local/nginx/logs/nginx.pid` //其中nginx的pid文件为/usr/local/nginx/logs/nginx.pid

    假如脚本的名字为 /usr/local/sbin/nginx_logrotate.sh,加入计划任务
    0 0 * * * /bin/bash /usr/local/sbin/nginx_logrotate.sh

    11. 配置nginx域名重定向,比如一个虚拟主机支持多个域名访问,abc.com 和 123.com 那么让123.com的访问跳转到 abc.com在相应的虚拟配置文件中加入:
    if ($host != 'abc.com' ) {
    rewrite ^/(.*)$ http://abc.com/$1 permanent;
    }

    12. 配置nginx的用户验证
    需要先安装 htpasswd命令: yum install -y httpd
    htpasswd -c /usr/local/nginx/conf/htpasswd test // 添加test用户,第一次添加时需要加-c参数,第二次添加时不需要-c参数
    在nginx相应虚拟主机配置文件中添加
    location / {
    root /data/www/wwwroot/count;
    auth_basic "auth";
    auth_basic_user_file /usr/local/nginx/conf/htpasswd;
    }

    13. 针对nginx站点,设置禁止某个目录下的php程序解析
    比如说,禁止abc目录下的php解析:

    location ~ .*abc/.*.php$
    {
    deny all;
    }

    14. 使用nginx代理一个站点
    例如,想在我们的nginx服务器上代理www.baidu.com, 可以创建一个新的虚拟配置文件baidu.conf
    server {
    listen 80;
    server_name www.baidu.com;

    location / {
    proxy_pass http://61.135.169.125/;
    proxy_set_header host $host;
    proxy_set_header x-real-ip $remote_addr;
    proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
    }
    # access_log /tmp/1.log;
    }

    15. 配置nginx限制只让某个ip访问
    在相应的虚拟主机配置文件中,加入
    allow 1.1.1.1;
    allow 2.2.2.2;
    deny all;

    16. 设置nginx 防盗链,比如只想让www.lishiming.net 这个域名的referer访问,其他站点不能访问
    首先一点需要明确,防盗链是针对图片或者其他静态文件来设置的,比如我不想让其他网站引用我网站的图片,就可以这样设置防盗链。
    在相应虚拟配置文件中加入:

    location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$ {
    valid_referers none blocked server_names www.lishiming.net; // 对这些域名的网站不进行盗链。
    if ($invalid_referer) {
    return 403;
    }
    }
    当还可以写多个白名单域名,或者使用通配符:valid_referers none blocked server_names *.lishiming.net *.baidu.com;
    有时,我们也有这样的需求,如果别的网站引用了我们的图片,可以让它显示成我们自己指定的一张图片:
    if ($invalid_referer) {
    rewrite ^/ http://www.example.com/nophoto.gif;
    }

    17. nginx设置根据user_agent来限制访问,比如禁止baidu的蜘蛛访问站点
    baidu蜘蛛的user_agent 为 mozilla/5.0 (compatible; baiduspider/2.0; +http://www.baidu.com/search/spider.html)
    所以,我们可以写成这样:
    location / {
    if ($http_user_agent ~ 'baiduspider'){
    return 403;
    }
    }


    18. nginx配置虚拟目录

    问题:
    www.111.com 站点的root目录为 /data/web/ ,现在想在www.111.com 下放一个站点,www.111.com/abc/
    但不能直接在/data/web/下创建abc目录,要放在 /data1/abc/下。

    解决办法:
    使用nginx的alias功能实现虚拟目录
    在配置文件中加入
    location ~ /abc/(.*)$ {
    alias /data1/abc/$1;
    }

    19. php-fpm.conf 中配置多个pool,如何针对每一个pool配置open_basedir 以及slow_log
    php-fpm.conf中可以配置多个pool,并且可以针对每一个pool配置open_basedir和slow_log
    首先,php-fpm.conf的配置文件格式为:
    [global]

    ...
    ...
    ...

    [www.domain1.com]

    ...
    ...
    ...

    [www.domain2.com]

    ...
    ...
    ...

    配置open_basedir和slow_log需要在相应的pool中加入:
    slowlog = log/www.default.com.slow
    request_slowlog_timeout = 1
    php_admin_value[open_basedir]=/data/release/www.domain.com/:/tmp/
    其中,open_basedir可以写多个目录,多个目录间使用:分隔

    第十六章 MySQL

    1. 如何更改系统环境变量PATH
    vim /etc/profile 加入 PATH=$PATH:/usr/local/mysql/bin

    2. 默认mysql安装好后,并没有root密码,如何给root设置一个密码
    mysqladmin -uroot password 'newpass'

    3. 如何更改root密码
    mysqladmin -uroot -p123456(-p旧密码) password '111111'(新密码)

    4. 如何连接远程的mysql服务器
    mysql -uusername -ppass -hhostip -pport

    5. 如何查看当前登陆mysql的账户
    select user();

    6. 在mysql命令行下,怎么切换某个库
    use databasename;

    7. 如何查看一个表都有哪些字段
    desc tablename;

    8. 如何查看某个表使用的是哪种数据库引擎
    show create tableg;

    9. 如何查看当前数据库有哪些队列
    show processlist;

    10. 当有很多队列时,如何查看有哪些慢查询
    看慢查询日志,慢查询日志在/etc/my.cnf中设置方法是增加:
    log_slow_queries = logname
    long_query_time = 1 //查询时间超过1s会记录日志

    11. 如何查看当前mysql的参数值
    show variables;

    12. 如何不重启mysql服务,更改某个参数
    set global xxx = xxx; 比如
    set global wait_timeout = 10;

    13. 用什么工具备份数据库请区分myisam引擎和innodb引擎两种存储引擎的备份。
    mysqldump 备份数据库,mysqldump可以备份两种引擎的数据。但是innodb引擎的数据使用xtrabackup工具更快

    14. 简单描述myisam和innodb引擎的区别。
    innodb不支持fulltext类型索引;
    innodb不保存表的行数;
    myisam的数据直接存在系统的文件中,而innodb的数据库会事先创建一个数据表空间文件,然后再从这个表空间文件中存数据;
    myisam不提供事务支持,innodb提供事务支持事务,外部键等高级 数据库功能;
    myisam的锁是对整个表锁定,innodb是行锁;

    15. 如果你的mysql服务启动不了,而当前终端又没有报错,你如何做
    查看mysql的日志,日志默认在datadir下,以hostname为名字的.err文件

    16. 要备份的库字符集是gbk的字符集,为了避免出现乱码的情况,如何在备份和还原的时候指定字符集为gbk
    备份指定 mysqldump --default-character-set=gbk
    恢复指定 mysql --default-character-set=gbk

    17. 错误日志中,如果出现提示说某个表损坏需要修复,你如何修复这个表呢
    repair table tablename;

    18. 备份myisam引擎的数据库时,我们除了使用mysqldump工具备份外,还可以直接拷贝数据库的源数据(.frm, .myd, .myi三种格式的数据),其中哪一个文件可以不拷贝若想恢复该文件,如何做
    .myi的文件可以不拷贝,恢复的时候,需要修复表,但加上 use_frm, 如
    repair table tb1 use_frm;

    19. 如果mysql的root密码忘记了如何做
    1) 编辑mysql主配置文件 my.cnf vim /etc/my.cnf
    在[mysqld]字段下添加参数 skip-grant
    2) 重启数据库服务 service mysqld restart
    3) 这样就可以进入数据库不用授权了 mysql -uroot
    4) 修改相应用户密码 use mysql;
    update user set password=password('your password') where user='root';
    flush privileges;
    5) 修改/etc/my.cnf 去掉 skip-grant , 重启mysql服务

    20. 如何更改mysql的普通账户密码
    update user set password=password('your password') where user='username';

    21. mysql的命令历史文件在哪里,为了安全我们其实是可以做一个小处理,不让mysql的命令历史记录在文档中,请想一想如何利用之前我们学过的知识做到
    ~/.mysql_history
    我们可以这样不保存mysql命令历史: cd ~; rm -f .mysql_history; ln -s /dev/null .mysql_history

    22. 如何让mysql的监听端口为3307,而不是默认的3306
    vim /etc/my.cnf
    把port = 3306 改为 port = 3307

    第十七章 nfs服务

    1. nfs配置,需要安装哪些包
    nfs-utils 和 rpcbind

    2. 如果不开启rpcbind服务,就启动nfs,会怎么样
    如果不开启rpcbind服务,会报错:rpc.nfsd: writing fd to kernel failed: error 111 (connection refused)

    3. nfs配置文件中,no_root_squash, all_squash, root_squash 分表表示什么含义
    no_root_squash: 在客户端不限制root账号,客户端上root账号对nfs共享目录拥有至高权限
    all_squash: 在客户端上限制所有账户,如果不指定anonuid/anongid则默认会把所有账户限定为nfsnobody
    root_squash: 在客户端上限制root账户而不限定其他普通用户,如果不指定anonuid/anongid则默认会把所有账户限定为nfsnobody

    4. 用什么命令来查看某个服务器上的nfs共享信息
    showmount -e nfsserverip

    5. 如何把远程的共享nfs挂载到本地如何查看本机已经共享的nfs资源
    mount -t nfs nfsserverip:/dir /mnt
    df -h 查看

    6. 在nfs服务器上,假如更改了配置文件,如何不重启nfs服务使配置生效
    exportfs -arv

    7. 挂载nfs时,经常加上一个选项 -o nolock, 它的作用是什么呢
    -o nolock 是为了不加文件锁。

    8. 请根据需求写成相应的配置:把/data/123/目录共享,针对192.168.10.0/24网段,限制客户端上所有用户,并限定为uid=800,gid=800
    /data/123 192.168.10.0/24(rw,sync,all_squash,anonuid=800,anongid=800)

    第十八章

    1. ftp 服务默认监听哪个端口,我们是否可以更改它
    ftp默认监听21端口,可以更改这个默认监听端口。pure-ftpd 可以修改配置文件,加上一行:bind 0.0.0.0,2100 其中2100是修改后的端口。而vsftpd服务需要在配置文件/etc/vsftpd/vsftpd.conf 加入一行: listen_port=2100

    2. 常用搭建ftp服务的软件有哪些 系统自带的是哪一种
    pure-ftpd vsftpd, 系统自带是后者

    3. 使用pureftp 如何创建一个用户 如何删除一个用户
    创建:pure-pw useradd test1 -uwww -d /data/ftp
    删除:pure-pw userdel test1

    4. 如何更改用户的密码(pureftp)
    更改密码的办法是:先删除账号,再重新创建同名账号。

    5. 如何查看当前有几个用户(pureftp)
    pure-pw list

    6. 使用vsftpd软件搭建一个ftp服务器,你需要满足这样的需求:创建3个账户,user1, user2, user3 ,其中这三个用户都可以访问同一个目录,但是user1可读写,但user2和user3只读.
    思路:根据课上我提供给大家的文档来搭建vsftpd虚拟账号,然后创建user1,user2,user3三个账号,在创建他们的配置文件时,指定相同的家目录,但user1 write_enable=yes, user2 write_enable=no, user3 write_enable=no

    7. 使用vsftpd软件搭建一个ftp服务器,你需要满足这样的需求:创建3个账户,user1, user2, user3 ,其中这三个用户都可以访问同一个目录,但是每个用户都可以读取其他用户的文件,但是只能更改自己的文件,不能更改其他用户的文件。
    思路:vsftpd搭建ftp服务,使用系统账号作为ftp的账号,然后要访问的目录做一个t权限(类似于tmp目录)
    参考配置文件: cat /etc/vsftpd/vsftpd.conf
    anonymous_enable=no
    local_enable=yes
    write_enable=yes
    local_umask=022
    anon_upload_enable=no
    anon_mkdir_write_enable=no
    dirmessage_enable=yes
    xferlog_enable=yes
    connect_from_port_20=yes
    xferlog_std_format=yes
    chroot_local_user=yes
    listen=yes
    pam_service_name=vsftpd
    userlist_enable=yes
    tcp_wrappers=yes
    local_root=/tmp/123

    创建ftp目录: mkdir /tmp/123
    修改权限:chmod 1777 /tmp/123
    创建账号:useradd user1; useradd user2; useradd user3
    创建密码:passwd user1; passwd user2; passwd user3

    8. 使用vsftpd软件搭建一个ftp服务器,要求任何人都可以登录(匿名登录),并且匿名账户可以读、写。
    参考配置: cat /etc/vsftpd/vsftpd.conf
    anonymous_enable=yes
    local_enable=yes
    write_enable=yes
    local_umask=022
    anon_umask=022
    anon_other_write_enable=yes
    anon_world_readable_only=no
    anon_upload_enable=yes
    anon_mkdir_write_enable=yes
    dirmessage_enable=yes
    xferlog_enable=yes
    connect_from_port_20=yes
    xferlog_std_format=yes
    chroot_local_user=yes
    listen=yes
    pam_service_name=vsftpd
    userlist_enable=yes
    tcp_wrappers=yes
    还需配置: chmod 777 /var/ftp/pub

  • 相关阅读:
    Serilog 动态添加自定义属性
    C# 序列化与反序列化
    幂等设计
    服务无状态
    vue 显示 mysql 数据库表 Demo
    C# 调用 linux 函数 —— Linux 头文件目录位置
    创建可以在 Zynq 上运行的动态库
    C# 获取所在函数名
    Linux 关闭终端不结束进程
    C# 自动生成版本号
  • 原文地址:https://www.cnblogs.com/-abm/p/7985623.html
Copyright © 2020-2023  润新知