linux 文件与目录管理
Linux的目录结构为树状结构,最顶级的目录为根目录**/**。
处理目录的常用命令:
ls(list files):列出目录及文件名
cd(change directory):切换目录
pwd(print work directory):显示目前的目录
mkdir(make directory):创建一个空的目录
rmdir(remove directory):删除一个空的目录
cp(copy file):复制文件或目录
rm(remove):删除文件或目录
mv(move file):移动文件与目录,或者修改文件与目录的名称
tree:以树型结构展示目录内容
-
ls
ls -a 列出全部的文件,连通隐藏文件一起列出来 ls -ld 仅列出目录本身,而不是列出目录内的文件数据等 ls -l 长数据串列出,包含文件的属性与权限等等数据
-
pwd
pwd 显示目前所在目录 pwd -P 显示出确实的路径,而非使用链接(link)路径,P是大写
-
mkdir
mkdir -m 配置文件的权限 mkdir -p 创建多层目录
-
rmdir
rmdir -p 一次性删除多级空目录 **删除非空目录使用rm命令**
-
cp
copy -a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容 copy -d 若来源档为链接档的属性,则复制链接档属性而非文件本身 copy -f 若目标文件已经存在且无法开启,则移除后在尝试一次 copy -i 若目标档已经存在时,在覆盖时会先询问动作的进行 copy -l 进行硬式链接(hard link)的链接档创建,而非复制文件本身 copy -p 连同文件的属性一起复制过去,而非使用默认属性 copy -r 递归持续复制,用於目录的复制行为 copy -s 复制成为符号链接档 (symbolic link),亦即『捷径』文件 copy -u 若 destination 比 source 旧才升级 destination !
-
rm
rm -f 忽略不存在的文件,不会出现警告信息 rm -i 互动模式,在删除前会询问使用者是否动作 rm -r 递归删除
-
mv
mv [-fiu] source destination mv [options] source1 source2 source3 .... directory mv -f 如果目标文件已经存在,不会询问而直接覆盖 mv -i 若目标文件已经存在,会询问是否覆盖 mv -u 若目标文件已经存在,且source比较新,才会升级
-
tree
-d:只显示目录 -L:指定显示的层级数据 -P pattern:只显示由指定wild-card pattern匹配到的路径
#!/bin/bash # 定义普通变量 CITY=SHENZHEN # 定义全局变量 export NAME=cdeveloper # 定义只读变量 readonly AGE=21 # 打印变量值 echo $CITY echo $NAME echo $AGE # 删除CITY变量 unset CITY echo $CITY ~
Linux 文件内容查看
查看文件时间戳
每个文件有三个时间戳:
- atiem(access time)上一次访问时间
- mtime(modify time)文件的修改时间
- ctime(change time)元数据修改时间
mtime只有修改文件内容才会改变,更准确的说是修改了它的data block部分;而ctime是修改文件属性时改变的,确切的说是修改了它的元数据部分,例如重命名文件,修改文件所有者,移动文件(移动文件没有改变datablock,只是改变了其inode指针,或文件名)等.当然,修改文件内容也一定会改变ctime(修改文件内容至少已经修改了inode记录上的mtime,这也是元数据),也就是说mtime的改变一定会引起ctime的改变。
stat [option] filename
[liusongle@localhost Desktop]$ stat greptest
File: ‘greptest’
Size: 1 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 10718 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/liusongle) Gid: ( 1000/liusongle)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2023-07-20 13:06:59.221081996 +0800
Modify: 2023-07-20 13:06:59.221081996 +0800
Change: 2023-07-20 13:06:59.222081986 +0800
Birth: -
[liusongle@localhost Desktop]$
文件基本操作命令
cat 从第一行开始显示文件内容
tac 从最后一行开始显示
nl 显示的时候,顺道输出行号
more 一页一页的显示文件内容
less 与more类似 但是可以往前翻页
head 只看头几行
tail 只看末尾几行
windows与linux文本格式转化工具:dos2unix
windows->linux:dos2unix
linux->windows:unix2dos
文件通配符模式
* 匹配零个或多个字符,但不匹配“.”开头的文件,即隐藏文件
? 匹配任何单个字符
~ 当前用户家目录
~mage 用户mage家目录
~+和. 当前工作目录
~- 前一个工作目录
[0-9] 匹配数字范围
[a-z] 字母
[A-Z] 字母
[wang] 匹配列表中的任何的一个字符
[^wang] 匹配列表中的所有字符以外的字符
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母,表示 a-z
[:upper:]: 任意大写字母,表示 A-Z
[:alpha:]: 任意大小写字母
[:alnum:]:任意数字或字母
[:blank:]:水平空白字符
[:space:]:水平或垂直空白字符
[:punct:]:标点符号
[:print:]:可打印字符
[:cntrl:]:控制(非打印)字符
[:graph:]:图形字符
[:xdigit:]:十六进制字符
[root@localhost Desktop]# touch file{a..z}.txt file{A..Z}.txt file{0..9}.txt
[root@localhost Desktop]# ll file{0..9}.txt
-rw-r--r--. 1 root root 0 Jul 20 10:24 file0.txt
-rw-r--r--. 1 root root 0 Jul 20 10:24 file1.txt
-rw-r--r--. 1 root root 0 Jul 20 10:24 file2.txt
-rw-r--r--. 1 root root 0 Jul 20 10:24 file3.txt
-rw-r--r--. 1 root root 0 Jul 20 10:24 file4.txt
-rw-r--r--. 1 root root 0 Jul 20 10:24 file5.txt
-rw-r--r--. 1 root root 0 Jul 20 10:24 file6.txt
-rw-r--r--. 1 root root 0 Jul 20 10:24 file7.txt
-rw-r--r--. 1 root root 0 Jul 20 10:24 file8.txt
-rw-r--r--. 1 root root 0 Jul 20 10:24 file9.txt
# 显示etc目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录
[root@localhost etc]# touch l{0..9}abc.txt
[root@localhost etc]# ls l[0-9]*[a-z]
l0abc.txt l2abc.txt l4abc.txt l6abc.txt l8abc.txt
l1abc.txt l3abc.txt l5abc.txt l7abc.txt l9abc.txt
# 显示/etc目录下以,任意一位数字开头,且以非数字结尾的文件或目录
[root@localhost etc]# touch {0..3}{a..c}.txt
[root@localhost etc]# ls [0-9]*[^0-9]
0a.txt 0c.txt 1b.txt 2a.txt 2c.txt 3b.txt
0b.txt 1a.txt 1c.txt 2b.txt 3a.txt 3c.txt
# 显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录
[root@localhost etc]# ls /etc/[^[:alpha:]][[:alpha:]]*
/etc/0a.txt /etc/0c.txt /etc/1b.txt /etc/2a.txt /etc/2c.txt /etc/3b.txt
/etc/0b.txt /etc/1a.txt /etc/1c.txt /etc/2b.txt /etc/3a.txt /etc/3c.txt
# 显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符的文件或目录
[root@localhost etc]# ls -d rc[0-6]*
rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d
# 显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录
[root@localhost etc]# ls [mnrp]*.conf
man_db.conf nfs.conf ntp.conf pnm2ppa.conf resolv.conf
mke2fs.conf nfsmount.conf numad.conf radvd.conf rsyncd.conf
mtools.conf nsswitch.conf pbm2ppa.conf request-key.conf rsyslog.conf
# 只显示etc下的非隐藏文件和目录
[root@localhost etc]# ls -d /etc/*/
/etc/abrt/ /etc/gconf/ /etc/ndctl/ /etc/sane.d/
/etc/alsa/ /etc/gcrypt/ /etc/NetworkManager/ /etc/sasl2/
······