1.Linux 系统的启动过程
1.开机自检 BIOS
2.MBR引导
3.GRUB菜单
4.加载内核
5.运行 init 进程
6.从 /etc/inittab 读取运行级别
7.根据 /etc/rc.sysinit 初始化系统(设置主机名 设置 ip
8.根据运行级别启动对应的软件(开机自启动软件)
9.运行 mingetty 显示登录界面
2.PATH 环境变量
查看环境变量
[root@oldboyedu ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
修改环境变量
[root@oldboyedu ~]# echo $LANG # 查看en_US.UTF-8[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命令
# 创建目录[root@oldboyedu oldboy]# mkdir /oldboy -p[root@oldboyedu oldboy]# cd /oldboy/[root@oldboyedu oldboy]# mkdir ext/oldboy test xiaofan xingfujie -p[root@oldboyedu oldboy]# touch jeacen oldboy wodi.gz yingsui.gz[root@oldboyedu oldboy]# tree# 查看命令是否安装[root@oldboyedu oldboy]# rpm -qa |grep treetree-1.5.3-3.el6.x86_64[root@oldboyedu oldboy]# rpm -qa treetree-1.5.3-3.el6.x86_64# 查看软件包里面的内容[root@oldboyedu oldboy]# rpm -ql tree/usr/bin/tree/usr/share/doc/tree-1.5.3/usr/share/doc/tree-1.5.3/LICENSE/usr/share/doc/tree-1.5.3/README/usr/share/man/man1/tree.1.gz
解答:
方法一:[root@oldboyedu oldboy]# tree -d /oldboy/ # 只显示目录[root@oldboyedu oldboy]# tree -dL 1 /oldboy/ # 最多只显示一层方法二:[root@oldboyedu oldboy]# find -type d # 只查看当前文件夹下的目录[root@oldboyedu oldboy]# find -maxdepth 1 -type d # 只显示一层../xingfujie./test[root@oldboyedu oldboy]# find -maxdepth 1 -type d ! -name '.' # 只显示一层而且不带点./xingfujie./test方法三:[root@oldboyedu oldboy]# ls -l|grep '^d' # d开头的都是目录,过滤出来方法四:了解[root@oldboyedu oldboy]# ls -l|awk '$2>1' # $2>1:第二列的都大于1方法五:了解[root@oldboyedu oldboy]# ls -F # 会给目录加斜线[root@oldboyedu oldboy]# ls -F |grep '/' # 过滤出带斜线的
第 2 题 :如何快速的回到 上一次所在的位置
cd命令:https://www.yuque.com/menglac/uc3wzt/lgxrhp?inner=l4BX2
练习:
# 进入到 /etc/sysconfig/network scripts/ 目录,并查看你所在位置# 进入到上一级目录,并查看你所在位置# 进入到 /root 目录下面,并显示你所在位置# 快速返回到 你上一次的位置# 回到老家[root@oldboyedu ~]# cd /etc/sysconfig/network-scripts/[root@oldboyedu network-scripts]# cd ..[root@oldboyedu sysconfig]# cd[root@oldboyedu ~]# cd -/etc/sysconfig
第 3 题 :一个目录中有很多文件( ls 查 看时好多屏),想最快速度查看到最近更新的文件,如何看?
ls显示的时候按照时间顺序 最近的在最下面 按时间顺序逆序 倒叙
ls命令:https://www.yuque.com/menglac/uc3wzt/lgxrhp?inner=S33tN
[root@oldboyedu etc]# ls -lrt
第 4 题 已知 apache/nginx 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张,现在要求只能保留最近 7 天访问日志!请问如何解决? 请给出解决办法或配置或处理命令。(提示:可以从 apache 服务配置上着手,也可以从生成出来的日志上着手。)
# 环境准备mkdir -p /app/logscd /app/logsfor time in {01..20};do date -s "201705$time"; touch access_www_$(date +%F).log ;done date -s "20170520"方法一:[root@oldboyedu ~]# find -type f -name "*.log" -mtime +7|xargs ls -l方法二:[root@oldboyedu ~]# ls -l $(find -type f -name "*.log" -mtime +7)
第 5 题 :调试系统服务时,希望能实时查看系统日志 /var/log/messages 的更新 如何做?
tail -f /var/log/secure
第 6 题 :打印配置文件nginx.conf内容的行号及内容,如何做?
环境准备
[root@oldboyedu oldboy]# echo {1..5}1 2 3 4 5[root@oldboyedu oldboy]# echo {01..5}01 02 03 04 05[root@oldboyedu oldboy]# echo stu{01..10}stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10[root@oldboyedu oldboy]# echo stu{01..10}|xargs -n1stu01stu02...stu10[root@oldboyedu oldboy]# echo stu{01..10} |xargs -n1 > nginx.conf # 将上述写入文件nginx.conf中[root@oldboyedu oldboy]# cat nginx.conf 查看nginx.conf
答案:
# 方法一:cat[root@oldboyedu oldboy]# cat -n nginx.conf1 stu012 stu02...10 stu10# 方法二:vi/vim[root@oldboyedu oldboy]# vim nginx.conf:set nu # 显示行号。:set nonu # 不显示行号。# 方法三:grep[root@oldboyedu oldboy]# grep -n 'stu' nginx.conf #识别stu开头的[root@oldboyedu oldboy]# grep -n '.' nginx.conf # 文件内容都可以(正则)# 方法四:awk[root@oldboyedu oldboy]# awk '{print NR,$0}' nginx.conf # 显示(NR)行号及内容($0为一整行)# 方法五:sed[root@oldboyedu oldboy]# sed '=' nginx.conf |xargs -n2 # "="在sed命令中表示行号
第 7 题 :Linux系统运行级别一般为0-6,请分别写出每个级别的含义。
# 查看运行级别[root@oldboyedu ~]# cat /etc/inittab# 0 - halt (Do NOT set initdefault to this)# 1 - Single user mode # 单用户模式。# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)# 3 - Full multiuser mode # 多用户模式。# 4 - unused# 5 - X11 # 图形化界面。# 6 - reboot (Do NOT set initdefault to this)# 如何修改运行级别?init 3 # 临时/etc/inittab # 永久# 如何查看当前运行级别?[root@oldboyedu ~]# runlevelN 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
                    