12.19&12.20

基础命令练习二

第1章 Linux开机启动过程

linux启动过程

1.开启开关

2.bios开机自检

3.mbr引导

4.grub菜单 选择内核

5.加载内核

6.启动init进程  init进程是linux启动的时候运行的第一个进程

7./etc/inittab读取运行级别

8.根据/etc/rc.d/rc.sysinit 初始化系统 (设置主机名 ip地址)  

9.根据运行级别启动对应的软件(开机自启动软件)

10.运行mingetty 显示登录界面

 

第2章 PATH环境变量

2.1 查看变量

[root@oldboy oldboy]# echo $PATH

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

 

2.2 修改变量

[root@oldboy oldboy]# export.UTF-8

 

2.3 PATH作用

1. 环境变量

2. 存放的是命令的位置/目录

 

2.4 执行一个命令的过程

1. lsmkdir

2. 系统会去PATH里面的位置查找命令  是否存在

   存在      运行

   不存在    报错

 

小结:1.PATH作用

2.Linux下面执行命令简单过程

第3章 笔试题

3.1 如何过滤出已知当前目录下oldboy中的所有一级目录(提示:不包含oldboy目录下面目录的子目录及隐藏目录,即只能是一级目录)?(5种方法)

3.1.1 方法一:tree命令  -d(目录)  -L(层级)

[root@oldboy oldboy]# tree -d -L 1

.                     -d  显示目录名称而非内容

├── ext            -L 层级显示

├── gao

├── test

├── xiaodong

├── xiaofan

└── xingfujie

6 directories

 

3.1.2 方法二:find命令 -maxdepth(最大层次)   

[root@oldboy oldboy]# find -maxdepth 1 -type d

.                

./xingfujie

./xiaodong

./gao

./ext

./xiaofan

./test

[root@oldboy oldboy]# find -maxdepth 1 -type d -name "."

.

[root@oldboy oldboy]# find -maxdepth 1 -type d  ! -name "."

./xingfujie                      排除

./xiaodong        -maxdepth  最大深度,最多几层目录  

./gao

./ext

./xiaofan

./test

 

3.1.3 方法三:grep     ^以什么开头

[root@oldboyedu43-lnb oldboy]# ls -l |grep "^d"
drwxr-xr-x  3 root root 4096 Dec 15 00:26 ext
drwxr-xr-x. 2 root root 4096 Dec 11 21:22 test
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xiaodong
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xiaofan
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xingfujie
(三剑客使用)正则表达式,以....开头的行

3.1.4 方法四:awk    $2>1

[root@oldboyedu43-lnb oldboy]# ls -l |awk '第2列大于1' 
awk: 第2列大于1
[root@oldboyedu43-lnb oldboy]# ls -l |awk '$2>1' 
total 32   蓝色字体表示目录数目=隐藏目录数目+普通目录数目
drwxr-xr-x  3 root root 4096 Dec 15 00:26 ext
drwxr-xr-x. root root 4096 Dec 11 21:22 test
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xiaodong
drwxr-xr-x  root root 4096 Dec 15 00:26 xiaofan
drwxr-xr-x  2 root root 4096 Dec 15 00:26 xingfujie

3.1.5 方法五:ls    -F(做标记)

[root@oldboyedu43-lnb oldboy]# ls -F|grep "/"
ext/           

test/
xiaodong/         F   给不同类型的文件,做上标记

xiaofan/
xingfujie/
[root@oldboyedu43-lnb oldboy]# #-F 给不通类型的文件 加上不通的标记/尾巴 

3.2 假如当前目录是如下命令的结果:

[root@oldboy oldboy]# pwd #==>这是打印当前目录的,最菜的命令了,你该会的。/oldboy。现在因为需要进入到了/tmp 目录下进行操作,执行的命令如下:[root@oldboy oldboy]# cd /tmp[root@oldboy tmp]# pwd /tmp操作完毕后,希望快速返回上一次进入的目录,即/oldboy 目录,该如何做呢?(提示:不能用 cd /oldboy 命令呦)

3.2.1 cd 命令小结

  cd -    快速回上一次所在位置

  cd .     当前目录       复制/移动

  cd ..    进入当前目录的上级目录

  cd ~    进入当前目录的家目录    回老家

cd      进入当前目录的家目录    回老家

 

3.3 一个目录中有很多文件(ls -l 查看时好多屏),想用一条命令最快速度查看到最近更新的文件。如何看?

3.3.1 ls -lrt     逆序按时间显示

 ls   -lrt         

 -r     倒序/逆序显示内容    

 -t     按照文件的修改时间显示   

显示的时候按时间顺序,最新的在最下面  按时间顺序倒序

  

3.3.2  扩展:使文件时间统一格式

[root@oldboyedu43-lnb etc]# ls -l --time-style=long-iso

total 1636

drwxr-xr-x.  3 root root   4096 2017-12-08 12:38 abrt

drwxr-xr-x.  4 root root   4096 2017-12-08 12:41 acpi

-rw-r--r--.  1 root root     46 2017-12-12 07:18 adjtime

-rw-r--r--.  1 root root   1512 2010-01-12 21:28 aliases

-rw-r--r--.  1 root root  12288 2017-12-08 12:49 aliases.db

 

3.4 配置apache时 执行了./configure--prefix=/application/apache2.2.17 来编译apche,在make install 完成后,希望用户访问 apache 路径更简单,需要给/application/apache2.2.17 目录做一个软链接/application/apache,使得内部开发或管理人员通过/application/apache 就可以访问到apache 的安装目录/application/apache2.2.17 下的内容,请你给出实现的命令。(提示:apache为一个 web 服务)

[root@oldboy ~]# mkdir -p /applocation/apache2.2.17

[root@oldboy ~]# ln -s /applocation/apache2.2.17 /applocation/apache

[root@oldboy /]# ls /applocation

 

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

 

步骤:

3.5.1 创建环境

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"

3.5.2 找出/app/logs下面以.log结尾的并且修改时间是7天之前的文件并删除
find /app/logs/ -type f -name "*.log"  -mtime +7

方法一:

find /app/logs/ -type f -name "*.log"  -mtime +7|xargs ls -l

方法二:

ls -l $(find /app/logs/ -type f -name "*.log"  -mtime +7)

 

方法三:

#find /app/logs/ -type f -name "*.log"  -mtime +7  -exec ls -l {}  \;

方法四:(了解)

通过系统软件对系统日志进行切割

3.5.3 补充:修改时间

[root@oldboy oldboy]# date -s "20171111 11:11:11"

Sat Nov 11 11:11:11 CST 2017

[root@oldboy oldboy]# date

Sat Nov 11 11:11:12 CST 2017

 

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

3.6.1  tail命令   -f 实时更新

tail -f /var/log/secure         

-f   显示文件内容的实时更新

 

3.7 补充find命令相关题目:

查找/oldboy 下所有以log 结尾的大于1M 的文件复制到/tmp

[root@oldboy oldboy]# find /oldboy -type f -name "*.log" -size +1M

/oldboy/old.log

# -size +1M   大写

# -size +100k   小写

 

3.7.1 创建环境:创建大文件  cat   dd

方法一: cat的叠加功能

[root@oldboy oldboy]# ls -lh /etc/services

-rw-r--r--. 1 root root 626K Mar 22  2017 /etc/services

[root@oldboy oldboy]# cat /etc/services /etc/services >1.log

[root@oldboy oldboy]# ls -lh 1.log

-rw-r--r--. 1 root root 1.3M Nov 11 11:33 1.log  cat具有叠加功能

 

方法二:dd命令

[root@oldboy /]# dd if=/dev/zero of=/wang.txt bs=3M count=1

1+0 records in

1+0 records out

3145728 bytes (3.1 MB) copied, 0.0152596 s, 206 MB/s

 

3.7.2 三种方法:   方法2和方法3的两个坑

find /oldboy  -type f -name "*.log" 
mkdir -p /tmp/a /tmp/b /tmp/c 
方法1 find+$() 

#cp 处是find命令的结果  /tmp/a/
cp   $(find /app/logs/ -type f -name "*.log")  /tmp/a/

方法2 find + -exec 

find /app/logs/ -type f -name "*.log" -exec cp {} /tmp/b/  \;  注意{}的位置

 

方法3 find + |xargs 

find /app/logs/ -type f -name "*.log" |xargs cp -t /tmp/c

-t参数   源目标与目的目标互换

 

总结:

1,.find与复制或移动

1. Linux启动过程  

2. PATH作用

3. 文件修改时间 mtime

4. cd相关参数

5. tree/find

6. grep 正则表达式

12.20

第二关练习题(2

 

3.8 打印轻量级 web 服务的配置文件 nginx.conf 内容的行号及内容,该如何做?

3.8.1 {}的用法     生成序列(数字,字母)

[root@oldboy oldboy]# echo {1..4}

1 2 3 4

 

[root@oldboy oldboy]# echo {01..100}

001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100

 

[root@oldboy oldboy]# echo stu{01..10}

stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10

 

[root@oldboy oldboy]# echo stu{01..5} |xargs -n1 >nginx.conf

[root@oldboy oldboy]# cat nginx.conf             -n 分组显示

stu01

stu02

stu03

stu04

stu05

 

3.8.2 方法一:cat  -n 显示行号

cat  -n  nginx.conf     -n  显示行号

 

3.8.3 方法二:vim    set  nu

vim    set nu 显示行号    :set nomu   取消显示行号

 

3.8.4 方法三:grep  -n显示行号

[root@oldboy oldboy]# grep -n "." nginx.conf

1:stu01

2:stu02             -n  grep找到的内容显示行号

3:stu03

4:stu04                 .()   表示任意一个字符

 

3.8.5 方法四:awk   $0   NR  print

[root@oldboy oldboy]# awk '{print NR}' nginx.conf

1

2

3

4

5

[root@oldboy oldboy]# awk '{print NR,$0}' nginx.conf

1 stu01              print  显示    逗号 --显示空格

2 stu02              NR     行号

3 stu03              $0     表示这一行的内容

4 stu04

5 stu05

 

3.8.6 方法五:sed |xargs -n   =   显示行号

[root@oldboy oldboy]# sed '=' nginx.conf

1

stu01

2                       ‘=’    显示行号

stu02

3

stu03

4

stu04

5

stu05

[root@oldboy oldboy]# sed '=' nginx.conf|xargs -n2

1 stu01

2 stu02

3.9 .装完 Centos 系统后,希望网络文件共享服务 NFS,仅在 3 级别上开机自启动,该如何做?

3.9.1 chkconfig命令

[root@oldboy oldboy]# chkconfig --level 3 iptables on

[root@oldboy oldboy]# chkconfig |grep "ipt"        --level   单独指定某个与运行级别

iptables        0:off 1:off 2:off 3:on 4:off 5:off 6:off

 

3.10 linux 系统运行级别一般为 0-6,请分别写出每个级别的含

3.10.1 0-6运行级别

0        关机

1        单用户模式  root密码忘记         

2        没有NFS的多用户模式

3        命令行模式

4        没有使用  待开发

5        图形化模式  桌面模式   x11

6        重启

3.10.2 如何查看运行级别     

[root@oldboy oldboy]# runlevel

3 3

3.10.3 如何修改运行级别

1. 临时   init 3

2. 永久  /etc/inittab

 

 

 

3.11 linux 系统中查看中文乱码,请问如何解决乱码问题?

 

3.12 如何优化 linux 系统(可以不说太具体)?

3.13 /etc/目录为 linux 系统的默认的配置文件及服务启动命令的目录

 a.请用 tar 打包/etc 整个目录(打包及压缩)

 b.请用 tar 打包/etc 整个目录(打包及压缩,但需要排除/etc/services 文件)

 c.请把 a 点命令的压缩包,解压到/tmp 指定目录下(最好只用 tar 命令实现)

 

3.13.1 a.  tar 命令   压缩

tar zcvf /tmp/etc.tar.gz

3.13.2 tar参数

z  === gzip   通过gzip进行压缩
 c  === create 创建包
 v  ===        显示执行过程
 f  === file   指定的压缩包

-C  (大写)      解压到指定目录

x         解压

格式: #tar  zcvf  压缩包(筐)    文件  文件 目录

文件后缀:.tar.gz

 

3.13.3 c解压到指定文件

tar xf /tmp/etc.tar.gz  -C /opt

 

3.13.4 查看压缩包   -t   查看

[root@oldboy ~]# tar ztf /tmp/etc.tar.gz

t  =====list      查看压缩包内容

3.13.5 b     --exclude   排除

tar zcf /tmp/etc-pai.tar.gz  /etc/  --exclude=/etc/services

tar: Removing leading `/' from member names

tar: Removing leading `/' from hard link targets

tar tf /tmp/etc-pai.tar.gz |grep "services"

etc/init/readahead-disable-services.conf

3.13.6 排除多个文件

-X(大写) =====--exclude-from=被排除的文件名列表(暗杀名单)

 

3.13.7 创建压缩包常见的警告及原因(重要)

警告:

tar: Removing leading `/' from member names

删除      主要的   /(根)从 压缩包中的文件名

把压缩包中每个文件名开头的/删掉

tar: Removing leading `/' from hard link targets

原因:是一种安全措施,防止解压的时候覆盖原来的文件

      如果不这样做,解压之前的压缩包的时候 会把新的文件覆盖,导致之间时间段的数据丢失

解决:

1)不理会,这只是警告,不影响实际创建

2)使用相对路径创建压缩包

 

小结:

1. 创建,查看,解压压缩包

2. tar  zcf  tf   xf

3. -C   指定解压目录

4. --exclude   压缩时排除

 

3.14 已知如下命令及结果:

[oldboy@test ~]$ echo "I am oldboy,myqq is 31333741">>oldboy.txt

[oldboy@test ~]$ cat oldboy.txt

I am oldboy,myqq is 31333741

现在需要从文件中过滤出oldboy”和“31333741”字符串,请给出命令.

3.14.1 方法一:sed命令

sed  's#I am ##g'   oldboy.txt |sed 's#,myqq is # #g'

oldboy 31333741          将指定字符替换为空字符

 

3.14.2 方法二:awk命令   -F   指定分隔符

[root@oldboyedu43-lnb oldboy]# awk -F "[ ,]"  '{print $3,$6}' oldboy.txt

oldboy 31333741                             空格&逗号

 

-F 指定分隔符     ——F [   ,]   []内空格和逗号 只一把刀,不需要[]  -F ,

实例3-1 扩展(过滤出oldboy 31333741 包括逗号

awk -F "[ ,]"  '{print $3","$NF}' oldboy.txt

oldboy,31333741     双引号里面写什么,输出什么

$NF   表示最后一列     awk默认分隔符为空格

 

3.14.3 方法三:cut命令   -d  指定分隔符

sed 's#,# #g' oldboy.txt |cut -d " " -f3,6

oldboy 31333741                

缺点cut只能指定一个分隔符     cut    awk小弟    阉割版

优点:显示多列方便(某一列某一列    某一列某一列)

3.14.4 cut命令参数

-d   指定分隔符

-f    显示某列    

-f1     显示第一列

-f1,5    显示第一列和第五列

-f1-5    显示第一列到第五列

 

 

3.15 如何查看/etc/services 文件内容有多少行?

3.15.1 wc命令    统计文件信息

[root@oldboy ~]# wc /etc/services

 10774    58108   641020 /etc/services

行数    单词数  大小                            -l(小写)   只显示行数

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

10774 /etc/services

 

3.15.2 扩展:ps命令       显示系统进程信息

                -ef         显示所有正在运行的进程

ps   -ef   |grep “/sshd”|wc -l    根据进程数推断进程是否运行

 

3.16 过滤出/etc/services 文件包含 3306 1521 两数据库端口的        

行的内容

3.16.1 egrep命令

[root@oldboyedu43-lnb oldboy]# 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

 

|   正则表达式   或者   egrep识别   grep不识别