07
Windows:PE
Linux:ELF
ELF:可执行的可链接的文件格式
文件系统(rootfs):根文件系统
FHS:Linux
下面开始了解/目录下的一级子目录,有以下一些:
/boot
/boot:系统启动的时候主要用到的一些相关的文件:如内核,initrd,以及grub(MBR只是一个存储空间,起作用的是grub:bootloader,这个才是主要的程序),都在/boot/目录下
/dev:设备文件
设备文件:
块设备:随机访问(可以实现随机访问的数据),数据块(数据被分成一个一个的块)
字符设备:线性访问模型(有次序的访问)
如:键盘,显示器都是线性访问模型
特殊文件没有大小(可以看到上图大小是10,5,这些不是他们的大小),只有元数据,如上图的c设备,还有b设备
设备号:主设备号(major)和次设备号(minor)|视频中这一段会有嘈杂的响声
/etc配置文件的主要存放路径,这里主要是纯文本的配置文件
/home:用户的家目录,每一个用户的家目录通常默认为 /home/USERNAME
在自己的家目录下是有所有权限的,root的用户的家目录就是/root
root用户的家目录就是/root,没有/home
工作中的root用户不经常登录的,因为root的权限非常的大
只有在管理员的权限要做的时候才用到root用户
/lib:主要是存放库文件。
当然除了lib,还有其他存放/lib/modules:内核模块文件
静态库:Linux的是 .a
动态库: window的是.dll
Linux的是.so(shared object)称为动态库也称为(共享库)
上图表示的是:我的共享库给你用,你的ls就可以用,但是你ls移植到了另外一个环境,你的ls就不能用了,因为另一个环境没有ls的共享库,也就是途中的.so
库文件是不能单独执行的,只能被调用,因为没有访问入口
/media:/mnt:这两个是我们经常用于挂载点的目录
我们光盘放进光驱以后,必须关联到某一个树的根节点上,才能访问
/media通常挂载移动设备的
/mnt:是挂载额外的临时文件系统,cd-rom常可以挂在到这里
/misc:杂项
/opt:可选目录,第三方官方的程序的安装目录,现在比较多放在了/usr/local
/proc:这个是一个伪文件系统
这里所有显示的文件,其实是内核映射的文件,一般是内核的可调参数
所以我们所说的系统调优跟这个很大相关,但是这也是非常难理解的目录
/sys 这是另一个伪文件系统,这个不是内核映射文件,是跟硬件设备相关的属性映射文件
通常实现对硬件相关的信息映射
[[email protected] sys]# ls
block bus class dev devices firmware fs hypervisor kernel module power
/tmp:临时文件,可以用其他用户查看,还有一个临时文件目录在var/tmp下面
每一个可以在里面创建文件,当然也只能创建自己的文件(主要是因为其他属组是t权限没这是个特殊权限,其他两个是u+s,g+s。这个是o+t)
/var:可变化的文件,随着运行系统的时间,这个文件会越来越大
[[email protected] sys]# ls /var/
account cache(缓存) db games gopher lib lock(锁文件) mail opt run(存储进程,有pid) tmp (第二个临时文件目录) ypadm crash empty gdm kerberos local log(日志) nis preserve spool var
run里存放的有pid,这里存放的就是进程IP号
/bin:可执行文件,用户命令
/sbin:管理命令
s可以理解成super,所以,这两个里面放的是程序,lib放的是库,这两个程序运行的时候可能依赖于这个/lib里面的库,每一个库就有可能用到配置文件,配置文件在哪里啊,就在/etc下
/usr:这个不是user的简写,s表示的是shared ,r就是read-only
/usr表示的就是:全局的共享的只读文件
/usr/bin
/usr/sbin
/usr/lib
为什么要多这么一个路径呢
/bin和/sbin是跟系统启动相关的,而/usr/bin,和/usr/sbin是跟系统正常功能相关的,当然这只是方便大家认识做的分类,所以/usr/lib也是库文件存放路径
对于操作系统立场来讲,上面的是必须的,而下面的/usr/local/*就不是必须的,存放的是第三方软件的东西,但不影响系统的启用
/usr/local:
/usr/local/bin
/usr/local/sbin
/usr/local/lib
之前的目录没有了是不能正常启动的,但是第三方的路径下格式化了也是没有问题的,系统是可以启动的
命名规则:
1、长度不能超过255个字符;
2、不能使用/当文件名
3、严格区分大小写
Linux是没有注册表的概念
所以弄出的系统可以随时移植
我们运维的工作——这里对目录管理先作介绍
1.文件管理2.目录管理3.运行程序4.设备管理5软件管理6.进程管理7.网络管理
目录管理
之前讲过ls,cd,pwd
一、mkdir
-p:自动也创建副目录 如 mkdir -p /aaa/bbb/ccc 即使bbb不存在也会一并创建
-v:verbose 表示的是详细信息,很多都是这个v是详细信息,如tar命令。
二、tree 查看文件系统树的
mkdir -pv /mnt/test/{x/m,y}
花括号展开(命令行展开),默认将逗号前后分成两个
波浪线展开 cd ~ 自动进入当前用户的家目录
Linux重要的哲学思想之一:输出没有信息就是最好的信息
二、rmdir
rmdir (remove direction)
只能删除空目录,不是空目录它删不了
rmdir的-p选项是一脉相传的才可以删除
意思:就是子目录删了,父目录只有你这个子目录(没有其他文件),父目录才会被删除
Linux下目录和文件都是文件,所以Linux下不允许一个目录叫a,一个文件也叫a,在cp和mv命令下就要注意了,它没有隐藏扩展名之说
三、touch
touch 主要不是用来生产文件的,而是修改时间戳
时间戳:最近一次的访问时间,修改时间,改变时间
Access访问时间 modify修改时间 change改变时间
stat 显示文件的时间戳等信息---这个就是可以显示这三个参数
修改内容是access 修改属性是modify 修改改变是change
[[email protected] test]# touch -c c
改变一个文件的时间戳用touch---------黑客经常用 -a -m -t (直接修改指定的时间,具体看man touch )
改变时间戳的access用-a参数
改变时间戳的modify用-m参数
直接指定某个时间戳的时间用-t
touch -c c -c就是不创建c文件命令
为什么没有改变时间戳的改变时间的参数呢?因为改变access和modify的话,他的change就会改变了,但是如果用-t直接修改时间戳的时间,那么change不会随着变化
[[email protected] test]# touch a
[[email protected] test]# stat a
Access: 2015-07-22 05:41:14.838002612 -0400
Modify: 2015-07-22 05:41:14.838002612 -0400
Change: 2015-07-22 05:41:14.838002612 -0400
[[email protected] test]# touch -a a
[[email protected] test]# stat a
Access: 2015-07-22 05:41:29.895888459 -0400
Modify: 2015-07-22 05:41:14.838002612 -0400
Change: 2015-07-22 05:41:29.895888459 -0400
[[email protected] test]# touch -m a
[[email protected] test]# stat a
Access: 2015-07-22 05:41:29.895888459 -0400
Modify: 2015-07-22 05:41:39.797278103 -0400
Change: 2015-07-22 05:41:39.797278103 -0400
这个命令还是挺常用的命令
文本编辑器:就是编辑纯ASCII码
什么叫做ASCII:纯文本,没有任何字符,其他信息。
就是一个美国的标准,标准化,比如97就是a,65就是A,规定了一定的规则
延生的说,我们中国的汉字也是有标准的,也就是国标GB18030,GBK,GB2312,所以不同的国标标准翻译的东西可能是不一样的。
Unicode代码:实现全球化。全球的常用字符都保存在Unicode,方便全球化
四、Nano
nano - Nano‘s ANOther editor, an enhanced free Pico clone
这个nano就是纯文本编辑的一个命令,但是功能非常小,所以以后我们会讲一个vim
五、rm
rm=删除
Type是查看命令类型,file是查看文件类型
[[email protected] test]# type cd
cd is a shell builtin
[[email protected] test]# type rm
rm is aliased to `rm -i‘ 避免误操作默认有-i参数,意思是“每次删除前提示”
如果不想它提示就用 \rm
使用命令自身的意思,而不是用别名,可以加\,当然针对没有别名的意义不大
-f 强行删除, 删除目录用-r
rm -rf 对于关于管理员,这种命令是非常致命的
08
六、cp
cp :copy
cp SRCFILE DESTFILE
cp file1 file2 file3(这种是不允许的,不能多个文件合并成一个文件,所以多个源目标文件,目的地一定是一个目录)
cp如果源是目录,那么目的地不能是已经存在的文件,可以是已经存在的目录
对于copy来说,只有一个目的地,一个文件到一个文件,多个文件到多个目录
第一条是复制到/tmp/下,名字依然是passwd
第二条是复制到/tmp/下,名字修改成test
cp默认是不复制目录的,只复制文件
要复制整个目录用选项-r,或者是-R,都是递归,一样的
用-r来复制目录
-f强行复制
-i就是默认的 别名:cp就是 -i
谁复制的,属主属组就是谁的,会随用户是什么就修改成什么,但是用-p就可以保留
如果是-p选项,就会保留了属组,不会改变属组
cp -a 就是保留文件的所有的属性,比-p保留的更多
-a:归档复制,常用于备份东西,因为什么都保留了
记住 -a这一个选项,cp 的时候可以复制所有的属性
-L复制的如果是链接的话,复制出来的是文件,是链接指向的那个文件,而不是链接。默认不加-L的话也是这样子的。
-P 保持复制链接,而不是链接指向的文件
七、mv
mv :move ------------mv SRC DEST
移动文件,移动文件跟cp基本上是一样的
mv移动目录的时候不需要-r选项
不能拿一个目录 mv 到一个已存在名字的 文件 下
如果都是目录,他会mv到目录下,而不会覆盖掉目录的
[[email protected] tmp]# mkdir /tmp/abc
[[email protected] tmp]# touch /var/tmp/123
[[email protected] ~]# mv /tmp/abc/ /var/tmp/123
mv: cannot overwrite non-directory ‘/var/tmp/123’ with directory ‘/tmp/abc/’
[[email protected] ~]# mkdir /var/tmp/aaa
[[email protected] ~]# mv /tmp/abc/ /var/tmp/aaa
[[email protected] ~]# cd /var/tmp/aaa/
[[email protected] aaa]# ls
abc
mv 还可以重命令 mv abc aaa 可以直接操作目录,也可以直接操作文件
[[email protected] tmp]# type mv
mv is aliased to `mv -i‘
-f强制进行覆盖
-t 先指定目标,再指定源
八、install
install 安装(我们之所以会讲这个是因为以后在rpm包制作的时候会用到这个命令,况且对于我们而言,这也是另外一种复制文件的方法)
install - copy files and set attributes
源是多个,目标只能有一个
其实这个跟我们的cp用法是一样的
install -d DIRECOTRY ... :创建目录 (-d选项是创建目录,默认是创建文件)
install的一个特性:用install复制的话,会复制成有执行权限的
如果用-m选项可以指定权限,不指定就是上面的权限
install 没有-R,所以不像copy可以复制目录,所以一般来讲install只能copy文件的,也就是复制文件的,不能复制目录的,所以源只能是文件的
下一次课:文本处理命令
cat,more,less,head,tail,cut,sort,uniq,grep
管道和重定向> < >> << & 之类的
用户、组、权限
正则表达式
这些东西讲完了之后,我们会讲一下bash及其特性,然后引用shell编程