1、目录管理
1.1、Linux的目录结构
.:当前目录
..:上一级目录
/:根目录
/bin:二进制,可执行的命令
/boot:引导,操作系统用于引导系统启动的文件,内核、grub
/dev:设备文件
Linux的设备类型:
字符设备:c,线性设备
块设备:b,随机设备
/etc:配置文件
/home:用户的家目录,/home/USERNAME,jerry,/home/jerry
/root:管理员的家目录
/lib,lib64:库文件
/media:挂载点目录,通常用于挂载便携性设备
/mnt:挂载点目录,挂载额外的文件系统
/misc:备份目录
/opt:可选目录,通常第三方软件偶尔安装于此路径下
/proc:伪文件系统:内存中内核的映射
/selinux:安全加强的Linux
/srv:伪文件系统,通常用于访问硬件设备属性信息
/tmp:临时文件目录
/usr:储存只读文件
/var:经常会发生变化的文件:比方说日志等
1.2、linux下的文件以及文件的目录命名规则:
1.长度不能超过255个字符
2.不能使用/(斜线)当文件名, 建议不要使用特殊字符
3.严格区分大小写
1.3、目录管理常用命令
cd 更换工作目录用法:cd [DIRECTORY]
cd .. 返回上级目录
cd ~ 返回家目录
cd 回家目录
cd - 在上个目录和当前目录之间切换
cd ~USERNAME 切换到USERNAME的家目录
# cd /usr/share #切换到share目录下
pwd:显示当前目录
dirname:显示指定路径的目录
# dirname /usr/bin/ /usr # dirname a/b/ a # dirname a .
mkdir建立目录用法:mkdir [OPTION] DIRECTORY
-p:父目录 如果我们指定z的话,z的父目录y不存在的话会自动先创建y,如果y的父目录x不存
在的话会自动先创建x
-v:显示创建过程
# mkdir /tmp/x1 #在tmp下创建x1 # mkdir /tmp/x2/hello #在tmp下的x2下创建hello,因为x2不存在,所以会报错,不能创建,要使用-p选项 mkdir -pv /tmp/x2/hello 命令行展开: /mnt/test2/ a_b,a_c,d_b,d_c {a,d}_{b,c} # mkdir -pv /mnt/test2/{a,d}_{b,c} mkdir: created directory `/mnt/test2' mkdir: created directory `/mnt/test2/a_b' mkdir: created directory `/mnt/test2/a_c' mkdir: created directory `/mnt/test2/d_b' mkdir: created directory `/mnt/test2/d_c'
/mnt/test/x/m /mnt/test/y 这个怎么同时创建?
[root@Oracle ~]# mkdir -pv /mnt/test/x/m /mnt/test/y [root@Oracle ~]# mkdir -pv /mnt/test/{x/m,y} # {}花括号展开 ~USERNAME波浪线展开
rmdir(remove directory):删除目录,只能用于删除空目录
-p:父目录
-v:显示详细过程
# rmdir -pv /root/x/y/z rmdir: 正在删除目录 "/root/x/y/z" rmdir: 正在删除目录 "/root/x/y" rmdir: 正在删除目录 "/root/x" rmdir: 正在删除目录 "/root" rmdir: 删除目录 "/root" 失败: 目录非空
注:加了-p后,只能删除一线单传的目录:即把z删除后,y目录 空了,就会把y目录删除,当y 删除后,x目录空了,就会把x 目录删除,但是root不空,所以不能删除root目录。
2、文件的管理
2.1、文件的类型
Linux文件类型:
普通文件(-):a.html,b.txt,c.ppt,ls
目录文件(d):
特殊文件:
块设备文件(b):
字符设备文件(c):
符号链接文件(l):
命名管道文件(p):pipe
套接字文件(s):socket
判断普通文件的内容类型,使用file命令:#file 命令
2.2、文件的权限
目录权限:
r:可以对目录执行ls命令,但不允许使用-l选项,而且,不能cd到目录中;
w:可以在目录创建文件;
x:可以对目录执行ls -l 命令,且能够cd进去。
文件系统安全模型:
属主 属组 其它
u, g, o
---:000 --> 0
--x:001 --> 1
-w-:010 --> 2
-wx:011 --> 3
r--:100 --> 4
r-x:101 --> 5
rw-:110 --> 6
rwx:111 --> 7
3位二进制对应一个8进制
4位二进制对应一位16进制
0,9,A,B,C,D,E,F
F:1111
9:1001
2.3、文件管理常用命令
cat、tac、more、less、head、tail 显示文件
cat 顺序显示整个文件 cat filename
-n:显示行号
# cat -n /etc/sysctl.conf
从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.
将几个文件合并为一个文件:cat file1 file2 > file
tac 逆序显示文件
more 满屏显示文件内容,向后翻,在翻至文件尾部之前允许向后翻 敲空格键:下一屏,按q结束
-N:显示N行
+N:从第N行开始显示
# more /etc/sysctl.conf
less:向前翻,在翻至文件头部之前允许向前翻敲b键:往前翻一屏回车键,往前翻一行
head:文件的前n行 n默认为10,且默认不显示文件名
-q:隐藏文件名
-v:显示文件名
-n N或-N::显示N行
-c N:显示N个字节
head -v -8 /etc/sysctl.conf ==> /etc/sysctl.conf <== ...
tail:文件的后n行
-n N或-N::显示N行
-f:查看一个文件的尾部内容后,不退出,等待并显示新增的行; 退出使用Ctrl+C结束
文件的创建和删除:在Linux下,目录和文件是不能同名的,在Windows下,也不能,因为Windows下的文件都有后缀
touch
# touch a #创建a文件
touch:主要命令不是用来创建文件的,是用来修改时间戳的
时间戳:访问时间,修改时间,改变时间
-c:不创建任何文件
-a:只改变访问时间 访问时间改变,改变时间也会改变
-m:只改变修改时间 修改时间改变,改变时间也会改变
-t:指定修改时间到某个指定时间,格式为[CC]YYMMDDhhmm.ss
stat:显示文件或文件系统的状态信息
# stat a #显示a文件或a文件系统的状态信息 File: `a' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 802h/2050d Inode: 131089 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2015-03-05 06:17:01.535994188 -0500 #访问时间 Modify: 2015-03-05 06:17:01.535994188 -0500 #修改时间 Change: 2015-03-05 06:17:01.535994188 -0500 #
创建文件,可以使用文件编辑器 文本编辑器只是编辑纯ASCII码的
word不是文件编辑器,只是字处理器
nano、vim:文本编辑器
rm:删除文件
-i:删除前提醒
-f:强行删除
-r:删除目录 删除目录下所有的文件
# rm hello 删除hello
注:为什么会提示,因为这里的rm命令不是源生的rm命令,是被修改后的rm命令,是rm -i的别名,(命令别名),-i 交互式,如果你删的话,就跟你交互一下,问你要不要删因为现在是管理员,为了避免误删,所以有这个提示,普通用户没有提示
# \rm a #加了\后就没有提示,就是原来的rm命令 # rm -rf / #删除根目录,所以一定要小心使用
命令别名:
alias
\COMMAND:使用命令自身,而不使用与命令名称同名的别名
cp:copy 复制和移动文件 cp SRCFILE DEST
-r 或 -R : 复制目录及及目录中的文件的,实现递归复制
-f : 强行复制,如果目标文件存在直接覆盖;如果文件目标不能打开,先把它删了,再重试
-i : 交互式,覆盖前提醒确认
-p : 复制文件后保留原有的属主、属组、权限以及时间戳
-a : 全部复制,归档
复制文件能不能把一个文件复制为另外一个文件(能),能不能把一个文件复制为多个文件(不能),把一个文件复制为多个目标(不能),可不可以把多个文件复制为一个文件(不能),可不可以把多个文件复制到一个目录(能),可不可以把多个文件复制为多个文件(cp不能,可以使用脚本实现)
cp file1 file2 file3
cp命令只有最后一个是目标,此前的所有都是源,不允许一个源多个目标,也不允许多个源多个目标
# cp /etc/passwd /tmp/ #把etc目录下passwd文件复制到tmp目录下,并保持原来的名字 # cp /etc/passwd /tmp/test #复制etc目录下passwd文件到tmp目录下。
注:如果目标test不存在,则复制到tmp下并命名为test。如果test存在的话,则看是目录还是文件,是文件则提示我们 是不是覆盖掉,即删除原来的test文件,将passwd复制过来重新命名为test;是目录,则把passwd放到test目录下,并保存为原来的名字
# cp /etc/passwd /etc/issue /etc/inittab /tmp/abc cp: 目标"/tmp/abc" 不是目录 #说明多个源 目标就必须是目录
cp命令默认下不会复制目录,如果要复制目录,cp有个递归选项:-R或-r都可以,即复制目录及目录下的所有文件
# cp /etc/init.d/ /tmp/ cp: 略过目录"/etc/init.d/" [root@Oracle ~]# cp -r /etc/init.d /tmp/passwd passwd是tmp下的一个文件 passwd -> rc.d/init.d
注:创建了一个链接,而且是指向当前的链接文件,但是是错的,因为tmp下没有init.d这个文件在Linux上显示位红色
# cp -r /etc/init.d/ /tmp/hello #复制etc目录下init.d目录到tmp目录下,创建并命名为hello
mv 移动文件及目录 用法:mv [OPTION]...SOURCE DEST
-f:强行移动,如果目标文件存在直接覆盖;如果文件目标不能打开,先把它删了,再重试
-i:交互式,移动覆盖前提醒确认
-b:若需覆盖文件,则覆盖前先行备份。
# mv /etc/abc /tmp/def #将/etc/abc移动到/tmp/下,并重命名为def
通配符:bash支持文件名通配,globbing
*:任意长度的任意字符
?:任意单个字符
[]:指定范围内的任意单个字符
[0-9]:所有的数字
[a-z]或[A-Z]所有的字母
[0-9a-z]或[0-9A-Z]所有的数字和字母
字符集和:
[:digit:] :所有的数字,相当于0-9 [0-9],[[:digit:]]
[:lower:] :所有的小写字母
[:upper:] :所有的大写字母
[:alpha:] :所有的数字
[:alnum:] :相当于[0-9a-z]所有的数字和字母
[:space:] :空白符号
[:punct:] :所有标点符号
[^]:脱字符,取反,指定范围外的任意但个字符
# cp -v /etc/i* /tmp/ #将etc目录下以i开头的文件复制到tmp下 # cp /etc/*.conf /tmp/ #将所有已.conf结尾的文件复制到tmp下 # cp /etc/i*.conf /tmp/ #以i开头,后面跟任意字符,最后以.conf结尾 # cp /etc/i?.conf /tmp/ #以i开头,后面跟任意一个字符,最后以.conf结尾 # cp /etc/i[abcd].conf /tmp/ #以i开头,后面跟abcd中任意一个字符,最后以.conf结尾 # cp /etc/i[abcd]*.conf /tmp/ #以i开头,后面跟abcd中任意一个字符,后面再跟任意一个字符,最后以.conf结尾