目录

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

二、shell的简介

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

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

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

六、文件的时间戳

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

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

九、练习题难点

十、总结


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

    在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, share

17. /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查看当前的提示符格式,结果如图:

Linux运维学习第一周总结_Linux_02

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

Linux运维学习第一周总结_Linux_03

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

    3.当用户关闭并重启虚拟机后,我们会发现,我们所修改保存的格式又变为了系统默认格式。那么如何保证系统重启后还能保持不变呢?接下来介绍一种方法来完成对格式的永久修改。

        1) 使用vim命令对/etc目录下的bashrc文件进行编辑,单击i进入编辑模式。

        2) 将PS1="\[\e[31m\][\u@\h \W]\\$\[\e[0m\] "粘贴到文件中的一行中,注意不要带#号(#号为注释符)

        3) 单击esc退出编辑模式,使用Shift+:并键入x进行保存退出。

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

Linux运维学习第一周总结_运维_04

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

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

    1. 别名

    2. 内部命令

    3. 外部命令

        1) hash

        2) PATH

Linux运维学习第一周总结_运维_05

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

    别名alias的使用方法:

        alias 显示所有的别名信息

Linux运维学习第一周总结_Linux_06

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

Linux运维学习第一周总结_运维_07

unalias 别名

unalias -a 取消所有别名

别名的保存 nano /etc/bashrc


显示内部命令的使用方法enable:

enable 显示所有已激活的内部命令

enable command 激活被禁用的内部命令

enable |wc -l 显示激活中的内部命令的数量

Linux运维学习第一周总结_Linux_08

enable -a 显示所有的内部命令

enable -a |wc -l 显示所有的内部命令的数量

enable -n 显示所有被禁用的内部命令

enable -n command 禁用某个内部命令

Linux运维学习第一周总结_运维_09


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


首先,我们学习一下显示当前时间的命令date

date

+%Y 年

+%m 月

+%d 日

+%H 时

+%M 分

+%S 秒

Linux运维学习第一周总结_Linux_10

+%w 星期

+%F 年-月-日

+%T 时:分:秒


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

Linux运维学习第一周总结_Linux_11

这样的显示很不符合我们的阅读习惯,接下来我们自己编写shell脚本执行自己的时间显示方式:

    1) 使用touch创建一个shell脚本riqi.sh

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

Linux运维学习第一周总结_Linux_12

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

Linux运维学习第一周总结_Linux_13

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

Linux运维学习第一周总结_Linux_14


六、文件的时间戳

在文件系统中,数据只有两种:数据与元数据,在元数据中存放着文件的权限、所属人、所属组和时间戳等,而时间戳又分为三类;

    1) atime 访问时间

    2) mtime 文件数据修改时间

    3) ctime 文件元数据修改时间

我们可以通过stat filename命令查看文件的元数据:

Linux运维学习第一周总结_运维_15

 

这里的touch filename 当文件不存在时,则创建一个空文件,名为filename

               当文件已存在时,则更新期时间戳

                    -a 仅更新atime,ctime

                    -m 仅更新mtime, ctime

               touch filename 更新全部时间戳。


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


在讲硬链接和软连接之前,首先了解什么是节点(inode)

    节点inode(index node)表中包含文件系统所有文件列表

    一个节点 (索引节点)是在一个表项,包含有关文件的信息 ( 元数据 ),包括: 

        文件类型,权限,UID,GID 

        链接数(指向这个文件名路径名称个数) 

        该文件的大小和不同的时间戳 

        指向磁盘上文件的数据块指针 

        有关文件的其他数据

Linux运维学习第一周总结_Linux_16



硬链接

    创建硬链接会增加额外的记录项以引用文件

    对应于同一文件系统上一个物理文件

    每个目录引用相同的inode号 

    创建时链接数递增 

    删除文件时: 

        rm命令递减计数的链接 

        文件要存在,至少有一个链接数 

        当链接数为零时,该文件被删除 

    不能跨越驱动器或分区

    语法: ln filename  [linkname ]


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

Linux运维学习第一周总结_运维_17

符号(或软)链接

    一个符号链接指向另一个文件

    ls - l的 显示链接的名称和引用的文件

    一个符号链接的内容是它引用文件的名称

    可以对目录进行

    可以跨分区

    指向的是另一个文件的路径;

    其大小为指向的路径字符串的长度;

    不增加或减少目标文件inode的引用计数;

    语法: ln -s  filename  [linkname]


Linux运维学习第一周总结_Linux_18


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


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

1. 输入输出重定向

 

    > 正确输出

    2> 错误输出

    &> 全部输出

        文件不存在时,>和>> 都能创建新文件,文件已存在时 >表示覆盖,>>表示追加

    2>&1 把错误的结果转成正确的结果

    1>&2 把正确的结果转成错误的结果


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

Linux运维学习第一周总结_运维_19


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

Linux运维学习第一周总结_Linux_20

 

2. 管道


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

 

    echo youkongma |mail -s "yuema2" guanyu


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

Linux运维学习第一周总结_运维_21

root用户查看邮件:

Linux运维学习第一周总结_运维_22


九、练习题难点


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

Linux运维学习第一周总结_Linux_23


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

Linux运维学习第一周总结_Linux_24


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

Linux运维学习第一周总结_运维_25


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

Linux运维学习第一周总结_运维_26


 3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下:

    Hello, I am 用户名,The system version is here,please help me to check it ,thanks

    操作系统版本信息Linux运维学习第一周总结_Linux_27

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

Linux运维学习第一周总结_Linux_28


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

Linux运维学习第一周总结_运维_29


十、总结

    本周是第一次学习Linux运维相关知识,一周下来的学习量很大,只能挑一些认为是重点的内容和概念写在博客里,有些内容如:安装虚拟机、man命令的用法、cp命令的运行机制等并没有写在博客里,所以有很多欠缺的地方。以后会尽量多写一些内容放在这里,就这样了。