马哥linux0728课程内容

课堂学习内容

 

-ahistory list –.bash_histroy 保存历史列表到历史文件

-cclear history list 清空历史列表

-d deletehistory entru 清除历史列表某一条命令

-rread .bash_history 读历史文件中的命令到历史列表

-n 读历史文件中没有读过的命令到历史列表(例如另外一个终端登录输入的命令写到了历史文件,但是这边没有读过,就是读到现在的历史列表)

-w 将历史列表写到指定的其他文件中(我们可以通过变量来修改历史文件)

-p 将执行的命令不写入历史列表

-s 将命令放入历史列表,但是不执行

 

History的相关变量

HISTSIZE:历史列表记录条数

HISTFILESIZE:历史文件记录条数

HISTFILE:指定历史文件

HISTTIMEFORMAT:让历史命令显示其他的一些选项

HISTCONTROL(控制变量)= ignoredups(忽略重复),ignorespace(忽略命令前带空格命令),ignoreboth(忽略重复和忽略命令前带空格命令的结合体),erasedups(删除重复的行,不论命令在不在一起)

 

 调用上一层命令的方法

!!

Ctrl+p

方向键

!-1

指定命令执行这条命令的下一条命令

Ctrl+n

 

调用历史某个字符串开头的行

!string

调用历史包含某个字符串的行

!?string

调用上一个历史列表中多个参数的方法

!^ 调用第一个参数

!$ 调用最后一个参数

!:2调用第二个参数

!* 调用命令行的所有参数

 

帮助文件

Man和info

Info的帮助相比man会更详细

 

文件系统

FHS文件分层标准

/boot引导文件和系统内核

/bin普通用户相关的二进制程序

/sbin管理员相关的二进制程序

/lib/modules存储各种驱动

/lib6464位库文件

/etc存储配置文件

/home普通用户的家目录

/media/misc(centos 6自动挂载点)

/proc虚拟的进程和内核的一些信息

/proc/meminfo内存信息

/proc/cpuinfocpu信息

/proc/partitions分区信息

echo“- – -” > sys/class/scan_host/host2/scan

增加硬盘时,免重启刷新硬盘

/sys存储硬件信息 (属于内存信息,虚拟的)

/opt第三方软件存储

/tmp临时文件

/usr操作系统软件资源存储位置

/usr/local

/usr/share/manman帮助

/usr/share/docdoc帮助

/usr/share/dict字典

/var存放日志及可变信息位置

/var/log

/var/www

/var/ftp

/dev设备存储位置

/dev/null/dev/zero

俩个特殊设备,属于字符设备

/dev/random随机数

/dev/tty终端设备

/srv

/root

 

查看文件各项属性及权限

shat

三个时间戳

Accesstime :访问时间. Atime,读取文件的内容

(读取文件时的时间的前提是,mtime 要比atime 新)

Modifytime :修改时间. Mtime,改变文件内容(数据)但是内容改变,元数据也会改变.

Changetime :改变时间,ctime.元数据发生改变的时间

1.jpg

2.jpg

3.jpg

ls 的用法

-a 显示所有文件夹

-R 递归,进入到查看目录的每个文件夹

-r 逆序排序,默认是数字带字母的排序

-S 按文件大小排序

-tlmtime顺序查看文件

4.jpg

-ld目录和符号连接信息(表示只显示目录本身属性,而不是其内容)

-1 文件分行显示(行排序改变成列排序)

-S 按文件从大到小排序

-u 配合-t选项,显示并按照atmie从新倒旧排序

-U 不排序,按目录存放顺序显示

 

Mangolb :通配符的man帮助

配合IS使用的文件通配符

匹配零个或多个字符

匹配任何单个字符

当前用户家目录

~username用户家目录

~+ 当前工作目录

~- 前一个工作目录

[0-9]匹配数字范围例:lsf[1-3]

[a-z]匹配大小写字母  例:字母顺序的排序是aAbBcCdD

[A-Z]匹配大小写字母  例:字母顺序的排序是aAbBcCdD

[wxc]匹配列表中的任何的一个字符

[^wxc]匹配列表中的所有字符以外的字符(^取反符)

 

touch命令的用法

touch[OPTION]… FILE…

-a:改变atime时间,但是ctime时间也会跟着改变.

5.jpg

-m:改变mtime时间,但是ctime时间也会跟着改变6.jpg

-t 设置文件时间戳(默认修改atime时间和mtime时间)

-c 不创建文件,如果此文件存在则刷新该文件时间戳

 

cp命令的是使用方法

-f –-force强制覆盖,如果文件存在则删除将文件改名

-r 递归(复制目录必须使用的选项)可以复制目录及内部所有的内容

-I 交互式

-a 归档(属于备份,保留源文件所有属性)

-d–-no-dereference   –preserv=links 不复制原文件,只复制链接名

–preserv=[ATT_LIST]复制原文件内容到链接文件中

Mode:权限

Ownership:属主属组

Timestamp:时间

Links:链接名文件

Xattr:扩展文件属性

Context:上下文

All:所有

-p 等同于 –-preserv=mode,ownership,timestamp

-v–-verbose 显示复制过程

 

练习题

1、   使用别名命令baketc,每日将/etc/目录下所有的文件,备份到/testdir/下的独立的新目录下,并要求新目录的格式为backupYYYY-MM-DD,备份过程可见

7.jpg

2.先创建/testdir/rootdir目录,再复制/root所有下啊文件到该目录内,并要求保留原有权限8.jpg

显示当前shell进程所有可用的命令别名

alias

定义的别名需重新登录才生效,如果不想重新登录,有以下方法实现

Source /path/to/config_file

. /path/to/config_file

.和source等价

 

撤销别名 unalias

 

在命令行中定义的别名,仅对当前shell进程有效,而且重启失效

如果想永久有效,要定义在配置文件中

仅对当前用户:~/.bashrc

对所有用户有效:/etc/bashrc

 

mv命令的用法

mv [OPTION]… [-T] SOURCE DEST

mv [OPTION]… SOURCE… DIRECTORY

mv [OPTION]… -t DIRECTORY SOURCE

-I 交互式 例:如果移动的目标已存在,询问覆盖不覆盖

-f 强制

 

rm 命令的用法

常用选项

-i 交互式

-f 强制

-r 递归

 

安装tree

rpm –I /run/media/root/CentOS\ 7\x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm

即可完成安装

tree 命令的用法

tree –L level :显示几层目录树结构

-d 只显示目录,不显示文件

 

mkdir 创建目录

-p 存在与不报错,且可自动创建所需目录

例:mkdir dir1/dir2/dir3/dir4 目录全不存在,带上这个选项,可以忽略错误,直接创建到第四层目录.

-v 显示详细信息

-m创建目录时直接指定权限

 

rmdir删除目录命令

这个命令只能删除空目录

 

练习

1,如何创建/testdir/dir1/x,/testdir/dir1/y,/testdir1/dir1/x/a,/testdir1/dir1/x/b, /testdir1/dir1/y/a, /testdir1/dir1/y/b

9.png

2,如何创建/testdir/dir2/x, /testdir/dir2/y,

/testdir/dir2/x/a, /testdir/dir2/x/b

10.png

3.如何创建/testdir/dir3, /testdir/dir4, /testdir/dir5,/testdir/dir5/dir6, /testdir/dir5/dir711.png

Inode (index node)表中包含文件系统所有的文件列表

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

文件类型,权限,UID,GID

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

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

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

有关文件的其他数据

 

一个分区中,每个节点号是位移的

我们在boot文件夹中做了相关的实验.

12.png

节点有51200个

13.png

14.png

我们可以看到挂载点的利用已经满了,但是磁盘空间还有很多.所以验证了节点也是占用磁盘空间的,虽然磁盘看到还有容量,但是可能就是节点空间占满了·


实现俩个文件同一个节点(inode)号

ln命令 (link )

15.png

节点编号在同一分区如果一样,就是一个文件

硬链接不能跨文件系统,不能跨分区.

软链接的inodes节点号是不同的,因为他们不是同一个文件.

   硬链接不能对目录进行操作

   目录的inodes的可以变化,方法就是通过增加这个目录下的目录就可以,因为每个父目录的子目录下都有个..目录是指向父目录

 

在centos6里面节点号为2为分区的根(挂载点),节点号为1都是虚拟目录

 

在centos 7里面节点号为128为分区的根(挂载点),2为虚拟目录

 

软链接

本质上不是同一个文件.

原始文件的相对路径:是相对与软链接文件的路径,而不是相对与当前工作目录的路径

ln–s 原始文件路径(filename)软链接(linkname)

 

每一个文件的数据分成两个部分

元数据放在inode table(节点表)里面

数据放在block(块)当中

 

每一个文件的节点的条目(inode entry)

 

文件引用一个是inode号

人是通过文件名来引用一个文件.

一个目录是目录下的文件名和文件inode号之间的映射

一个分区一个独立的索引表

 

通过inode节点表来理解cp和rm和mv命令

cp命令的理解

分配一个空闲的inode号,在inode表中生成新条目

在目录中创建一个目录项,将名称与inode编号关联,

拷贝数据生成新的文件

rm命令的理解

链接数递减,从而释放的inode号可以被重新使用

把数据块放到空闲列表

删除目录项

数据实际不会马上被删除,但当另一个文件使用数据块时将被覆盖.

mv命令的理解

如果mv命令的目标和源在相同的文件系统,作为mv命令

用新的文件名创建对应的目录项

删除旧目录项条目对应的旧的文件名

不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

如果目标和源在一个不同的文件系统,mv相当于cp和rm

 

file命令的用法

-b 列出文件的辨识结果,但是不显示文件名

-c详细显示指令过程,便于排错或分析程序执行过程

-f 列出文件中文件名的文件类型(例将多数文件名写入一个文件执行这条命令,就可以批量显示)

-F使用指定分隔符号替换输出文件名后默认的“:”分隔符

(例file –F”–” 文件名)

-I输出mime类型的字符串

-L查看对应软链接对应文件的文件类型

-z 尝试去解读压缩文件的内容

 

 

标准的输入输出

 

程序:指令+数据

读入数据:Input

输出数据:Ouput

打开的文件都有一个fd:file descriptor(文件描述符)

可以在proc中看到

Linux给程序提供三种i/o设备

标准输入(STDIN)-0 默认接受来及键盘的输入

标准输出(STDOUT)-1 默认输出到终端窗口

标准错误(STDERR)-2 默认输出到终端窗口

(STD=stardard标准)

I/O重定向:改变默认位置

STDOU和STDERR可以被重定向到文件:

命令 操作符号 文件名

支持的操作符号包括

>把STDOU重定向到文件

2>把STDERR重定向到文件

&>把所有输出重定向到文件

>这个符号会使文件内容覆盖

>>这个符号是附加到这个文件中,不会覆盖原有内容

 

Set命令可以调整文件是否可以覆盖

Set–C 禁止将文件内容覆盖到已有文件,但可追加

Set+C 允许覆盖

>|强制覆盖

2>>追加重定向错误输出数据流到文件中

标准输出和错误输出各自定向至不同位置

COMMAND> /path/to/file.out 2> /path/to/error.out

合并标准输出和错误输出为同一个数据流进行重定向

&>覆盖重定向

&>>追加重定向

COMMAND> /path/to/file.out 2>&1 (顺序很重要就要放到后面

)

COMMAND>> /path/to/file.out 2>>&1

Find/etc –name passwd 2> /dev/null

原创文章,作者:Kartik,如若转载,请注明出处:http://www.178linux.com/28192