第一题 创建一个目录 /data
[root@oldboyedu41 ~]# mkdir /data
1.1 扩展知识1:
创建目录 ===== make directory mkdir
1.2 扩展知识2:如果有一个相同的目录已存在了,会报以下错误提示
[root@oldboyedu41 ~]# mkdir /datamkdir: cannot create directory `/data': File exists
1.3 扩展知识3:查看 显示目录下面的内容
[root@oldboyedu41 ~]# ls /data[root@oldboyedu41 ~]# ls -l /data/total 0
1.4 扩展知识4:进入到别的目录 进入到目录
[root@oldboyedu41 ~]# cd /data/
1.5 扩展知识5:查看当前所在目录/路径(定位)
[root@oldboyedu41 data]# pwd/data
1.6 扩展知识6:相对路径和绝对路径
1.简单-相对路径不是从根开始的路径 从当前位置开始
data
etc/hosts
etc/sysconfig/network-scripts/ifcfg-eth0
2.精确-绝对路径从根开始的路径
/data
/etc/hosts
/etc/sysconfig/network-scripts/ifcfg-eth0
第二题 在/data下面创建文件oldboy.txt
[root@oldboyedu41 data]# touch /data/oldboy.txt[root@oldboyedu41 data]# ls -l /data/total 0-rw-r--r--. 1 root root 0 Sep 3 15:04 oldboy.txt
第三题 为oldboy.txt增加内容"I am studying linux."
3.1 方法一 :vi或vim
第一步:打开文件
vi /data/oldboy.txt
第二步:编辑文件
按i(a,o)
编辑文件,输入内容
第三步:退出编辑模式
编程完成,按esc 退出编辑模式
第四步:保存退出
:wq (加!为强制)
:q! 强制退出不保存
:wq! 强制保存退出
其中:w的意思是write,q的意思是quit
第五步:查看
[root@oldboyedu41 ~]# cat /data/oldboy.txt I am studying linux.
NOTE:在Linux中vi相当于Windows中的记事本,而vim相当于Windows中的 notepad++、emeditor、subline
3.2 方法二:使用echo+追加/输出重定向
[root@oldboyedu41 ~]# echo "I am studying Linux."I am studying Linux.[root@oldboyedu41 ~]# echo " I am studying Linux.">>/data/oldboy.txt [root@oldboyedu41 ~]# cat /data/oldboy.txtI am studying Linux.
>> 漏斗 追加重定向 把内容追加到文件的结尾,相当于“添加”
> 漏斗 输出重定向 先把源文件的内容清空 然后再向文件中存放内容,相当于“覆盖”
3.3 方法三:使用cat命令,向一个文件中追加多行
cat >>/data/oldboy.txt<<EOFIam oldboylinuxEOF
EOF的意思是:end of file 这里可以把EOF替换成任何文字,包括中文,但必须匹配使用。
结束标志之前不能有任何符号
第四题 把oldboy.txt拷贝(复制)到/tmp下。
cp命令:复制copy
[root@oldboyedu41 ~]# cp /data/oldboy.txt /tmp/[root@oldboyedu41 ~]# ls -l /tmp/total 4-rw-r--r--. 1 root root 60 Sep 3 16:02 oldboy.txt-rw-------. 1 root root 0 Sep 3 11:01 yum.log
扩展知识1:参数-r可以拷贝文件夹并且包括下一级的子文件夹,以及子文件夹中的子文件夹。
[root@oldboyedu41 ~]# cp -r /data/ /tmp/[root@oldboyedu41 ~]# ls -l /tmp/total 8drwxr-xr-x. 2 root root 4096 Sep 3 16:05 data-rw-r--r--. 1 root root 60 Sep 3 16:02 oldboy.txt-rw-------. 1 root root 0 Sep 3 11:01 yum.log
扩展知识2:cp命令的另一个作用,备份
[root@oldboyedu41 ~]# cp /data/oldboy.txt /data/oldboy.txt.bak[root@oldboyedu41 ~]# ls -l /data/total 8-rw-r--r--. 1 root root 60 Sep 3 15:50 oldboy.txt-rw-r--r--. 1 root root 60 Sep 3 16:22 oldboy.txt.bak
第五题 把 /data 移动到 /root目录下面
mv命令:移动move
[root@oldboyedu41 ~]# mv /data/ /root/[root@oldboyedu41 ~]# ls -l /root/total 48-rw-------. 1 root root 1073 Sep 3 11:11 anaconda-ks.cfgdrwxr-x---. 2 root root 4096 Sep 3 11:30 anaconda-screenshotsdrwxr-xr-x. 2 root root 4096 Sep 3 16:22 data-rw-r--r--. 1 root root 21736 Sep 3 11:11 install.log-rw-r--r--. 1 root root 5890 Sep 3 11:10 install.log.syslog[root@oldboyedu41 ~]# ls /datals: cannot access /data: No such file or directory
第六题 进入/root目录下的data目录,删除oldboy.txt文件
NOTE1:我觉得此题描述有问题,是否应改为:如何用一条命令找到/data/文件夹下所有的以.txt结尾的文件,并删除。
NOTE2:Linux中的/tmp文件夹相当于Windows中的回收站。删除文件时较为稳妥的方法是先将待删除文件用mv命令移入/tmp文件夹内,若发现操作后出现问题则可将文件恢复回原文件夹,若操作后没有问题则可将/tmp文件夹内文件彻底删除。
创建测试环境:
[root@oldboyedu41 ~]# mkdir /data [root@oldboyedu41 ~]# touch /data/oldboy.txt /data/alex.txt /data/zbz.txt
6.1 第一步:使用find命令找到文件
[root@oldboyedu41 ~]# find /root -type f -name "oldboy.txt"[root@oldboyedu41 ~]# /root/data/oldboy.txt
#find 查找位置(路径) -type 什么类型 -name "什么名字"
-typef file 文件
d directory 目录
-name "*.txt"
以.txt结尾的文件
*表示所有
6.2 第二步:使用管道符|(find命令需要同时与|xargs配合使用)
[root@oldboyedu41 data]# find /data/ -type f -name "*.txt"/data/zbz.txt/data/alex.txt/data/oldboy.txt[root@oldboyedu41-001 data]# find -type f -name "*.txt" |xargs rm或:[root@oldboyedu41-001 data]# find /data/ -type f -name "*.txt" |xargs -i mv {} /tmp/
小结:
1.rm命令:移除remove
-f参数,不需要确认直接删除
例:rm -f oldboy.txt
-r参数,删除文件夹
例:rm -rf /tmp/data/
2.find命令若配合管道符| 需要加xargs
3.管道符后不能识别“别名”,比如ll,故rm不用加-f即可无提示删除,需注意。
4.xargs的-i参数:
第七题 退出到上一级目录删除 data目录。(原来在/root/data)
[root@oldboyedu41-001 data]# cd ..[root@oldboyedu41-001 ~]# rm -rf data/
扩展知识:
.. 上一级目录,当前目录的上一级目录
. 当前目录,/etc/sysconfig
例:
[root@oldboyedu41 ~]# cp /tmp/oldboy.txt /etc/sysconfig [root@oldboyedu41 ~]# cp /tmp/oldboy.txt .
第八题 请给出输出test.txt文件内容时,不包含oldboy字符串的命令
创建试验环境命令:
[root@oldboyedu41 ~]# mkdir /data> cat >/data/test.txt<<EOF> test> lidao> oldboy> EOF
8.1 方法1:使用grep 命令的-v参数进行过滤
grep命令默认输出查找到的包含""引号内的内容的行。
[root@oldboyedu41 data]# grep "oldboy" /data/test.txt oldboy[root@oldboyedu41 data]# grep "old" /data/test.txt oldboy
grep命令-v参数的作用是反转查找,即输出所有不包含""引号内的内容的行。
[root@oldboyedu41 data]# grep -v "oldboy" /data/test.txt testlidao
8.2 方法2:非正常方法:使用head命令
[root@oldboyedu41 data]# head -n2 /data/test.txt testliyao
因-n参数太常用了,故可以把n省略掉,效果一样。
[root@oldboyedu41 data]# head -2 /data/test.txt testliyao
扩展知识:head命令 取出文件的 前几行 默认取 前10行
tail命令 取出文件的最后几行 默认取最后10行
8.3 方法3:使用sed命令的d参数
[root@oldboyedu41 data]# sed '/oldboy/d' test.txt testliyao
扩展知识:sed命令主要作用是查找替换,d参数的作用是删除选择的行。
例:
删除空白行:
sed '/^$/d' file
删除文件的第2行:
sed '2d' file
删除文件的第2行到末尾所有行:
sed '2,$d' file
删除文件最后一行:
sed '$d' file
删除文件中所有开头是test的行:
sed '/^test/'d file
8.4 方法4:使用awk命令及!
[root@oldboyedu41 data]# awk '/oldboy/' test.txt oldboy[root@oldboyedu41 data]# awk '!/oldboy/' test.txt testliyao
8.5 其他扩展方法:
[root@oldboyedu41 data]# sed -n '/oldboy/!p' test.txt testliyao[root@oldboyedu41 data]# grep "^[tl]" test.txt testliyao
第九题 请用一条命令完成创建目录/oldboy/test,即创建/oldboy目录及/oldboy/test
使用mkdir命令的-p选项
[root@oldboyedu41-001 /]# mkdir -p /oldboy/test
第十题 已知/tmp下已经存在test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt,而让系统不提示是否覆盖(root 权限下)。
10.1 方法1:cp命令前加\
[root@oldboyedu41-001 mnt]# \cp /mnt/test.txt /tmp/test.txt
10.2 方法2:使用命令的绝对路径
[root@oldboyedu41-001 mnt]# which cpalias cp='cp -i'/bin/cp[root@oldboyedu41-001 mnt]# /bin/cp /mnt/test.txt /tmp/test.txt
第十一题 只查看ett.txt文件(共100行)内第20到第30行的内容
创建测试环境
[root@oldboyedu41 tmp]# seq 100 >ett.txt[root@oldboyedu41 tmp]# cat ett.txt
11.1 方法1:head + tail
[root@oldboyedu41 data]# head -30 ett.txt |tail -112021222324252627282930
11.2 方法2:sed
[root@oldboyedu41 data]# sed -n '20,30p' ett.txt 20…30
11.3 方法3:awk
[root@oldboyedu41 data]# awk'NR==20' ett.txt 20[root@oldboyedu41 data]# awk'NR==30' ett.txt 30[root@oldboyedu41 data]# awk'NR==20,NR==30' ett.txt 20…30
NOTE:在awk中 NR表示行号
11.4 方法4:grep
[root@oldboyedu41 data]# grep -A10 "20" ett.txt 20…30
NOTE:-A9 显示出grep找到的内容及接下来的9行
老男孩教育每日一题-第125天-显示文件oldboy.txt的第20行到30行请问如何做?
http://lidao.blog.51cto.com/3388056/1961519
小结:
1.head+tail
2.sed 取某一行 取连续的多行
3.了解awk的方法
第十二题 分析图片服务日志,把日志(每个图片访问次数*图片大小的总和)排行,取top10,也就是计算每个url 的总访问大小【附加题:工作场景高难度加分题,不会的同学可以放弃不答】。
说明:本题生产环境应用:这个功能可以用于IDC 网站流量带宽很高,然后通过分析服务器日志哪些元素占用流量过大,
进而进行优化或裁剪该图片,压缩js 等措施。
本题需要输出三个指标: 【访问次数】 【访问次数*单个文件大小】 【文件名(可以带URL)】
测试数据
59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299
"http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
59.33.26.105 - - [08/Dec/2010:15:43:56 +0800] "GET /static/images/photos/2.jpg HTTP/1.1" 200 11299
"http://oldboy.blog.51cto.com/static/web/column/17/index.shtml?courseId=43" "Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
59.33.26.105 - - [08/Dec/2010:15:44:02 +0800] "GET /static/flex/vedioLoading.swf HTTP/1.1" 200 3583
"http://oldboy.blog.51cto.com/static/flex/AdobeVideoPlayer.swf?width=590&height=328&url=/[[DYNAMIC]]/2"
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET
CLR 3.5.30729)"
124.115.4.18 - - [08/Dec/2010:15:44:15 +0800] "GET /?= HTTP/1.1" 200 46232 "-" "-"
124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/web_js.js HTTP/1.1" 200 4460 "-" "-"
124.115.4.18 - - [08/Dec/2010:15:44:25 +0800] "GET /static/js/jquery.lazyload.js HTTP/1.1" 200 1627 "-" "-"
解答:暂无
第十三题 把/oldboy目录及其子目录下所有以扩展名.sh结尾的文件中,文件包含oldboy的字符串全部替换为oldgirl
考察重点:
sed命令如何进行查找替换
find命令与sed命令的配合
创建试验环境:
mkdir -p /oldboy/test
cd /oldboy
echo "oldboy">test/del.sh
echo "oldboy">test.sh
echo "oldboy">t.sh
touch oldboy.txt
touch alex.txt
检查试验环境:
[root@oldboyedu41 oldboy]# find
.
./t.sh
./test.sh
./test
./test/del.sh
./alex.txt
./oldboy.txt
13.1 第一步:找出/oldboy目录及其子目录下所有以扩展名.sh结尾的文件
找出所有文件:
[root@oldboyedu41 oldboy]# find /oldboy/ -type f /oldboy/t.sh/oldboy/test.sh/oldboy/test/del.sh/oldboy/alex.txt/oldboy/oldboy.txt
找出所有以.sh结尾的文件
[root@oldboyedu41 oldboy]# find /oldboy/ -type f -name "*.sh"/oldboy/t.sh/oldboy/test.sh/oldboy/test/del.sh
13.2 第二步:如何把一个文件中的oldboy替换为oldgirl
[root@oldboyedu41 oldboy]# #sed 's#你要找什么#替换成什么#g' /oldboy/t.sh [root@oldboyedu41 oldboy]# sed 's#oldboy#oldgirl#g' /oldboy/t.sh oldgirl[root@oldboyedu41 oldboy]# cat /oldboy/t.sh oldboy
NOTE:sed命令不加-i参数的话,只修改显示到屏幕上的字符,而不修改原文件的字符。
[root@oldboyedu41 oldboy]# sed -i 's#oldboy#oldgirl#g' /oldboy/t.sh [root@oldboyedu41 oldboy]# cat /oldboy/t.sh oldgirl
13.3 第三步:把find命令找到的内容 传递给 sed
[root@oldboyedu41 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g'oldgirloldgirloldgirl[root@oldboyedu41 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs sed 's#oldboy#oldgirl#g' -i[root@oldboyedu41 oldboy]# find /oldboy/ -type f -name "*.sh"|xargs cat oldgirloldgirloldgirl
NOTE:
1.find命令要与 |xargs 配合
2.sed命令如何进行查找替换
3.sed -i 对文件的内容进行修改
本文出自 “老潘Linux” 博客,请务必保留此出处http://oldpan.blog.51cto.com/1603893/1965211