在文件有很多的时候,rm -f * 删不掉,则用

# find ./ -type f | xargs rm -f

# ls|xargs rm -f


1、删除一个目录下的所有文件,但保留一个指定文件

#mkdir  data

#touch  a.txt  b.txt  oldboy.txt  oldgirl.txt

方法一:#find  /data/  -type  f  ! -name ="oldboy.txt"  |  xargs  rm  -f

方法二:#find  /data/  -type  f  ! -name ="oldboy.txt"  -exec  rm  -f  {}  \;


2、已知文件 test.txt 内容为:

test

liyao

oldboy

请打印 test.txt 内容,不包含 oldboy 字符串的命令

#touch  test.txt

#echo "test" >/test.txt

#cat >>/test.txt<<EOF

>liyao

>oldboy

>EOF

方法一:#head  -2  test.txt

方法二:#grep  -v  "oldboy"  test.txt

方法三:#cat  test.txt  | grep  -v  "oldboy"  test.txt  (效率比方法二低很多)

方法四:sed  '/oldboy/d'  test.txt


3、用一条命令完成创建目录 /oldboy/test,即创建 /oldboy 目录及 /oldboy/test 目录

#mkdir  -p  /oldboy/test/


4、已知 /temp 目录下已经存在了 test.txt 文件,如何执行命令才能把 /mnt/test.txt 拷贝到 /temp下覆盖掉 /tmp/test.txt,而让 Linux 系统不提示是否覆盖(root 权限下)

#touch /temp/test.txt

#touch /mnt/test.txt

方法一:#\cp /mnt/test.txt  /temp/test.txt

方法二:#/bin/cp /mnt/test.txt  /temp/test.txt

方法三:#unalias cp  (此法仅为临时取消别名,重新登录后就不在生效)

#cp /mnt/test.txt  /temp/test.txt


简要解释:

此题的思路就是屏蔽掉系统默认的对应命令别名,默认执行cp的操作是调用了别名的,所以提示覆盖。

详细说明:

cp 命令默认是不会提示 overwrite 的,但是 cp 的 -i 选项会提示,而一般 Linux 的用户环境文件中会把 cp 命名成 alias cp='cp-i' 如:

[root@student  temp]#alias | grep cp

alias cp='cp-i'

这样在 Linux 下输入 cp 命令实际上运行的是 cp -i,加上一个 “\” 符号或者写 cp 全路径 /bin/cp 就是让此次 cp 命令不使用别名(cp-i)运行。


4、只查看 ett.txt 文件(100行)内第20行到第30行的内容(企业常见面试)

#seq 100 > ett.txt   ====> ett.txt 若不存在,可以自动创建

方法一:#head -30 ett.txt | tail -11

Linux 学习题目_touch

方法二:# sed -n '20,30p' ett.txt       打印第20行到30行(极其常用,最重要)

方法三:# awk '{if (NR>19 && NR<31) print $1}' oldboy.txt   或

# awk '{if (NR>19 && NR<31) printf $1"\n"}' oldboy.txt

方法四:

#seq 100 | grep "30" -B 10 test.txt

#seq 100 | grep "20" -A 10 test.txt

#seq 100 | grep 25 -C 5 test.txt


5、把 /oldboy 目录及其子目录下所有以扩展名 .sh 结尾的文件中包含 hostlists.txt 的字符串全部替换为 idctest_iplist。

方法一:# find /oldboy -type f -name "*.sh" | xrags sed -i 's# hostlists.txt#idctest_iplist#g'

方法二:# find /oldboy -type f -name "*.sh" -exec sed -i 's#hostlists.txt#idctest_iplist#g' {} \;


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

方法一:#ls -l | grep "^d"  ---> 以d 开头

方法二:#ls -lF | grep "/$"   ---> 以 / 结尾

方法三:#find ./ -type d -maxdepath 1  ---> 其中 maxdepath 是查找的深度

方法四:#tree -Ld 1

方法五:#ls -l | awk '/^d/'

方法六:#ls -l | sed -n '/^d/p'


7、已知 apache 服务的访问日志按天记录在服务器本地目录 /app/logs下,由于磁盘空间不足, 现要求只能保留最近7天访问日志!请问如何解决?

解答:apach日志测试数据;企业面试题

第一步:先创建模拟数据

for n in `seq 30`

do

date -s "2016-8-$n"

touch access_www_`(date +%F)`.log

done

date -s "2016-9-8 22:14:35";

第二步: 

# find  /oldboy/test/  -type  f  -name  "access*.log"  -mtime  +7  |  xargs  rm  -f     或

# find  /oldboy/test/  -type  f  -name  "access*.log"  -mtime  +7  -exec  rm  -f  {}  \;


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

第一步:先创建模拟数据

# for n in {1..100};do echo 1 >>/var/log/messages;sleep 1;done

第二步:

# tail -f /var/log/messages    或    # tailf /var/log/messages   或   # tail -F /var/log/messages


9、打印配置文件 nginx.conf 内容的行号及内容,该如何做?

第一步:先创建模拟数据

# seq 30 >oldboy.txt

第二步(共7种方法):

1、#cat -n oldboy.txt    

2、# nl  oldboy.txt   

3、#vim  oldboy.txt ---> :set nu  

4、#grep -n "." oldboy.txt  ---> 对过滤的内容显示行号    

5、#awk '{print NR $0}' oldboy.txt  ----> NR 表示行号,$0 表示整行、一行 

6、#sed '=' /etc/rsyslog.conf


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

方法一:

#chkconfig NFS off  ---> 对应级别是:2,3,4,5

#chkconfig --level 3 NFS on


11、Linux 系统运行级别一般为 0-6,请分别写出每个级别的含义

0:关机模式

1:单用户模式

2:无NFS模式

3:文本模式(完整的多用户模式)

4:未使用的

5:图形模式

6:重启模式


12、Linux 系统中查看中文乱码,请问如何解决乱码问题?

a)、Linux系统下的字符集由变量 LANG 控制

#echo $LANG  ---> zh_CH.UTF-8

b)、expore LANG = "zh_CN.UTF-8"(临时变更字符集,退出当前窗口后失效)

c)、在 /etc/sysconfig/i18n 文件中,行首添加:(配置永久生效)

LANG="zh_CN.UTF-8"

并把之前的字符集行注释“#”

./etc/sysconfig/i18n(使修改生效)

d)、echo 'export LANG='zh_CN.UTF-8' >>/etc/profile' (全局系统环境变量)

source /etc/profile(生效)

echo $LANG (查看结果)


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

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

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

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

解答:

c:创建、z:压缩、v:显示打包的过程、f:文件

tar:打包、gz:以gz格式压缩


a:cd /etc 

     tar -cpzvf  etc.tar.gz  ./*

b:

方法一:

     vi  paichu.list

services

     tar cpzvfX etc.tar.gz  paichu.list   ./

方法二:     

     tar -cpzvf  etc.tar.gz  --exclude=/etc/services  ./ 


c:tar -xzvf  /etc/etc.tar.gz -C  /temp


14、打包 /oldboy 里所有的文件

find /oldboy -type f |xargs tar -cpzvf oldboy.tar.gz


15、已知如下命令及结果:

echo "I am oldboy myqq is 49000448" >oldboy.txt

cat oldboy.txt 

I am oldboy myqq is 49000448

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

解答:

方法一:awk '{print $3" "$6}' oldboy.txt

oldboy 49000448

方法二:cut -d " " -f3,6 oldboy.txt 

oldboy 49000448

方法三:cut -c 6-11,20- oldboy.txt 

oldboy 49000448


16、已知如下命令及结果(有逗号):

echo "I am oldboy,myqq is 49000448" >oldboy.txt

cat oldboy.txt 

I am oldboy,myqq is 49000448

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

解答:

方法一:cut -c 6-11,20- oldboy.txt 

oldboy 49000448

方法二:sed "s#,# #g" oldboy.txt|cut -d " " -f3,6      

oldboy 49000448

方法三:awk -F "," '{print $1" "$2}' oldboy.txt|awk '{print $3" "$6}'

oldboy 49000448

方法四:awk -F "[, ]" '{print $3" "$6}' oldboy.txt  

oldboy 49000448


17、企业面试题

一个 100M (100000K)的磁盘分区,分别写入 1K 的文件或写入 1M 的文件,分别可以写多少个?

错误解答:很容易计算 1K 的个数:100 * 1000 = 10000个,1M 文件的个数:100/1 = 100个


假设 Block  4K   写入 1K 文件的数量

假设 inode 数量够多的时候,就是 Block 的数量,浪费 3/4 的容量

假设 inode 数量小于 block 的数量,就是inode 的数量,浪费 3/4 容量

假设 Block   4K   硬盘空间多大,基本上就可以写入 100/1M 数量,一般情况 inode 和 block 都是做够。


下面知识点:

a、上面的考题考察的是文件系统 inode 和 block 的知识点。

b、Inode 是存放文件属性信息的(也包含指向文件实体的指针),默认大小 128byte(c58),256 byte(c64)。

c、Block 是存放文件实际内容的,默认大小 1K(boot)或 4K(非系统分区默认给 4K),一般企业多用 4K 的 block。

d、一个文件至少要占用一个 inode 及一个 block

e、默认较大分区常规企业真实场景情况下,inode 数量是足够的。而 block 数量消耗的会更快。(工作中,我们的文件系统分区的时候,是 inode 会小于 block 数量的,所以写小文件,inode 会先满;如果写大文件,block 会先满)


18、企业面试题

一个 100M (block 的总大小、个数和单个 block 大小有关)的磁盘分区,分别写入 0.5K 的文件,及写入 1M 的文件,分别可以写多少个?为什么?


解答思想:先答四点知识

a、inode 是存放文件属性信息的,默认大小 128 byte(c58),256 byte(c64)。

b、block 是存放文件实际内容的,默认大小 1K(boot)或 4K(非系统分区默认给 4K)

c、一个文件至少要占用一个 inode 及一个 block

d、默认分区常规情况下,inode 数量是足够的。而 block 数量消耗的会更快


正确解答:

1、默认分区常规情况下,对大文件来讲 inode 是足够的。而 block 数量消耗的会更快,block 为 4K 的情况,1M 的文件不会有磁盘浪费情况,所以文件数量大概为 100/1=100 个

2、对于小文件 0.1K,inode 会消耗的更快。默认分区的时候 block 数量是大于 inode 数量的。

每一个小文件都会占用一个 inode 和一个 block。所以最终文件的数量:

inode 会先消耗完,文件总量是 inode 的数量


Linux 学习题目_字符串_02


企业案例:

文件删除生产场景案例解决实战:Web服务器磁盘满故障深入解析

http://oldboy.blog.51cto.com/2561410/612351


19、描述下硬链接与软链接的区别?

Linux 学习题目_Linux_03


Linux 学习题目_字符串_04


Linux 学习题目_字符串_05

2,3

Linux 学习题目_字符串_06


Linux 学习题目_touch_07

Linux 学习题目_Linux_08