您的位置:首页 > 运维架构 > Linux

Linux运维学习第一周总结

2018-01-13 14:45 330 查看

目录

一、Linux的文件系统与目录结构

二、shell的简介

三、改变终端的显示的用户名、主机名前缀、目录路径后缀

四、当执行一条命令时的查找顺序

五、使用shell脚本编写自己的时间命令

六、文件的时间戳

七、文件的硬链接和软连接

八、管道与输入输出重定向

九、练习题难点

十、总结


一、Linux的文件系统与目录结构

在Linux中一切皆可以被看作是文件,文件和目录被组织成一棵单根倒置树,根在上,枝、干、叶在下。如图所示:



各级目录简介:

1. / 根目录,位于目录的最顶端,是所有文件和目录的父目录,其自身没有父目录。2. /boot 引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放于此目录。3. /bin 存放用户基本命令,不能关联至独立分区,OS启动就会用到的程序。4. /sbin 存放管理类基本命令,不能关联至独立分区,OS启动就会用到的程序。5. /lib 启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)6. /lib64 专用于x86_64系统上的辅助共享库文件存放位置7. /etc 配置文件目录8. /home/USERNAME 普通用户家目录9. /root 管理员的家目录10. /media 便携式移动设备挂载点11. /mnt 临时文件系统挂载点12. /dev:设备文件及特殊文件存储位置a) b: block device,随机访问b) c: character device,线性访问13. /opt 第三方应用程序的安装位置14. /srv 系统上运行的服务用到的数据15. /tmp 临时文件存储位置16./usr: universal shared, read-only data bin: 保证系统拥有完整功能而提供的应用程序 sbin: lib:32位使用 lib64:只存在64位系统 include: C程序的头文件(header files) share:结构化独立的数据,例如doc, man等 local:第三方应用程序的安装位置 bin, sbin, lib, lib64, etc, share17. /var: variable data files cache: 应用程序缓存数据目录 lib: 应用程序状态信息数据 local:专用于为/usr/local下的应用程序存储可变数据; lock: 锁文件 log: 日志目录及文件 opt: 专用于为/opt下的应用程序存储可变数据; run: 运行中的进程相关数据,通常用于存储进程pid文件 spool: 应用程序数据池 tmp: 保存系统两次重启之间产生的临时数据18. /proc: 用于输出内核与进程信息相关的虚拟文件系统 19. /sys:用于输出当前系统上硬件设备相关信息虚拟文件系统20. /selinux: security enhanced Linux,selinux相关的安全策 略等信息的存储位置
二、shell的简介
shell(计算机壳层)
在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

三、改变终端的显示的用户名、主机名前缀、目录路径后缀
1. 使用echo $PS1查看当前的提示符格式,结果如图:



2. 接下来改变主机名为\H,改变目录路径为\w,输出结果:



可以看到用户名显示为全名,路径名显示为全部路径

3.当用户关闭并重启虚拟机后,我们会发现,我们所修改保存的格式又变为了系统默认格式。那么如何保证系统重启后还能保持不变呢?接下来介绍一种方法来完成对格式的永久修改。
1) 使用vim命令对/etc目录下的bashrc文件进行编辑,单击i进入编辑模式。

2) 将PS1="\[\e[31m\][\u@\h \W]\\$\[\e[0m\] "粘贴到文件中的一行中,注意不要带#号(#号为注释符)
3) 单击esc退出编辑模式,使用Shift+:并键入x进行保存退出。

4) 最后使用reboot命令重启系统,查看修改是否成功。



四、当执行一条命令时的查找顺序

当Linux执行一道命令时遵循着以下顺序的查找过程:
1. 别名

2. 内部命令
3. 外部命令
1) hash

2) PATH



注释:一般情况下,操作系统在开机运行时会预加载一部分命令在内存中,这部分命令大多为常用命令(如:ls、ceho),这些命令被称为常用命令,在这些命令中,还有一部分命令被系统设置了别名(如:ls="ls --color=auto"),系统在查询内部命令时会首先在别名里寻找,如果找不到,才会寻找内部命令;当系统在内存中找不到与其匹配的内部命令,系统会在磁盘中寻找,此时首先会寻找系统hash过的命令,其次才是从PATH中从左至右一次寻找。
别名alias的使用方法:
alias 显示所有的别名信息



alias 别名='command -选项 参数' 例如:



unalias 别名
unalias -a 取消所有别名
别名的保存 nano /etc/bashrc

显示内部命令的使用方法enable:
enable 显示所有已激活的内部命令
enable command 激活被禁用的内部命令
enable |wc -l 显示激活中的内部命令的数量



enable -a 显示所有的内部命令
enable -a |wc -l 显示所有的内部命令的数量
enable -n 显示所有被禁用的内部命令
enable -n command 禁用某个内部命令



五、使用shell脚本编写自己的时间命令

首先,我们学习一下显示当前时间的命令date
date
+%Y 年
+%m 月
+%d 日
+%H 时
+%M 分
+%S 秒



+%w 星期
+%F 年-月-日
+%T 时:分:秒

单纯运行date命令,显示如下:



这样的显示很不符合我们的阅读习惯,接下来我们自己编写shell脚本执行自己的时间显示方式:
1) 使用touch创建一个shell脚本riqi.sh

2) 用vim编辑riqi.sh脚本文件:输入vim riqi.sh进入编辑模式,按i或者o进入编辑,在脚本中输入内容后按esc返回,按住Shift+:按键,然后在:后面输入x回车,完成编辑。



3) 用chmod增加riqi.sh的可执行权限,并检验其正确性:



4) 使用alias对其更改,并验证,于是我们就有了自己的日期显示命令了:



六、文件的时间戳
在文件系统中,数据只有两种:数据与元数据,在元数据中存放着文件的权限、所属人、所属组和时间戳等,而时间戳又分为三类;
1) atime 访问时间
2) mtime 文件数据修改时间
3) ctime 文件元数据修改时间
我们可以通过stat filename命令查看文件的元数据:



这里的touch filename 当文件不存在时,则创建一个空文件,名为filename
当文件已存在时,则更新期时间戳
-a 仅更新atime,ctime
-m 仅更新mtime, ctime
touch filename 更新全部时间戳。

七、文件的硬链接和软连接

在讲硬链接和软连接之前,首先了解什么是节点(inode)
节点inode(index node)表中包含文件系统所有文件列表
一个节点 (索引节点)是在一个表项,包含有关文件的信息 ( 元数据 ),包括:
文件类型,权限,UID,GID
链接数(指向这个文件名路径名称个数)
该文件的大小和不同的时间戳
指向磁盘上文件的数据块指针
有关文件的其他数据



硬链接
创建硬链接会增加额外的记录项以引用文件
对应于同一文件系统上一个物理文件
每个目录引用相同的inode号
创建时链接数递增
删除文件时:
rm命令递减计数的链接
文件要存在,至少有一个链接数
当链接数为零时,该文件被删除
不能跨越驱动器或分区
语法: ln filename [linkname ]

例如:在/etc目录下的passwd文件的节点号是123,在/app目录下创建的硬链接密码的节点号同样是123,那么在相同节点号的情况下,passwd和mima在内存中储存的是同一样数据。



符号(或软)链接
一个符号链接指向另一个文件
ls - l的 显示链接的名称和引用的文件
一个符号链接的内容是它引用文件的名称
可以对目录进行
可以跨分区
指向的是另一个文件的路径;
其大小为指向的路径字符串的长度;
不增加或减少目标文件inode的引用计数;
语法: ln -s filename [linkname]



注意:一般情况下,创建软连接是采用相对地址,这样可以避免在上级目录更改时会发生地址不匹配的错误。但是要在创建软连接的时候注意软连接的作用对象是否时该目录,如果不是,虽然会创建成功,但会发生软链接报错的现象。

八、管道与输入输出重定向
1. 输入输出重定向

> 正确输出
2> 错误输出
&> 全部输出
文件不存在时,>和>> 都能创建新文件,文件已存在时 >表示覆盖,>>表示追加
2>&1 把错误的结果转成正确的结果
1>&2 把正确的结果转成错误的结果

示例:用普通用户查找/etc目录下所有以.conf为结尾的文件,将权限错误无法查看的错误信息输出到/app目录下的error.txt文件中去:



查看error.txt文件中是否存放了错误信息:



2. 管道

2>&1 | 或 |& 将所有的结果传递给管道处理

echo youkongma |mail -s "yuema2" guanyu

示例:用liubei用户向root发送邮件:



root用户查看邮件:



九、练习题难点

1、只显示/root下的隐藏文件和目录



2、显示/etc目录下,文件名至少包含一个小写字母和一个数字并以.conf结尾的文件或目录



3、定义别名命令baketc,每天将/etc/目录下所有文件,备份到/testdir独立的子目录下,并要求子目录格式为 backupYYYY-mm-dd,备份过程可见



4、如何创建/testdir/dir2/x, /testdir/dir2/y,/testdir/dir2/x/a, /testdir/dir2/x/b



3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:
Hello, I am 用户名,The system version is here,please help me to check it ,thanks
操作系统版本信息


登陆root帐号查看邮件是否发送成功:



5、计算1+2+3+..+99+100的总和 提示:echo 1+2 |bc echo {1..100}



十、总结
本周是第一次学习Linux运维相关知识,一周下来的学习量很大,只能挑一些认为是重点的内容和概念写在博客里,有些内容如:安装虚拟机、man命令的用法、cp命令的运行机制等并没有写在博客里,所以有很多欠缺的地方。以后会尽量多写一些内容放在这里,就这样了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux 运维