博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell编程
阅读量:6633 次
发布时间:2019-06-25

本文共 3152 字,大约阅读时间需要 10 分钟。

一、shell命令应用练习

   1、简述以下文件的用途

         ① /etc/passwd       passwd为密码文件,用来管理用户的密码。普通用户通常只能修改自己的密码信息

         ② /etc/shadow       shadow是一个影子化的密码文件,它包含系统账户的密码信息和可选的年龄信息。只有管理员能查看修改

         ③ /etc/group

         group文件是用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组或哪几个用户组,因为一个用户可以归属一个或多个不同的用户组;同一用户组的用户之间具有相似的特征

         ④ /etc/gshadow

         /etc/gshadow是/etc/group的加密资讯文件,比如用户组(Group)管理密码就是存放在这个文件。/etc/gshadow和/etc/group是互补的两个文件;对于大型服务器,针对很多用户和组,定制一些关系结构比较复杂的权限模型,设置用户组密码是极有必要的

   2、依次输入如下命令,观察运行结果,指出每一条命令功能

       id:id命令可以显示真实有效的用户ID(UID)和组ID(GID)

       id -u:只显示用户ID

       id -u root: 即查看root的用户ID,为0

       id -u liuli: 查看liuli这个用户的ID,为1000

   3、在shell命令终端依次输入以下命令,观察执行结果,理解每条命令实现的具体功能

   ① which python:查找系统PATH目录下名为python的可执行文件

       whereis python:whereis命令可以用来查找二进制(命令)、源文件、man文件。与which不同的是这条命令可以是通过文件索引数据库而非PATH来查找的,

       所以查找的面比which要广

       locate python:通过数据库查找文件。这个命令可以找到任意你指定要找的文件,并且可以只输入部分文件名
       find /usr/bin -name python:通过直接搜索硬盘的方式查找/usr/bin目录下名为python的文件

   ② grep -n -E 'root|cy|^user*':/etc/passwd -n为显示行号,该指令作用是在/etc/passwd文件中查找以root或cy为行首的行,其中*表示重复零次以上,

       ^表示必须出现在行首

       grep -n -E ' [[:digit:]] ' /etc/passwd:在 /etc/passwd文件中查找含有纯数字的行
       grep -n -E ' [[:alpha:]] ' /etc/passwd:在 /etc/passwd文件中查找含有纯字母的行
       grep -n '[0-9]\{4,\}' /etc/group 因为不加-E,所以使用花括号加转义符\{\} ,[0-9]等价于[[:digit:]],找出纯数字,4代表4位以上

   ③ sudo apt install gimp:安装软件gimp

       which gimp:查询gimp的位置

       sudo apt remove gimp:卸载gimp
       which gimp:查询gimp的位置,此时已经没有查询结果

   ④ ls -dl /root --time-style=long-iso:/root下显示文件目录信息,详细信息,时间按完整的IOS时间格式显示

       ls -dl /root --time-style=long-iso | cut -d' ' -f1,8:以空格为分隔符,截取上一条指令中的第一和第八个域

   ⑤ ls -l --time-style=long-iso,:ls -l 是列出文件的详细信息,时间设置为long-iso格式,默认排序

       ls -l --time-style=long-iso -t:在前一条命令的基础上按时间由近到远排序
       ls -l --time-style=long-iso -t -r:在前一条命令的基础上按时间排序,但变为由远到近排序

   ⑥ ls /usr/share/man:显示/usr/share/man下的目录

       ls /usr/share/man | grep man[1-8]:在上一条命令的基础上搜索man1~man8
       ls /usr/share/man/man1:显示/usr/share/man/man1下的目录
       file /usr/share/man/man1/ls.1.gz (结合执行结果,review2.8.1 节 gzip命令内容)
       mkdir ~/temp; cp /usr/share/man/man1/ls.1.gz ~/temp:根目录下创建temp文件夹,把ls.1.gz复制到temp下
       cd ~/temp; ls:转到temp目录下,查看所有文件目录,此时有后缀.gz
       sudo gzip -d ls.1.gz; ls:解压并查看目录,此时.gz消失,说明已经解压并删除了压缩包

   ⑦ ls –l /home | grep "^d" | wc –l:在home目录下查找以d开头的行,并统计行数

   ⑧ sudo adduser user7:创建用户user7

       ls /home | tee users | wc -l:在home目录下查找用户名,并统计行数

   4、根据要求写出相应的shell命令

   ① 在目录/usr/include 下搜索文件 signal.h 是否存在 (提示: find 命令)

   ② 在/usr/include 目录下的所有文件中查找包含 BUFSIZ 的行,并显示所在行号。要求:屏幕上只显示查找到的结果,过滤错误信息。

     (提示:① 利用 grep 和通配符*;②利用错误信息重定向和特殊设备文件/dev/null)

   ③ 在用户名密码文件/etc/passwd 中查找登录 shell 为 bash 的用户信息记录,并显示行号

     (提示:使用 grep 和正则表达式中的$)

   ④ 从/etc/group 文件中截取第 1 列(组名)和第 3 列(组 id),并按照组 id 号的数值大小由小到大排序。(提示:综合使用 cut, 管道线及 sort 命令)

   5、体验awk、sed用法,依次执行命令并观察运行结果

   ① cp /etc/apt/sources.list t1; less t1

   ② sed -e "s/#.*//g" t1

   ③ sed -e "s/#.*//g" t1 | awk '{if (length != 0) print $0}'

   ④ tail -5 /etc/passwd | awk -F: '{print $1}'

   ⑤ tail -5 /etc/group | tee t2

awk 'BEGIN{print "file t2"} {print "line" NR ":" $0} END {print "over"}' t2

   6、体验curl和wget的用法

   ① curl+网址,显示网址的html

       获取网站cookie

      保存网页

   ②断点续传

      下载文件

      测试网站能否正常访问

二、编写一个shell脚本,使用4种方式分别执行 

1、练习1

(1)bash<filename

(2)bash filename [ arguments ]

(3)filename

(4)filename

三、总结

       这次实验主要进行了shell命令的编写和脚本的运用练习,我感觉学到了很多。在实验过程中,经常由于我的粗心比如少输出个空格造成命令错误,所幸最后都修改回来了,这更让我了解到Linux的严谨与规范。在学习上我还需要加倍努力。

转载于:https://www.cnblogs.com/ll-8012/p/8977586.html

你可能感兴趣的文章
Linux 小知识翻译 - 「虚拟化技术」
查看>>
DateTimeHelper R2
查看>>
Javascript--面向对象(三)接口
查看>>
省赛部分解题报告
查看>>
如何结合使用 Subversion 和 Eclipse
查看>>
事件之道~一 如何让实体发生更新时,同时记录它更新的内容到日志表
查看>>
前景检测算法_4(opencv自带GMM)
查看>>
PHP内核探索之变量(4)- 数组操作
查看>>
6个关于dd命令备份Linux系统的例子
查看>>
面向对象、面向服务、面向组件三种编程模式有什么区别?分别适用于哪些领域的开发?...
查看>>
监听视图树 ViewTreeObserver 获取View的宽高
查看>>
学习笔记 --- 缓存、动态页面静态化、网站优化
查看>>
linux 开机批量启动程序
查看>>
ANDROID L——Material Design具体解释(主题和布局)
查看>>
Spring注解@Component、@Repository、@Service、@Controller区别
查看>>
Aimp3的播放列表 按评分排序 落雨
查看>>
【Leet Code】Palindrome Number
查看>>
python网络编程初级
查看>>
Ruby中的Symbol与字符串
查看>>
最长回文字符串(manacher算法)
查看>>