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 tree
tree-1.5.3-3.el6.x86_64
[root@oldboyedu oldboy]# rpm -qa tree
tree-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/logs
cd /app/logs
for 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 -n1
stu01
stu02
...
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.conf
1 stu01
2 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 ~]# runlevel
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