Linux文件与目录管理

本文详细介绍了Linux系统中的文件与目录管理,包括切换目录、执行文件路径变量、查看和操作文件、文件复制、删除、移动的技巧,以及如何添加路径到环境变量。文章还讨论了文件权限、隐藏属性、文件类型查看以及各种命令的查询和文件查找方法。通过实例解析,帮助读者更好地理解和掌握Linux命令行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux的命令是区分大小写的

目录相关的操作
  1. 切换目录的命令是cd
  2. .代表的是此层目录
  3. ..代表上层目录
  4. -代表前一个工作目录
  5. ~代表是目前用户身份的主文件夹
  6. pwd 显示当前的目录
  7. mkdir 新建一个目录
  8. rmdir 删除一个空目录

需要注意的是:在所有的目录下都会存在两个目录,分别是.和..,代表此层和上层目录意思。你会发现根目录下,也同样存在这两个目录,根目录下的上层目录也就是根目录自己。

每个用户的主目录/home/[username]

cd //不带任何目录就是回到自己当前的主文件夹
pwd //显示当前目录,可以在后面携带参数 -p就是显示当时真实路径,而不是连接路径。
mkdir //为创建一个目录,有两个参数
mkdir -m 711 //[-m]参数是设置目录权限
mkdir -p test/test1/test2 //创建多层目录
rmdir test//该方法删除目录,必须该目录下不能存在其他的目录和文件,也就是说是空目录。

rmdir -p test/test1 //该参数可以上层的空目录一齐删除。
rm -r test//该命令是将目录下的所有东西删除。
执行文件路径变量:$PATH

命令ls的文件名:/bin/ls,大家一定好奇为什么我们可以在任何地方执行/bin/ls这个命令,就是在系统环境变量中我们配置了/bin,所以系统直接找到,也就执行了。

当环境变量中有多个命令的同名,先找到哪个就执行哪个。

echo $PATH//查询当前用户下的系统的环境变量。

但是话又说回来了,是不是有些命令没有配置到环境变量下,就无法在其他任何地方执行,不一定,你可以写执行该命令的绝对路径。

ifconfig eth0//该查询ip命令一般用户是执行不了,该命令的文件名/sbin/ifcongig

/sbin/ifconfig/eth0 一般用户可以这么操作。

你记住操作系统的命令,要么你把它的路径添加到系统环境变量下,要么你在执行该命令必须写命令的绝对路径。

mv /bin/ls /root//该命令是将ls文件移动到/root下
cd /root
ls//尽管你将ls命令移动到/root下,你当前也是在/root下,但是你是无法直接执行

/root ls 就ok啦
将某一路径添加到环境变量下
PATH=$PATH:/root//将/root目录添加到环境变量下。
(注意在linux 环境变量中是同:分隔,这个和window 不同,window是;分隔,这点需要注意点)
查看文件与目录
ls 目录名称
  • -a列出全部的文件,连同隐藏的文件,一起列出来。
  • -A列出全部文件,但是不包括..和.
  • -d仅列出目录本身,而不是列出目录的文件数据。
  • -F这个参数会列出文件的数据类型。*代表是可执行文件,/代表是目录,=代表socket文件,|代表是FIFO文件。
  • -h将文件容量以人类易读的方式,例如GB、KB。
  • -l将文件按照长格式显示,包括文件属性和权限。
  • –color={always,never,auto}有三个可选项,选择文件是否显示颜色。
  • –ful-time 显示文件修改的时间。
ls -al ~//将主目录下的所有文件 按照长格式显示 -a-l可以合并一起写
ls -F ~ //将主目录下的文件 按照文件格式显示

这里写图片描述

注意

ls -l 目录1 目录2//可以一次查看多个目录
文件的复制、删除、移动
文件复制
cp  [参数] 源文件 目标文件
  • [-d] 如果源文件为连接文件的属性,则复制的是连接属性,即复制的属性还是指向最初的那个文件。(通过ls -l 列出,连接指向的文件,会通过->指向源文件)
  • [-i]如果目标文件已经存在,在覆盖的时候会先进行询问操作。
  • [-p]在复制的时候,连同文件的属性一起复制过去,而并非使用默认属性。
  • [-r]如果目录还包含的东西,该操作将是递归进行复制。在这种情况下的复制,权限是会改变的。
  • [-s]如果文件是连接文件,那么复制的是连接属性,而并非是源文件。
  • [-u]只要目的文件发生过修改,就会重新进行复制。
  • [-a]该属性复制文件权限属性、数据特性不会改变,包括文件所有者和用户组。

注意点:直接使用cp命令,目的文件的权限会变成默认的,另外文件所有者会使发布cp命令的当前的用户,你想如果不使用-a参数,你把文件拷给别人,啥都不能做,有毛用!

cp如果没有携带参数,复制连接文件,则是复制的是真正的源文件。

复制连接属性

这里写图片描述

Tip

补充一个小的知识点:

  • 用户组,用户的集合,体现的是共享,因为Linux是多用户使用的。
  • 文件所有者,就是文件属于谁。

一般的用户是无法修改文件所有者和用户组。

小例题

复制/var/log/wtmp 到/tmp 并改名为/laoqiang

cp -a /var/log/wtmp /tmp/laoqiang
移除目录或文件
rm [参数] 文件或目录
  • [-f]就是force意思,忽略不存在的文件,不会警告。
  • [-i]在删除前进行询问。
  • [-r]递归删除目录。

注意点:我们之前说过rmdir,也是可以删除目录,但是这种仅限在空目录,而rm 可以通过-r删除目录下包含的其他目录或者文件。

Tip

我们可以在查询文件或者删除的时候使用匹配符。?代表一个字符,*代表0个或者多个字符。

ls -l boo?
rm -i boo*

另外我们在文件起名的时候,一定要避免和系统的冲突,加入我们起了一个-aaa- ,在执行下面的命令,就会出现问题。

rm -aaa-  它以为是参数,我们怎么解决。
rm ./-aaa-//写出它的相对路径。
移动文件与目录,或者更名
mv [参数] 源文件 目标文件
  • [-f]如果移动的文件路径有同名存在,将不会询问,直接覆盖。
  • [-i]移动的时候会进行覆盖。
  • [-u]就是源文件有过修改才会进行移动。

这里需要理解,移动之后源文件就不存在了,你可以看到不同路径下的操作是移动,在同意路径下就是文件或者目录的重命名。

取得文件名和目录

我们之前说过完整的文件名最长可以是4096个字符。

啥叫完整的文件名:

/etc/sysconfig/network //我们是如何知道这个完整路径最后指向的目录和文件名

basename /etc/sysconfig/network //运行命令,结果是network,获取的是文件名
dirname /etc/sysconfig/network //运行命令,结果是/etc/sysconfig/得到的是目录名
查看文件内容
cat
cat  [参数] 文件路径
  • [-A]可以列出文本的特殊字符,而不是按照空白显示。
  • [-b]列出行号,但是这个命令仅对于非空白行,如果是空白行,它是不会标的。
  • [-E]将每行的断行字符$显示出来。
  • [-n]列出每行的行号,空白行也算。
  • [-T]将[Tab]键按照^I显示。
  • [-v]将特殊字符显示。
tac
tac 文件路径

这个命令就有意思,你发现cat和tac,我的天,是倒过来的,cat是从第一行可以读,而tac是从最后一行往上读。

nl

该命令用于添加行号

nl [参数] 文件路径
  • [-b a]代表不论是否为空行,均用行号表示。
  • [-b t]如果有空行,空的一行不列出行号,这个是nl默认的。
  • [-n ln]行号在最左方显示。
  • [-n rn]行号在自己字段的最右方显示,且不加0。
  • [-n rz]行号在自己字段的最右方显示,加0。
  • [-w]行号字段的占用的位数,默认6位。

这里写图片描述

可以看出nl 可以对行号做一定的修改,还有更多的包含对行号的的显示设计。

可翻页查看
more

之前查看查看命令,都是一口气直接输出出来,而该命令是可以一页一页的去查看。

more 文件

出现这种命令你应该关注最后一行,它等待你输入的命令操作。

  1. 空格键:向下翻一页。
  2. Enter:代表向下滚动一行。
  3. /字符串:在显示的内容中向下查询该字符串,如果匹配了,很多,在接着按n,就是在匹配中向下一个一个的移动到最后。
  4. f:显示当前文件的文件名和行数。
  5. q:代表你要离开more,不在现实该文件内容。
  6. b:代表文件往回翻页,对管道无效。
less

在刚才的more命令的时候,只可以往后看,不可以往前。

  1. 空格键:向下翻一页。
  2. pagedown:向下翻一页。
  3. pageup:向上翻一页。
  4. /字符串:向下查询字符串。
  5. ?字符串向上查询字符串。//其实这种向上向下都是把所有匹配的查找出来,主要使用注意是在n和N上。
  6. n:重复前一个查询(与/和?有关)
  7. N:反向重复前一个查询(与/和?有关)
  8. q:退出。
数据选取

取出文件的前面几行

head [参数] 文件
  • [-n]后面接数字,代表显示前几行
head -n 20 /etc/man.config
head -n -100 /etc/man.config 只要100行之前的
tail

取后面的几行

tail [参数] 文件
  • [-n] 后面接数字代表几行
  • [-f]表示持续检测文件尾部所添加的内容,等到ctrl+c,才停止。
非文本文件的查看

我们平常的绝大部分的都是文本文件,但是也有二进制文件。

od [参数] 文件
  • [-t a]:利用默认字符输出。
  • [-t c]:使用ASCII字符来输出。
  • [-t d]:利用十进制来输出。
  • [-t f]:利用浮点数来输出。
  • [-t o]:利用八进制来输出。
  • [-t x]:利用十六进制来输出。
od -t oCc /etc/issue//表示将内容八进制和ASCII对应起来输出。
Tip

Linux文件时间,每个文件下都有三个主要的时间参数。

  • modification time (mtime )
    而不是文件当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容, 而不是文件的属性或权限。
  • status time (ctime )当该文件的“状态”(status)
    改变时,就会更新这个时间,举例来说,像是权限与属性被更改了,都会更新这个时间。access time (atime )
  • access time(atime)当“该文件的内容被取用”时,就会更新这个读取时间(access)。举例来说,我们使用cat
    去读取/etc/man.config,就会更新该文件的atime 了。
ls -l --time=atime|ctime|test//如果是直接执行ls则默认显示mtime。

当系统时间出现问题的时候,你的文件的时间会出现未来的时间,这点不需要惊慌。

修改时间或者创建新文件
Tip

在一行命令中写入多条命令,中间用分号隔开,这些命令可以依次去执行。

touch [参数] 文件
  • [-a]:该命令只是修改文件的访问时间。
  • [-c]:该命令仅修改文件时间,如果文件不存在就不创建了。
  • [-d]:后面可以跟自己设定的时间,可以直接字符串或者 –date=“”。
  • [-m]:仅修改mtime。
  • [-t]:后面可以跟自己设定的时间,格式[YYMMDDhhmm]。
touch -d "2 days age" test//当前时间往前推两天。
touch -t 0908021203 test//设置2009/8/2 12:03

注意点:在复制文件的时候,即使复制所有属性,ctime这个时间是无法复制的。

文件默认权限
umask

这里写图片描述

上面的4个数字,最后的三个数字对应的是一般权限,加上参数之后,我们可以看到文件所有者是可读可写可执行,用户组是可读可写,其他是可读可写。

  • 对于文件,默认是没有可执行的权限X,只有RW。
  • 对于目录,目录中开放所有权限,包括可执行。

我们知道R对应数字4,W对应数字2,X对应数字1。
看上面0022,第二个0对应是文件/目录所有者,0就相当于没有拿权限,2对应文件/目录的1用户组,2就相当于拿可写的权限,最后的2对应的其他人,2就相当于拿可写的权限。

对于文件如果是6,那么该文件就是可读可写(4+2=6)

所以根据查询的,我们可知:

对于文件:-rw-r–r–(第一个-代表是文件)
对于目录:drwxr-xr-x(第一个d代表目录)

修改文件/目录的默认属性
umask 002 //除了其他的没有写,其他一起搞

这里有个小的注意的,文件默认没有x,那么就剩r 4 x 2,如果修改默认003 ,那么其他的具有啥权限,就只是r。3不够拿了4这个权限,只能拿w。

文件隐藏属性

之前我们已经学习过了文件读写可执行属性,文件还有隐藏属性。

chattr

该属性只是针对于Ext2/Ext3文件系统有用。

chattr [参数] 文件或目录
  • +:代表增加某一个特殊的参数。
  • -:代表删除某个特殊的参数。
  • a:当设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才可以使用。
  • i:可以设置该文件,不能被删除、改名、设置连接、添加、修改数据,root才可以使用。

这里写图片描述

去除某文件的隐藏属性
chattr  -i 文件/目录
查看某文件隐藏属性
lsattr 文件/目录

参数

  • -a:将隐藏文件的属性也秀出来;
  • -d: 如果接的是目录,仅列出目录本身的属性而非目录内的文件名。
  • -R: 连同子目录的数据也一并列出来。
查看文件类型

file:该命令可以查看文件的基本数据是属于ASCLL或者是data文件,或者是binary,甚至可以看是否使用了动态链接库。

这里写图片描述

命令的查询

我们都知道Linux中的命令都是有完整的文件名。

which [参数]  ls//查询ls文件名
  • -a将所有在Linux系统下的环境变量path找到的所有命令输出,而不只是找到符合的一个命令输出
文件名的查找

对于Linux下的文件查找,我们可以使用三个命令,find、whereis、locate。whereis、locate是通过文件数据库去查找,所以比较快,而find是通过硬盘查找,慢!

whereis
whereis [参数] 文件/目录
  • -b:只找二进制格式的文件。
  • -m:只找说明文件manual 路径下的文件。
  • -s:只找source 源文件。
  • -u:查找不是上面3种的文件。
locate
locate [参数] 文件名/或者关键字
  • -i:忽略大小写。
  • -r:后面可以接正则表达式。

这两种命令在使用的时候,会有一些问题:可能找到删除的文件,或者是刚刚创建的文件,这个问题的来源就是你文件数据库的更新。

find
find 路径 [参数]
  • atime 文件被取用的时间。
  • ctime 文件状态被修改的时间。
  • mtime 文件被修改的时间。

时间表示方法
这里写图片描述

+4:以当前时间为基点,大于等于5天前。
-4:以当前时间为基点,小于等于4天内。
4:代表4天到5天的。

0:代表以当前时间,往前推24小时。

查找属于某个账号拥有者的文件
find 文件/目录 -user 账号名
查找系统中不属于任何人的文件
find 文件/目录 -nouser

该命令可以帮助查找那些没有主人的文件。

根据文件大小、类型查找
find 文件/目录 [参数]
  • -name:根据文件名来。
  • -size:+代表大,-代表小。c:代表byte,k代表1024bytes。+50代表比50KB还要大的文件。
find 命令 -exec 子命令 \;

find 命令可以携带子命令,在子命令中是不可以使用命令别名的;另外,;在bash的环境下,有特殊的意义,可以使用反斜杠来转义。

Tip

在Linux中,用户切换一个目录的时候,一定要保证就是当前的目录必须要有x(可执行)的权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值