1.Linux 系统的启动过程

1.开机自检 BIOS
2.MBR引导
3.GRUB菜单
4.加载内核
5.运行 init 进程
6.从 /etc/inittab 读取运行级别
7.根据 /etc/rc.sysinit 初始化系统(设置主机名 设置 ip
8.根据运行级别启动对应的软件(开机自启动软件)
9.运行 mingetty 显示登录界面
图片.png

2.PATH 环境变量

  • 查看环境变量

    1. [root@oldboyedu ~]# echo $PATH
    2. /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  • 修改环境变量

    1. [root@oldboyedu ~]# echo $LANG # 查看
    2. en_US.UTF-8
    3. [root@oldboyedu ~]# export LANG=en_US.UTF-8 #修改
  • PATH作用

1.环境变量
2.存放的是命令的位置 目录

  • 执行一个命令的过程?

1.ls或mkdir命令
2.系统会去 PATH 里面的位置查找命令 是否存在
3.存在就运行
4.不存在就报错: command not found 或 no such file or dir

3.练习题

第 1 题:如何过滤出已知当前目录下oldboy中的所有一级目录(提示:不包含oldboy目录下面目录的子目录及隐藏目录,即只能是第一级目录)
问题准备:tree命令

  1. # 创建目录
  2. [root@oldboyedu oldboy]# mkdir /oldboy -p
  3. [root@oldboyedu oldboy]# cd /oldboy/
  4. [root@oldboyedu oldboy]# mkdir ext/oldboy test xiaofan xingfujie -p
  5. [root@oldboyedu oldboy]# touch jeacen oldboy wodi.gz yingsui.gz
  6. [root@oldboyedu oldboy]# tree
  7. # 查看命令是否安装
  8. [root@oldboyedu oldboy]# rpm -qa |grep tree
  9. tree-1.5.3-3.el6.x86_64
  10. [root@oldboyedu oldboy]# rpm -qa tree
  11. tree-1.5.3-3.el6.x86_64
  12. # 查看软件包里面的内容
  13. [root@oldboyedu oldboy]# rpm -ql tree
  14. /usr/bin/tree
  15. /usr/share/doc/tree-1.5.3
  16. /usr/share/doc/tree-1.5.3/LICENSE
  17. /usr/share/doc/tree-1.5.3/README
  18. /usr/share/man/man1/tree.1.gz

解答:

  1. 方法一:
  2. [root@oldboyedu oldboy]# tree -d /oldboy/ # 只显示目录
  3. [root@oldboyedu oldboy]# tree -dL 1 /oldboy/ # 最多只显示一层
  4. 方法二:
  5. [root@oldboyedu oldboy]# find -type d # 只查看当前文件夹下的目录
  6. [root@oldboyedu oldboy]# find -maxdepth 1 -type d # 只显示一层
  7. .
  8. ./xingfujie
  9. ./test
  10. [root@oldboyedu oldboy]# find -maxdepth 1 -type d ! -name '.' # 只显示一层而且不带点
  11. ./xingfujie
  12. ./test
  13. 方法三:
  14. [root@oldboyedu oldboy]# ls -l|grep '^d' # d开头的都是目录,过滤出来
  15. 方法四:了解
  16. [root@oldboyedu oldboy]# ls -l|awk '$2>1' # $2>1:第二列的都大于1
  17. 方法五:了解
  18. [root@oldboyedu oldboy]# ls -F # 会给目录加斜线
  19. [root@oldboyedu oldboy]# ls -F |grep '/' # 过滤出带斜线的

第 2 题 :如何快速的回到 上一次所在的位置
cd命令:https://www.yuque.com/menglac/uc3wzt/lgxrhp?inner=l4BX2
练习:

  1. # 进入到 /etc/sysconfig/network scripts/ 目录,并查看你所在位置
  2. # 进入到上一级目录,并查看你所在位置
  3. # 进入到 /root 目录下面,并显示你所在位置
  4. # 快速返回到 你上一次的位置
  5. # 回到老家
  6. [root@oldboyedu ~]# cd /etc/sysconfig/network-scripts/
  7. [root@oldboyedu network-scripts]# cd ..
  8. [root@oldboyedu sysconfig]# cd
  9. [root@oldboyedu ~]# cd -
  10. /etc/sysconfig

第 3 题 :一个目录中有很多文件( ls 查 看时好多屏),想最快速度查看到最近更新的文件,如何看?
ls显示的时候按照时间顺序 最近的在最下面 按时间顺序逆序 倒叙
ls命令:https://www.yuque.com/menglac/uc3wzt/lgxrhp?inner=S33tN

  1. [root@oldboyedu etc]# ls -lrt

第 4 题 已知 apache/nginx 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张,现在要求只能保留最近 7 天访问日志!请问如何解决? 请给出解决办法或配置或处理命令。(提示:可以从 apache 服务配置上着手,也可以从生成出来的日志上着手。)

  1. # 环境准备
  2. mkdir -p /app/logs
  3. cd /app/logs
  4. for time in {01..20};do date -s "201705$time"; touch access_www_$(date +%F).log ;
  5. done date -s "20170520"
  6. 方法一:
  7. [root@oldboyedu ~]# find -type f -name "*.log" -mtime +7|xargs ls -l
  8. 方法二:
  9. [root@oldboyedu ~]# ls -l $(find -type f -name "*.log" -mtime +7)

第 5 题 :调试系统服务时,希望能实时查看系统日志 /var/log/messages 的更新 如何做?

  1. tail -f /var/log/secure

第 6 题 :打印配置文件nginx.conf内容的行号及内容,如何做?
环境准备

  1. [root@oldboyedu oldboy]# echo {1..5}
  2. 1 2 3 4 5
  3. [root@oldboyedu oldboy]# echo {01..5}
  4. 01 02 03 04 05
  5. [root@oldboyedu oldboy]# echo stu{01..10}
  6. stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
  7. [root@oldboyedu oldboy]# echo stu{01..10}|xargs -n1
  8. stu01
  9. stu02
  10. ...
  11. stu10
  12. [root@oldboyedu oldboy]# echo stu{01..10} |xargs -n1 > nginx.conf # 将上述写入文件nginx.conf中
  13. [root@oldboyedu oldboy]# cat nginx.conf 查看nginx.conf

答案:

  1. # 方法一:cat
  2. [root@oldboyedu oldboy]# cat -n nginx.conf
  3. 1 stu01
  4. 2 stu02
  5. ...
  6. 10 stu10
  7. # 方法二:vi/vim
  8. [root@oldboyedu oldboy]# vim nginx.conf
  9. :set nu # 显示行号。
  10. :set nonu # 不显示行号。
  11. # 方法三:grep
  12. [root@oldboyedu oldboy]# grep -n 'stu' nginx.conf #识别stu开头的
  13. [root@oldboyedu oldboy]# grep -n '.' nginx.conf # 文件内容都可以(正则)
  14. # 方法四:awk
  15. [root@oldboyedu oldboy]# awk '{print NR,$0}' nginx.conf # 显示(NR)行号及内容($0为一整行)
  16. # 方法五:sed
  17. [root@oldboyedu oldboy]# sed '=' nginx.conf |xargs -n2 # "="在sed命令中表示行号

第 7 题 :Linux系统运行级别一般为0-6,请分别写出每个级别的含义。

  1. # 查看运行级别
  2. [root@oldboyedu ~]# cat /etc/inittab
  3. # 0 - halt (Do NOT set initdefault to this)
  4. # 1 - Single user mode # 单用户模式。
  5. # 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
  6. # 3 - Full multiuser mode # 多用户模式。
  7. # 4 - unused
  8. # 5 - X11 # 图形化界面。
  9. # 6 - reboot (Do NOT set initdefault to this)
  10. # 如何修改运行级别?
  11. init 3 # 临时
  12. /etc/inittab # 永久
  13. # 如何查看当前运行级别?
  14. [root@oldboyedu ~]# runlevel
  15. N 3

第 8 题 :装完系统后,希望让网络共享服务NFS(iptables),仅在3级别上开机自启动,如何做?
chkconfig:管理开机自启动的文件

# chkconfig iptables on
# chkconfig iptables off

chkconfig --level 3 iptables on

第 9 题 :Linux系统中查看中文,但是乱码了,请问如何解决乱码问题?
原因:Linux使用的字符集与远程连接工具不同。
解决:

  • 方法一:修改xshell字符集。
  • 方法二:修改系统的字符集。
    # 1)命令行
    export LANG=en_US.UTF-8
    # 2)写入配置文件
    [root@oldboyedu ~]# cp /etc/sysconfig/i18n /etc/sysconfig/i18n.bak        # 先备份
    [root@oldboyedu ~]# echo 'LANG=en_US.UTF-8' > /etc/sysconfig/i18n
    # 3)生效
    [root@oldboyedu ~]# source /etc/sysconfig/i18n
    

第 10 题 :/etc/目录为Linux系统的默认的配置文件及服务启动命令的目录。
a.请用tar打包/etc整个目录(打包及压缩)
b.请把a命令下的压缩包。解压到/tmp指定目录中(最好只用tar命令实现)
c.请用tar打包/etc整个目录(打包及压缩,但需要排除/etc/services文件)
tar:创建查看解压压缩包

a:请用tar打包/etc整个目录(打包及压缩)
[root@oldboyedu ~]# tar    zcvf             /tmp/etc.tar.gz             /etc/        
#                       创建压缩包   把etc.tar.gz这个压缩包放到/tmp下    压缩/etc/
[root@oldboyedu ~]# ls -l /tmp/                        
[root@oldboyedu ~]# tar ztf /tmp/etc.tar.gz     # 显示压缩包的内容

# 解压
[root@oldboyedu ~]# cd /tmp/                    # 进入对应文件夹。
[root@oldboyedu tmp]# tar zxf etc.tar.gz         # 解压压缩包

简记:创建压缩包zcf,查看tf,解压xf

tar命令打包压缩的时候,会自动把绝对路径变成相对路径,为了安全。

b:请把a命令下的压缩包。解压到/tmp指定目录中(最好只用tar命令实现)
[root@oldboyedu tmp]# tar xf etc.tar.gz -C /opt/        # 把etc.tar.gz压缩包解压到/opt/

c:请用tar打包/etc整个目录(打包及压缩,但需要排除/etc/services文件)
[root@oldboyedu tmp]# tar zcf /tmp/etc-paichu.tar.gz /etc/ --exclude=/etc/services 
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
[root@oldboyedu tmp]# tar tf /tmp/etc        # 查看有哪些压缩包
etc-paichu.tar.gz  etc.tar.gz         
[root@oldboyedu tmp]# tar tf /tmp/etc.tar.gz  |grep services        # 过滤出带services文件的压缩包
etc/init/readahead-disable-services.conf
etc/services
[root@oldboyedu tmp]# tar tf /tmp/etc-paichu.tar.gz  |grep services
etc/init/readahead-disable-services.conf

若想要不带提示,压缩式使用相对路径(去掉文件开头的/),即:

[root@oldboyedu tmp]# tar zcf /tmp/etc-paichu.tar.gz etc/

第 11 题 已知如下命令及结果:

mkdir -p /oldboy
echo "I am oldboy,myqq is 31333741">/oldboy/oldboy.txt

a.现在需要从文件中 过滤出 “oldboy”和 “31333741” 字符串,请给出命令
b.如果需要从文件中过滤出 “oldboy,31333741” 字符串,请再给出命令
解:

a.现在需要从文件中过滤出 “oldboy”和 “31333741” 字符串,请给出命令
方法1-sed
[root@oldboyedu oldboy]# sed 's#I am ##g' oldboy.txt |sed 's#,myqq is##g'
oldboy 31333741

方法2-sed/tr+awk
[root@oldboyedu oldboy]# awk '{print $3,$5}' oldboy.txt     # 取第三列和第五列。
oldboy,myqq 31333741                                        # 注意,此时逗号在列中。
# 去掉逗号:
[root@oldboyedu oldboy]# sed 's#,# #g' oldboy.txt  |awk '{print $3,$6}'
oldboy 31333741
# 简便方法:
[root@oldboyedu oldboy]# 多走  |awk '{print $3,$6}'
oldboy 31333741

方法3-awk                   #-F "[, ]"   指定逗号和空格为分隔符
[root@oldboyedu oldboy]# awk -F "[, ]" '{print $3,$6}' oldboy.txt 
oldboy 31333741

b:如果需要从文件中过滤出 “oldboy,31333741” 字符串,请再给出命令

[root@oldboyedu oldboy]# awk -F "[, ]" '{print $3","$6}' oldboy.txt 
oldboy,31333741
# '{print $3","$6}'   中若加双引号,双引号中的内容可原封不动的输出

第 12 题 如何查看 /etc/services 文件的有多少行?

[root@oldboyedu ~]# wc -l /etc/services 
10774 /etc/services

1)查看 22 端口是否开启 telnet
2)sshd远程连接进程是否在运行

[root@oldboyedu ~]# ps -ef |grep "sshd"
root       1428      1  0 Apr10 ?        00:00:00 /usr/sbin/sshd
root      27030   1428  0 12:43 ?        00:00:00 sshd: root@pts/3 
root      27131   1428  0 13:32 ?        00:00:00 sshd: root@pts/1 
root      28729   1428  0 15:21 ?        00:00:00 sshd: root@pts/0 
root      28752  28733  0 15:23 pts/0    00:00:00 grep sshd

[root@oldboyedu ~]# ps -ef |grep "/sshd"
root       1428      1  0 Apr10 ?        00:00:00 /usr/sbin/sshd
root      28757  28733  0 15:26 pts/0    00:00:00 grep /sshd

[root@oldboyedu ~]# ps -ef |grep "/sshd"|wc -l
2

第 13 题 过滤出 /etc/services 文件包含 3306 或 1521 两数字所在的行的内容。

[root@oldboyedu ~]# egrep "3306|1521" /etc/services 
mysql           3306/tcp                        # MySQL
mysql           3306/udp                        # MySQL
ncube-lm        1521/tcp                # nCube License Manager
ncube-lm        1521/udp                # nCube License Manager

[root@oldboyedu ~]#egrep === grep -E 支持高级正则(公鸡里的战斗机)

第 14 题 命令行及 shell 中加单引号和加双引号的区别小结
单引号 所见即所得 吃啥吐啥

[root@oldboyedu01-nb oldboy]# echo 'hello lls $LANG $(hostname) `pwd`'
hello lls $LANG $(hostname) `pwd`

双引号 里面的特殊符号会被 解析

[root@oldboyedu01nb oldboy]# echo "hello lls $LANG $(hostname) `pwd`"
hello lls en_US.UTF-8 oldboyedu01 nb /oldboy