在文件有很多的时候,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‘ 如:
[[email protected] 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
方法二:# 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 的数量
企业案例:
文件删除生产场景案例解决实战:Web服务器磁盘满故障深入解析
http://oldboy.blog.51cto.com/2561410/612351
19、描述下硬链接与软链接的区别?
2,3