Linux的文件系统 根文件系统(rootfs) root fileysystem

LSB,FHS(Filesystem Heirache Standard)文件系统层级结构标准,如:/etc、/usr、/var、/root、/home、/dev

/boot:引导文件存放目录,内核文件(vmlinuz)、引导加载器(bootloader,grub)都存放于此目录;
/bin:供所有用户使用的基本命令;不能关联至独立分区,OS启动即会用到的程序;
/sbin:管理类的基本命令;不能关联至独立分区,OS启动即会用到的程序;
/lib:基本共享库文件,以及内核模块文件(/lib/moudules);
/lib64:专用于x86_64系统上的辅助共享库文件;
/etc:配置文件目录(纯文本文件);
/home/username:普通用户家目录
/root:管理员的家目录;
/media:便携式移动设备挂载点;(cdrom、usb)
/mnt:临时文件系统挂载点;
/dev:设备文件及特殊文件存储位置;
	b:block device 随机访问设备
	c:character device 线性访问设备
/opt:第三方应用程序的安装位置;
/srv:系统上运行的服务用到的数据;
/tmp:临时文件存储位置

/usr:universal shared,read-only data
	bin:保证系统拥有完整功能而提供的应用程序;
	sbin:
	lib:
	lib64:
	include:C程序的头文件(header files);
	share:结构化独立的数据,例如:man,doc等
	local:第三方应用程序的安装位置;
		bin、sbin、lib、lib64、etc、share

/var:variable data files 可变数据文件
	cache:应用程序缓存数据目录;
	lib:应用程序状态信息数据;
	local:专用于为/usr/local下的应用程序存储可变数据;
	lock:锁文件
	log:日志目录及文件
	opt:专用于为/opt下的应用程序存储可变数据;
	run:运行中的进程相关的数据;通常用户存储进程的pid文件
	spool:应用程序数据池
	tmp:保存系统两次重启之间产生的临时数据
	
/proc:用于输出内核与进程信息相关的虚拟文件系统;
/sys:用于输出当前系统上硬件设备相关信息的虚拟文件系统
/selinux:security enhanced linux,selinux相关的安全策略等信息的存储位置

Linux上的应用程序的组成部分: 二进制程序:/bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin、/usr/local/sbin 库文件:/lib、/lib64、/usr/lib、/usr/lib64、/usr/local/lib、/usr/loacl/lib64 配置文件:/etc、/etc/directory、/usr/local/etc 帮助文件:/usr/share/man、/usr/share/doc、/usr/local/share/man、/usr/loacl/share/doc

Linux的文件类型 -(f):普通文件; d:目录文件 b:块设备 c:字符设备 l:符号链接文件,仅表示软链接; p:管道文件 s:套接字文件、socket;

系统管理类命令: 关机或重启 halt、poweroff 关机 reboot 重启

选项:-f:强制,不调用shutdown;-p:切断电源

shutdown
shutdown [option]... time [message]

选项:-r:reboot 重启;-h:halt 关机 ;-c:cancel 取消关机或重启

time时间表示法:
now:立刻,0亦可表示现在
+m:相对时间表示法,从命令提交开始多久之后,例如:+3;
hh:mm:绝对时间表示法,指明具体时间,24小时制;

用户登录信息查看命令:
whoami:显示当前登录有效用户
[root@localhost ~]# whoami
root

who:系统当前所有的登录会话:
[root@localhost ~]# who
root     pts/1        2018-03-21 11:25 (192.168.152.1)
root     pts/2        2018-03-21 14:15 (192.168.152.1)

w:系统当前所有的登录会话及所做的操作
[root@localhost ~]# w
 14:18:12 up  2:57,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    192.168.152.1    11:25    2:53m  0.02s  0.02s -bash
root     pts/2    192.168.152.1    14:15    0.00s  0.01s  0.00s w

bash的基础特性: (1)命令历史 history 环境变量: HISTSIZE:命令历史记录的条数; [root@localhost ~]# echo $HISTSIZE 1000

HISTFILE:命令历史文件 [root@localhost ~]# echo $HISTFILE /root/.bash_history

HISTFILESIZE:命令历史文件记录历史的条数 [root@localhost ~]# echo $HISTFILESIZE 1000

history -d #:删除命令历史中第#条命令 [root@localhost ~]# history 1 history 2 ls 3 cd 4 history [root@localhost ~]# history -d 2 [root@localhost ~]# history 1 history 2 cd 3 history 4 history -d 2 5 history

history -c:清空命令历史; history #:显示命令历史中最近的#条命令 [root@localhost ~]# history 1 history 2 ls 3 cd 4 history [root@localhost ~]# history 2 4 history 5 history 2

history -a:手动追加当前会话缓冲区的命令历史到命令历史文件中;

调用历史中的命令: !#:重复执行第#条命令 [root@localhost ~]# history 1 history 2 ls 3 cd 4 history [root@localhost ~]# !2 ls anaconda-ks.cfg Desktop install.log install.log.syslog scsrun.log

!!:重复执行上一条命令 [root@localhost ~]# history 1 history [root@localhost ~]# !! history 1 history 2 history

!string:重复执行以string开头的命令 [root@localhost ~]# history 1 history 2 ls 3 cd 4 history [root@localhost ~]# !l ls anaconda-ks.cfg Desktop install.log install.log.syslog scsrun.log

调用上一条命令的最后一个参数: !$ ESC,. alt+.

控制命令历史的记录方式: 环境变量:HISTCONTROL ignoredups 忽略重复的命令;连续且相同方为重复; ignorespace:忽略所有以空白开头的命令; ignoreboth:兼容以上两者的特性

(2)命令补全 bash执行命令:bash根据PATH环境变量定义的路径,自左而右在每个路径搜寻以给定命令名命名的文件,第一次找到即为要执行的命令; 直接补全:Tab,用户给定的字符串只有一条唯一对应的命令; 以用户给定的字符串为开头对应的命令不唯一,则再次Tab会给出列表;

(3)路径补全 把用户给出的字符串当做路径开头,并在其指定上级目录下搜索以指定的字符串开头的文件名 如果唯一,则直接补全 否则,则再次Tab,给出列表;

(4)命令行展开 ~:展开为用户的主目录 ~username:展开为指定用户的主目录 {}:可承载一个逗号分隔的列表,并将其展开为多个路径 示例如下: /tmp/{a,b}=/tmp/a,/tmp/b /tmp/{tom,jerry}/hi=/tmp/tom/hi,/tmp/jerry/hi

(5)命令的执行状态结果 成功;失败

bash使用特殊变量$?保存最近一条命令的执行状态结果
0:成功
1-255:失败
[root@localhost ~]# cat /etc/issue
Red Hat Enterprise Linux Server release 5.7 (Tikanga)
Kernel \r on an \m

[root@localhost ~]# echo $?
0

[root@localhost ~]# catt /etc/issue
-bash: catt: command not found
[root@localhost ~]# echo $?
127

[root@localhost ~]# cat /etc/issuee
cat: /etc/issuee: No such file or directory
[root@localhost ~]# echo $?
1

程序执行有两类结果:
程序的返回值;
程序的执行状态结果;

目录管理类命令: cd,pwd,ls

mkdir,rmdir
mkdir [options] /path/to/somewhere
-p:存在时不报错,且可自动创建所需的各目录,按层级递归创建
[root@localhost tmp]# ls -l
total 16
drwx------ 2 root root 4096 Mar 15 19:49 gconfd-root
srwxr-xr-x 1 root root    0 Mar 15 19:04 mapping-root
-rw-r--r-- 1 root root 1580 Mar 20 22:01 passwd
drwxr-xr-x 2 root root 4096 Mar 21 14:57 tom
[root@localhost tmp]# mkdir -p tom

[root@localhost tmp]# mkdir -p x/y/z
[root@localhost tmp]# tree x
x
`-- y
		`-- z
		
-v:显示详细信息
[root@localhost tmp]# mkdir -v mary
mkdir: created directory `mary'

-m MODE:创建目录时直接指定权限
[root@localhost tmp]# mkdir -m 755 abc
[root@localhost tmp]# ls -dl abc
drwxr-xr-x 2 root root 4096 Mar 21 15:02 abc

tree:查看目录的层级结构
	-d:只显示目录,文件不予显示
	[root@localhost tmp]# tree -d /tmp
	/tmp
	|-- abc
	|-- gconfd-root
	|-- mary
	|-- tom
	`-- x
			`-- y
					`-- z
					
	-L level:指定显示的层级数目
	[root@localhost tmp]# tree -L 2 /tmp
	/tmp
	|-- abc
	|-- gconfd-root
	|-- mapping-root
	|-- mary
	|-- passwd
	|-- tom
	`-- x
			`-- y
			
	-P pattern:只显示有指定pattern匹配到的路径
	
rmdir:删除空目录
	rmdir [option]... directory...
	-v:显示详细信息
	[root@localhost tmp]# rmdir -v mary
	rmdir: removing directory, mary
	
	-p:递归删除空目录

练习:
1、如何创建/tmp/x/y1、/tmp/x/y2、/tmp/x/y1/a、/tmp/x/y1/b、/tmp/x/y2/a、/tmp/x/y2/b
[root@localhost ~]# mkdir -pv /tmp/x/{y1,y2}/{a,b}
mkdir: created directory `/tmp/x'
mkdir: created directory `/tmp/x/y1'
mkdir: created directory `/tmp/x/y1/a'
mkdir: created directory `/tmp/x/y1/b'
mkdir: created directory `/tmp/x/y2'
mkdir: created directory `/tmp/x/y2/a'
mkdir: created directory `/tmp/x/y2/b'

2、如何创建x_m、y_m、x_n、y_n
[root@localhost ~]# mkdir -v /tmp/{x,y}_{m,n}
mkdir: created directory `/tmp/x_m'
mkdir: created directory `/tmp/x_n'
mkdir: created directory `/tmp/y_m'
mkdir: created directory `/tmp/y_n'

3、如何创建/tmp/bin、/tmp/sbin、/tmp/usr、/tmp/usr/bin、/tmp/usr/sbin
[root@localhost ~]# mkdir -pv /tmp/{bin,sbin,usr/{bin,sbin}}
mkdir: created directory `/tmp/bin'
mkdir: created directory `/tmp/sbin'
mkdir: created directory `/tmp/usr'
mkdir: created directory `/tmp/usr/bin'
mkdir: created directory `/tmp/usr/sbin'

文本文件查看类命令:
	cat、tac
	more、less、tail、head
	
	more
	more [option...] [file...]
		-d:显示翻页及退出提示
		+#:定位在第#行开始显示
		
	less
	less [option...] [file...]
	
	head
	head [option...] [file...]
		-c #:指定获取前#字节
		[root@localhost ~]# head -c 5 /tmp/passwd
		root:
		
		-n #:指定获取前#行
		[root@localhost ~]# head -n 3 /tmp/passwd
		root:x:0:0:root:/root:/bin/bash
		bin:x:1:1:bin:/bin:/sbin/nologin
		daemon:x:2:2:daemon:/sbin:/sbin/nologin
		
		-#:指定获取前#行
		[root@localhost ~]# head -3 /tmp/passwd
		root:x:0:0:root:/root:/bin/bash
		bin:x:1:1:bin:/bin:/sbin/nologin
		daemon:x:2:2:daemon:/sbin:/sbin/nologin
		
		tail
		tail [option...] [file...]
			-c #:指定获取后#字节
			[root@localhost ~]# tail -c 5 /tmp/passwd
			tom.
			
			-n #:指定获取前#行
			[root@localhost ~]# tail -n 3 /tmp/passwd
			I am tom.
			I am tom.
			I am tom.

			
		-#:指定获取前#行
		[root@localhost ~]# tail -3 /tmp/passwd
		I am tom.
		I am tom.
		I am tom.
		
		-f:跟踪显示文件新追加的内容;
		
		文件的时间戳管理工具
		touch
		
		文件:metadata元数据,data数据
		查看文件状态:stat
		[root@localhost ~]# stat /tmp/passwd
				File: `/tmp/passwd'
				Size: 1580      	Blocks: 8          IO Block: 4096   regular file
			Device: fd00h/64768d	Inode: 1336933     Links: 1
			Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
			Access: 2018-03-21 15:35:58.000000000 +0800
			Modify: 2018-03-20 22:01:10.000000000 +0800
			Change: 2018-03-20 21:58:31.000000000 +0800
			
			三个时间戳:
			access time:访问时间,atime 读取文件内容
			modify time:修改时间,mtime 改变文件内容
			changetime:改变时间,ctime 元数据发生改变
			
			touch命令:
			touch [option...] [file...]
			-a:only atime
			-m:only mtime
			-t 具体时间 [[CC]YY]MMDDhhmm.ss
			[root@localhost ~]# touch -a -t 201803211540.10 /tmp/passwd
			[root@localhost ~]# touch -m -t 201803211541.10 /tmp/passwd
			[root@localhost ~]# stat /tmp/passwd
				File: `/tmp/passwd'
				Size: 1580      	Blocks: 8          IO Block: 4096   regular file
			Device: fd00h/64768d	Inode: 1336933     Links: 1
			Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
			Access: 2018-03-21 15:40:10.000000000 +0800
			Modify: 2018-03-21 15:41:10.000000000 +0800
			Change: 2018-03-21 15:45:00.000000000 +0800
			
			-c:如果文件不存在,则不予创建