linux - 练习题 - 04
一、linux启动过程:
补充:root用户密码忘了,进到单用户操作;(GRUB菜单)
二、PATH环境变量:
什么是PATH环境变量,他有什么作用?
-
什么时环境变量
-
大写
-
在系统大部分地方都可以使用
-
PATH含义
[root@oldboyedu01 ~]# env
HOSTNAME=oldboyedu01
...
...
常用: LANG PATH
[root@oldboyedu01 ~]# echo $LANG
en_US.UTF-8
[root@oldboyedu01 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
-
linux下面运行命令过程
-
输入命令
-
在PATH里面 路径进行查找
-
找到了就运行
-
找不到 command not found
三、过滤出已知当前目录下oldboy中的所有一级目录
前提:
mkdir /oldboy -p
cd /oldboy
mkdir ext/oldboy test xiaodong xiaofen xingfujie -p
touch jeacen oldboy wodi.gz yingsui.gz
检查:
tree (yum install tree -y)
方法1:
[root@oldboyedu01 oldboy]# tree -dL 1 /oldboy/
/oldboy/
├── data
├── data1
├── ext
├── test
├── xiaodong
├── xiaofen
└── xingfujie
7 directories
方法2:
[root@oldboyedu01 oldboy]# find -maxdepth 1 -type d
.
./test
./xiaodong
./data1
./xiaofen
./ext
./xingfujie
./data
[root@oldboyedu01 oldboy]# find -maxdepth 1 -type d ! -name "."
./test
./xiaodong
./data1
./xiaofen
./ext
./xingfujie
./data
方法3:
[root@oldboyedu01 oldboy]# ls -l |grep "^d"
drwxr-xr-x. 2 root root 4096 Jul 10 01:58 data
drwxr-xr-x. 2 root root 4096 Jul 10 01:58 data1
drwxr-xr-x. 3 root root 4096 Aug 22 21:28 ext
drwxr-xr-x. 2 root root 4096 Jul 10 00:32 test
drwxr-xr-x. 2 root root 4096 Aug 22 21:28 xiaodong
drwxr-xr-x. 2 root root 4096 Aug 22 21:28 xiaofen
drwxr-xr-x. 2 root root 4096 Aug 22 21:28 xingfujie
方法4:
[root@oldboyedu01 oldboy]# ls -l |awk '$2>1'
total 44
drwxr-xr-x. 2 root root 4096 Jul 10 01:58 data
drwxr-xr-x. 2 root root 4096 Jul 10 01:58 data1
drwxr-xr-x. 3 root root 4096 Aug 22 21:28 ext
drwxr-xr-x. 2 root root 4096 Jul 10 00:32 test
drwxr-xr-x. 2 root root 4096 Aug 22 21:28 xiaodong
drwxr-xr-x. 2 root root 4096 Aug 22 21:28 xiaofen
drwxr-xr-x. 2 root root 4096 Aug 22 21:28 xingfujie
方法5:
[root@oldboyedu01 oldboy]# ls -F |grep '/'
data/
data1/
ext/
test/
xiaodong/
xiaofen/
xingfujie/
四、快速回到上一次的所在位置/目录 (cd -)
[root@oldboyedu01 tmp]# cd -
/oldboy
[root@oldboyedu01 oldboy]# cd -
/tmp
五、一个目录中有很多文件(ls查看时好多屏),想最快速度查看到最近更新的文件
[root@oldboyedu01 etc]# ls -lrt # 逆序查询最近修改的文件
...
六、保留最近7天访问日志
已知 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" # 设置系统的时间
方法一:find -type f -name "*.log" -mtime +7 |xargs ls -l
[root@oldboyedu01 logs]# ll
total 0
-rw-r--r--. 1 root root 0 May 1 00:00 access_www_2017-05-01.log
-rw-r--r--. 1 root root 0 May 2 00:00 access_www_2017-05-02.log
-rw-r--r--. 1 root root 0 May 3 00:00 access_www_2017-05-03.log
-rw-r--r--. 1 root root 0 May 4 00:00 access_www_2017-05-04.log
-rw-r--r--. 1 root root 0 May 5 00:00 access_www_2017-05-05.log
-rw-r--r--. 1 root root 0 May 6 00:00 access_www_2017-05-06.log
-rw-r--r--. 1 root root 0 May 7 00:00 access_www_2017-05-07.log
-rw-r--r--. 1 root root 0 May 8 00:00 access_www_2017-05-08.log
-rw-r--r--. 1 root root 0 May 9 00:00 access_www_2017-05-09.log
-rw-r--r--. 1 root root 0 May 10 00:00 access_www_2017-05-10.log
-rw-r--r--. 1 root root 0 May 11 00:00 access_www_2017-05-11.log
-rw-r--r--. 1 root root 0 May 12 00:00 access_www_2017-05-12.log
-rw-r--r--. 1 root root 0 May 13 00:00 access_www_2017-05-13.log
-rw-r--r--. 1 root root 0 May 14 00:00 access_www_2017-05-14.log
-rw-r--r--. 1 root root 0 May 15 00:00 access_www_2017-05-15.log
-rw-r--r--. 1 root root 0 May 16 00:00 access_www_2017-05-16.log
-rw-r--r--. 1 root root 0 May 17 00:00 access_www_2017-05-17.log
-rw-r--r--. 1 root root 0 May 18 00:00 access_www_2017-05-18.log
-rw-r--r--. 1 root root 0 May 19 00:00 access_www_2017-05-19.log
-rw-r--r--. 1 root root 0 May 20 00:00 access_www_2017-05-20.log
[root@oldboyedu01 logs]# find -type f -name "*.log" -mtime 7 # 前第7天的
./access_www_2017-05-13.log
[root@oldboyedu01 logs]# find -type f -name "*.log" -mtime +7 # 7天之前的文件
./access_www_2017-05-07.log
./access_www_2017-05-06.log
./access_www_2017-05-05.log
./access_www_2017-05-08.log
./access_www_2017-05-02.log
./access_www_2017-05-09.log
./access_www_2017-05-10.log
./access_www_2017-05-01.log
./access_www_2017-05-11.log
./access_www_2017-05-04.log
./access_www_2017-05-12.log
./access_www_2017-05-03.log
[root@oldboyedu01 logs]# find -type f -name "*.log" -mtime +7 |xargs ls -l
-rw-r--r--. 1 root root 0 May 1 00:00 ./access_www_2017-05-01.log
-rw-r--r--. 1 root root 0 May 2 00:00 ./access_www_2017-05-02.log
-rw-r--r--. 1 root root 0 May 3 00:00 ./access_www_2017-05-03.log
-rw-r--r--. 1 root root 0 May 4 00:00 ./access_www_2017-05-04.log
-rw-r--r--. 1 root root 0 May 5 00:00 ./access_www_2017-05-05.log
-rw-r--r--. 1 root root 0 May 6 00:00 ./access_www_2017-05-06.log
-rw-r--r--. 1 root root 0 May 7 00:00 ./access_www_2017-05-07.log
-rw-r--r--. 1 root root 0 May 8 00:00 ./access_www_2017-05-08.log
-rw-r--r--. 1 root root 0 May 9 00:00 ./access_www_2017-05-09.log
-rw-r--r--. 1 root root 0 May 10 00:00 ./access_www_2017-05-10.log
-rw-r--r--. 1 root root 0 May 11 00:00 ./access_www_2017-05-11.log
-rw-r--r--. 1 root root 0 May 12 00:00 ./access_www_2017-05-12.log
方法二:ls -l $(find -type f -name "*.log" -mtime +7)
[root@oldboyedu01 logs]# ls -l $(find -type f -name "*.log" -mtime +7)
-rw-r--r--. 1 root root 0 May 1 00:00 ./access_www_2017-05-01.log
-rw-r--r--. 1 root root 0 May 2 00:00 ./access_www_2017-05-02.log
-rw-r--r--. 1 root root 0 May 3 00:00 ./access_www_2017-05-03.log
-rw-r--r--. 1 root root 0 May 4 00:00 ./access_www_2017-05-04.log
-rw-r--r--. 1 root root 0 May 5 00:00 ./access_www_2017-05-05.log
-rw-r--r--. 1 root root 0 May 6 00:00 ./access_www_2017-05-06.log
-rw-r--r--. 1 root root 0 May 7 00:00 ./access_www_2017-05-07.log
-rw-r--r--. 1 root root 0 May 8 00:00 ./access_www_2017-05-08.log
-rw-r--r--. 1 root root 0 May 9 00:00 ./access_www_2017-05-09.log
-rw-r--r--. 1 root root 0 May 10 00:00 ./access_www_2017-05-10.log
-rw-r--r--. 1 root root 0 May 11 00:00 ./access_www_2017-05-11.log
-rw-r--r--. 1 root root 0 May 12 00:00 ./access_www_2017-05-12.log
方法三:find -type f -name "*.log" -mtime +7 -exec ls -l {} \;
[root@oldboyedu01 logs]# find -type f -name "*.log" -mtime +7 -exec ls -l {} \;
-rw-r--r--. 1 root root 0 May 7 00:00 ./access_www_2017-05-07.log
-rw-r--r--. 1 root root 0 May 6 00:00 ./access_www_2017-05-06.log
-rw-r--r--. 1 root root 0 May 5 00:00 ./access_www_2017-05-05.log
-rw-r--r--. 1 root root 0 May 8 00:00 ./access_www_2017-05-08.log
-rw-r--r--. 1 root root 0 May 2 00:00 ./access_www_2017-05-02.log
-rw-r--r--. 1 root root 0 May 9 00:00 ./access_www_2017-05-09.log
-rw-r--r--. 1 root root 0 May 10 00:00 ./access_www_2017-05-10.log
-rw-r--r--. 1 root root 0 May 1 00:00 ./access_www_2017-05-01.log
-rw-r--r--. 1 root root 0 May 11 00:00 ./access_www_2017-05-11.log
-rw-r--r--. 1 root root 0 May 4 00:00 ./access_www_2017-05-04.log
-rw-r--r--. 1 root root 0 May 12 00:00 ./access_www_2017-05-12.log
-rw-r--r--. 1 root root 0 May 3 00:00 ./access_www_2017-05-03.log
七、调试系统服务时,希望能实时查看系统日志/var/log/messages的更新,如何做?
[root@oldboyedu01 ~]# echo lilaoshi >>/var/log/secure
... 实时更新
[root@oldboyedu01 ~]# tail -f /var/log/secure
... 用户登录 注销 都可查看到
tail -f # 显示文件的实时更新
tailf == tail -f
八、打印配置文件nginx.conf内容的行号及内容,该如何做?
前提:
root@oldboyedu01 oldboy]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
[root@oldboyedu01 oldboy]# echo stu{01..10}|xargs -n1
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
[root@oldboyedu01 oldboy]# echo stu{01..10}|xargs -n1 >nginx.conf
[root@oldboyedu01 oldboy]# cat nginx.conf
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
方法一:cat
[root@oldboyedu01 oldboy]# cat nginx.conf
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
[root@oldboyedu01 oldboy]# cat -n nginx.conf
1 stu01
2 stu02
3 stu03
4 stu04
5 stu05
6 stu06
7 stu07
8 stu08
9 stu09
10 stu10
方法二:vim :set nu
vim ...
:set nu # 显示行号
:set nonu #取消显示行号
[root@oldboyedu01 oldboy]# vim nginx.conf
1 stu01
2 stu02
3 stu03
4 stu04
5 stu05
6 stu06
7 stu07
8 stu08
9 stu09
10 stu10
~
~
~
:set nu
[root@oldboyedu01 oldboy]# vim nginx.conf
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
~
~
:set nonu
方法三:grep
[root@oldboyedu01 oldboy]# grep -n "stu" nginx.conf
1:stu01
2:stu02
3:stu03
4:stu04
5:stu05
6:stu06
7:stu07
8:stu08
9:stu09
10:stu10
[root@oldboyedu01 oldboy]# grep -n "." nginx.conf
1:stu01
2:stu02
3:stu03
4:stu04
5:stu05
6:stu06
7:stu07
8:stu08
9:stu09
10:stu10
方法四:awk
[root@oldboyedu01 oldboy]# awk '{print NR,$0}' nginx.conf
1 stu01
2 stu02
3 stu03
4 stu04
5 stu05
6 stu06
7 stu07
8 stu08
9 stu09
10 stu10
方法五:sed
[root@oldboyedu01 oldboy]# sed '=' nginx.conf |xargs -n2
1 stu01
2 stu02
3 stu03
4 stu04
5 stu05
6 stu06
7 stu07
8 stu08
9 stu09
10 stu10
小结:
-
cat -n ; vi/vim 显示行号
-
grep -n
-
awk NR $0 print
九、linux系统运行级别一般为0-6,请分别写出每个级别的含义
0-6什么含义
[root@oldboyedu01 logs]# cat /etc/inittab
# Default runlevel. The runlevels used are:
# 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)
#
id:3:initdefault:
如何修改运行级别 临时 永久
init 3
/etc/inittab
如何查看运行级别
runlevel
十、装完系统后,希望让网络文件共享服务NFS(iptables)防火墙,仅在3级别上开机自启动,该如何做?
chkconfig --level 3 iptables on
[root@oldboyedu01 logs]# chkconfig iptables on
[root@oldboyedu01 logs]# chkconfig |grep ipt
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@oldboyedu01 logs]# chkconfig iptables off
[root@oldboyedu01 logs]# chkconfig |grep ipt
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@oldboyedu01 logs]# chkconfig --level 3 iptables on
[root@oldboyedu01 logs]# chkconfig |grep ipt
iptables 0:off 1:off 2:off 3:on 4:off 5:off 6:off
十一、linux系统中查看中文,但是乱码了,请问如何解决乱码问题?
原因:
linux使用的字符集与远程连接工具的不同
解决:
方法一:推荐-修改xshell字符集
方法二:修改系统的字符集
1. 命令行:
export LANG=en_US.UTF-8
2. 写入配置文件
[root@oldboyedu01 logs]# cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
cp /etc/sysconfig/i18n /etc/sysconfig/i18n.bak
echo 'LANG=en_US.UTF-8' >/etc/sysconfig/i18
3.生效
source /etc/sysconfig/i18n
十二、tar 命令的使用--->压缩,解压 压缩包 。。。 /etc/目录为linux系统的默认配置文件及服务启动命令的目录
a.请用tar打包/etc整个目录(打包及压缩)
b.请把a点命令的压缩包,解压到/tmp指定目录下(最好只用tar命令实现)
c.请用tar打包/etc整个目录(打包及压缩,但需要排除/etc/services文件)
tar 创建 查看 解压 压缩包
z --- 通过gzip工具进行压缩
c --- 表示create创建压缩包
v --- 表示verbose 显示执行过程
f --- 表示file 接上压缩包存放的位置
t --- 表示list 显示压缩包的内容
x --- 从tar包把文件提取出来
-C -- 解压到指定目录
--exclude= 排除指定文件
tar zcvf /tmp/etc.tar.gz /etc/
创建压缩包 压缩包存放的位置 压缩哪个文件/目录 ...
创建: tar zcf
[root@oldboyedu01 logs]# tar zcvf /tmp/etc.tar.gz /etc/ # zcvf === zcf
。。。
[root@oldboyedu01 tmp]# ll
total 9548
-rw-r--r--. 1 root root 9773122 Aug 24 00:57 etc.tar.gz
查看:tar tf
[root@oldboyedu01 tmp]# tar ztf /tmp/etc.tar.gz # ztf === tf
。。。
解压:tar xf
[root@oldboyedu01 tmp]# tar zxvf etc.tar.gz # zxvf === xf
。。。
解压到指定目录:tar xf etc.tar.gz -C /opt
[root@oldboyedu01 tmp]# tar xf etc.tar.gz -C /opt
。。。
打包文件,排除某个文件:tar zcf /tmp/etc-paichu.tar.gz /etc/ --exclude=/etc/services
[root@oldboyedu01 tmp]# tar zcf /tmp/etc-paichu.tar.gz /etc/ --exclude=/etc/services
。。。
验证:
[root@oldboyedu01 tmp]# tar tf etc.tar.gz |grep services
etc/services
etc/init/readahead-disable-services.conf
[root@oldboyedu01 tmp]# tar tf etc-paichu.tar.gz |grep services
etc/init/readahead-disable-services.conf
小结:
-
tar 打包压缩
-
创建压缩包 查看压缩包 解压
-
解压到指定的文件夹
-
创建压缩包排除
十三、已知如下命令及结果:
mkdir -p /oldboy
echo "I am oldboy,my qq is 31333741">/oldboy/oldboy.txt
a. 现在需要从文件中过滤出“oldboy”和“31333741”字符串,请给出命令
b.如果需要从文件中过滤出“oldboy, 31333741”字符串,请给出命令
[root@oldboyedu01 oldboy]# ll -lrt # 逆序查看最近修改的文件
...
a. 现在需要从文件中过滤出“oldboy”和“31333741”字符串,请给出命令
前提:
[root@oldboyedu01 oldboy]# cat oldboy.txt
I am oldboy, my qq is 31333741
方法一:sed-sed
[root@oldboyedu01 oldboy]# sed 's#I am##g' oldboy.txt | sed "s#, my qq is##g"
oldboy 31333741
方法二:sed+awk / tr+awk
[root@oldboyedu01 oldboy]# sed 's#,# #g' oldboy.txt |awk '{print $3,$7}'
oldboy 31333741
[root@oldboyedu01 oldboy]# tr "," " " <oldboy.txt |awk '{print $3,$7}'
oldboy 31333741
方法三:awk指定多个分隔符
-F "[, ]" 表示以逗号或者空格作为菜单 分隔符
[root@oldboyedu01 oldboy]# cat oldboy.txt
I am oldboy, my qq is 31333741
[root@oldboyedu01 oldboy]# awk -F "," '{print $1}' oldboy.txt
I am oldboy
[root@oldboyedu01 oldboy]# awk -F "[, ]" '{print $3,$8}' oldboy.txt
oldboy 31333741
b.如果需要从文件中过滤出“oldboy, 31333741”字符串,请给出命令
方法:awk
[root@oldboyedu01 oldboy]# awk -F "[, ]" '{print $3","$8}' oldboy.txt
oldboy,31333741
小结:
-
tr命令
-
awk指定分隔符 指定多个分隔符
十四、如何查看/etc/services文件有多少行,查看进程是否在运行
[root@oldboyedu01 oldboy]# wc -l /etc/services
10774 /etc/services
屌丝去洗浴中心之路
-
查看22端口是否开启 telnet
-
sshd远程连接是否在运行
ps -ef (系统中正在运行的进行)
[root@oldboyedu01 ~]# ps -ef |grep "sshd"
。。。
[root@oldboyedu01 ~]# ps -ef |grep "/sshd"
root 1553 1 0 Aug23 ? 00:00:00 /usr/sbin/sshd
root 3171 3105 0 04:42 pts/0 00:00:00 grep /ssh
[root@oldboyedu01 ~]# ps -ef |grep "/sshd"|wc -l # 统计出现的次数
2
十五、过滤出/etc/services 文件包含3306或1521两数字所在的行的内容
方法:egrep == grep -E
[root@oldboyedu01 ~]# 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
十六、命令行及shell中不加引号,加单引号和双引号的区别
单引号 所见即所得
双引号 里面的特殊符号会被解析
[root@oldboyedu01 ~]# echo '$LANG $(hostname) `pwd`'
$LANG $(hostname) `pwd`
[root@oldboyedu01 ~]# echo "$LANG $(hostname) `pwd`"
en_US.UTF-8 oldboyedu01 /root