欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Linux目录

时间:2023-08-26
目录用途

/ 根目录/root root用户的家目录/home/username 普通用户的家目录/etc 配置文件目录/bin 命令目录/sbin 管理命令目录/usr/bin 系统预装的其他命令/usr/sbin 系统预装的其他命令

目录操作

查看当前所在目录

pwd

查看当前目录下的文件

ls

切换目录

cd

新建空白目录(新建空文件夹)

mkdir

删除空白目录(删除空文件夹,若目录下有内容[哪怕只是有空的目录/文件夹]则无法删除)

rmdir

删除目录(无论目录是否为空)

rm -r

复制目录、文件

cp 源目录 目的目录

移动目录、文件/重命名目录、文件

mv 源目录 目的目录

批量操作通配符

* 不定字符(0~n个)? 单个字符[xyz] 匹配xyz任意一个字符[a-z] 匹配一个范围[!xyz]或[^xyz] 不匹配xyz

打包

tar 选项 目的文件(打包后的文件) 源目录(待打包的目录)tar cf targetfile.tar originfile # 打包originfile成 targetfiletar tf targetfile.tar # 查看targetfile包内容tar xf targetfile.tar # 解包targetfile

压缩、解压缩

# 如果希望在 tar 打包的同时,实现压缩,需要添加z选项(使用gzip)或j选项(使用bzip2)。tar czf targetfile.tar.gz originfile # 打包压缩originfile成targetfile,使用gzip压缩方式。tar cjf targetfile.tar.bz2 originfile # 打包压缩originfile成targetfile,使用bzip2压缩方式。tar xf targetfile.tar.gz # 解压缩tar xf targetfile.tar.bz2 # 解压缩


ls(列出目录文件) -l:长格式

[kevin@localhost /]$ ls -ltotal 24drwxr-xr-x、 3 root root 21 Dec 21 17:16 applrwxrwxrwx、 1 root root 7 Jul 20 07:56 bin -> usr/bindr-xr-xr-x、 5 root root 4096 Jul 20 00:05 bootdrwxr-xr-x、 19 root root 3280 Dec 24 01:01 devdrwxr-xr-x、144 root root 8192 Dec 24 01:01 etcdrwxr-xr-x、 3 root root 19 Jul 20 00:05 homelrwxrwxrwx、 1 root root 7 Jul 20 07:56 lib -> usr/liblrwxrwxrwx、 1 root root 9 Jul 20 07:56 lib64 -> usr/lib64drwxr-xr-x、 2 root root 6 Apr 10 2018 mediadrwxr-xr-x、 2 root root 6 Apr 10 2018 mntdrwxr-xr-x、 3 root root 16 Jul 20 00:00 optdr-xr-xr-x、217 root root 0 Dec 24 01:01 procdr-xr-x---、 4 root root 246 Dec 21 17:20 rootdrwxr-xr-x、 42 root root 1220 Dec 24 01:39 runlrwxrwxrwx、 1 root root 8 Jul 20 07:56 sbin -> usr/sbindrwxr-xr-x、 2 root root 6 Apr 10 2018 srvdr-xr-xr-x、 13 root root 0 Dec 24 01:01 sysdrwxrwxrwt、 33 root root 4096 Dec 24 01:39 tmpdrwxr-xr-x、 13 root root 155 Jul 20 07:56 usrdrwxr-xr-x、 21 root root 4096 Jul 20 00:05 var

解析

文件类型和权限包含多少个文件目录文件所属用户(属主)文件所属用户组(属组)文件大小(单位:字节)文件最后修改时间文件名称drwxr-xr-x.3rootroot21Dec 21 17:16app

目录文件:即便内容为空,也会包含两个目录文件(.与..),因此,目录文件至少包含2个文件

文件类型和权限(10个字符):

第一个字符[-dlbcfs]:为文件类型

-:文件d:目录l:符号链接(类似windows的快捷方式)b:块特殊文件【设备】:如移动硬盘,插入移动硬盘后,linxu会把移动硬盘看成是块特殊文件来进行操作。c:字符特殊文件【设备】:如终端f:命名管道【进程相关】s:套接字文件【通信相关】 后面9个字符:文件权限

从左往右:

1~3 文件所属用户的权限4~6 文件所属用户组的权限(文件所属用户并不一定存在于文件所属组,只是创建文件时,会将用户以及其初始组作为新文件的的所属用户以及所属用户组)7~9 除了所属用户和所属用户组外,其他的用户及用户组的权限

注意:不同类型的文件,权限的rwx的含义是不同的。

普通文件:

r:读w:写x:执行

数字权限的表示方法:

r=4w=2x=1

其实就是100、010、001 八进制的表示方式。

-rw-r-xr-- 1 tom yesgroup mtime test1

test1这个文件是普通文件(rwx分别为读、写、执行)rw-:tom 对 test1 有读、写的权限

r读:如catw写 r-x:yesgroup用户组的用户对 test1 有读、执行的权限。

r读:如catx执行:像ls、cat本身就是文件,只是可以当作命令来执行,这就是文件的可执行。 r–:除了tom以及yesgroup用户组中的所有用户外,其他的用户对 test1 有读的权限。

其实vim对文件的写,并非是真正的直接将内容写入到文件。底层实际上,复制一个以点开头的文件(隐藏文件),所有写入的内容是写入到这个隐藏文件中。当进行保存并且退出时,隐藏文件会替换原有的文件。【因此vim并非直接往文件中写入,因此对文件的写权限,不要用vim来进行测试,可以使用echo xxx > 该文件 来测试】

若用户对文件只有读权限,没有写权限,也可以通过vim来成功对该文件进行写入保存,但是使用echo写入则会报错说“没有权限”。

若用户对文件连读的权限都没有(用vim打开也看不到内容),也仍然可以用vim成功进行写入保存(保存关闭后也看不到内容,但用root可以看到这个文件内容被新写入内容覆盖了[而非将新写入内容追加到文件尾])。

-a:显示所有(包含隐藏文件/目录)

隐藏文件/目录:以点“.”开头文件/目录

-r:以逆向方式排序显示

默认是以文件名来进行逆向显示。

-t:以时间来排序显示

-rt则为以时间逆序来显示

-R:递归显示 -h:文件大小使用可读性更强的单位

-l 默认返回的的文件大小的单位为字节,有时候会因为文件比较大,字节数比较多,可读性比较差。结合 -h 选项,文件大小会按大小以合适的单位来标出,如大一点用“K”,再大一点用“M”,甚至用“G”。

-d:列出目录本身,而非目录内的文件

建议配合 -l 使用。否则就只打印这个目录而已。
如果该文件不是目录文件而是普通文件,也不会报错,效果和直接 ls 这个普通文件一样。


cd(切换目录)

-:与之前打开的目录来回切换(两个目录间跳转)

cd /home/kevincd /cd -# pwd 返回 /home/kevincd -# pwd 返回 /

~:回到用户的 home 目录

cd ~或者省略“~”,直接 cd# 会回到当前用户的 home 目录# 如 root 用户,会切换到 /root 路径下 # kevin 用户,会切换到 /home/kevin 路径下

相对路径

# 如果已经在 home 目录,可以采用相对路径进入 kevin 目录cd ./kevin或者cd kevin

进入上一级目录

# 如果已经在 /home/kevin 目录,要进入上一级目录cd ..# pwd 返回 /home


mkdir -p:如果路径中有目录不存在则顺便创建该目录,且不报错

# 如 /home/kevin/Downloads 下没有 testmkdir 目录# mkdir /home/kevin/Downloads/testmkdir/test 会报错mkdir -p /home/kevin/Downloads/testmkdir/test# 则会不会因为 testmkdir 不存在而报错,而是会创建testmkdir,再在其下创建 test 目录# 如果已存在目录路径 /a/b/c/d/emkdir -p /a/b# 并不会报错,并且不会清空 b 下面的 c/d/e

相对路径

# 如已经在 /home/kevin/Downloads 目录下,创建 test 目录# 可以不输入完整路径 mkdir /home/kevin/Downloads/testmkdir ./test# 或者mkdir test

同时创建多个目录

mdkir atest btest ctest、# 如果当前目录已存在 atest,则会报错 atest已存在,但不影响 btest 和 ctest 两个目录的生成


rm:删除目录、文件 -r或-R:递归删除(用于删除目录)

# 递归删除 atest目录 及其下目录,但会逐级都询问rm -r atest# 递归删除 atest目录 及其下目录,并且不会询问rm -rf atest

-f:强制,无询问提醒,无报错 删除多个目录

rm -r atest btest

注意-f是非常危险的选项,因为不进行提示,可能会导致灾难性后果,比如你原本是想删除/a,但是你现在写成/ a,中间手抖多了一个空格,那么

rm -rf / a

就会被系统视作递归删除/与当前目录下的a目录,rm -rf / 那就会把整个系统都删除掉。


cp:复制目录、文件

# 当前目录中创建文件 afiletouch afile# 将文件 afile 复制到当前目录下,并命名为 bfilecp afile bfile# 复制目录cp -r atest btest

[root@localhost test]# lltotal 0-rw-r--r--、1 root root 0 Dec 27 19:24 afiledrwxr-xr-x、2 root root 6 Dec 27 18:16 atest-rw-r--r--、1 root root 0 Dec 27 19:25 bfile# 可以看到时间复制的文件(bfile)与源文件(afile)的最后修改时间是不一样的,# 如果想最后修改时间一样,可以用 -p 选项

-p:保留时间戳、模式、ownership(所有权)

cp -p afile cfile[root@localhost test]# lltotal 0-rw-r--r--、1 root root 0 Dec 27 19:24 afiledrwxr-xr-x、2 root root 6 Dec 27 18:16 atest-rw-r--r--、1 root root 0 Dec 27 19:25 bfile-rw-r--r--、1 root root 0 Dec 27 19:24 cfile

-a:比-p更极端,保留原时间戳等所有属性 -v:显示复制过程
mv:移动文件目录、重命名文件目录

# 把 afile文件 重命名为 bfilemv afile bfile# 把 atest目录 重命名为 btestmv atest btest# 把 afile文件 移动到并重命名为 /tmp/bfilemv afile /tmp/bfile# 把 atest目录 移动到并重命名为 /tmp/btestmv atest /tmp/btest

注意:如果是移动/重命名文件时目的文件已经存在,会询问是否覆盖此文件;但如果移动/重命名的目的目录已经存在,并不会报错,而是会把目录不换名字移动到该已存在的目录下。

# 已存在/tmp/btestmv atest /tmp/btest# 此时并不是把 atest 移动到 /tmp/ 下并命名为 btest,而是把 atest 移动到了 /tmp/btest/ 下。


通配符:批量操作 *

*:匹配所有abc*:匹配abc打头的所有(如abc、abcd、abc3、abcde、abc3d)*abc:匹配abc结尾的所有(如abc、daabc、eabc)

对 ls、cp、mv等命令适用

# 如当前目录下有 dira、dirb、dirc、testmv dir* test # 会把 dira、dirb、dirc 都移入 testmv * test# 会报错,因为test也在当前目录下,不能把自己移入自己目录下,但是即便报错,并不影响移动其余的文件目录,当前目录下除了test之外,都会移动到 test 下面

? :匹配单个字符

abc?:匹配abc打头,后跟一个字符的目录文件(如abcd、abc3,但不匹配abc、abcde、abc3b等)?abc:匹配abc结尾,以任何一个字符开头(共4个字符)的文件目录(如aabc、dabc、3abc)abc??:匹配abc打头,后跟两个个字符的目录文件(如abcde、abc3b) [xyz]匹配xyz任意一个字符

# 假设目录下有 dira、dirb、dirc、dirabcls dir[abc]# 会展示 dira、dirb、dirc,但不会展示dirabc

[^xyz]或[!xyz]不匹配xyz(仍然只是匹配一个字符)

# 假设目录下有 dira、dirb、dirc、dirabcls dir[^c] 或 ls dir[!c] # 会展示dirc,但不会展示 dira、dirb、dirabc

[a-z]匹配一个范围(仍然只是匹配一个字符)

# 假设目录下有 dira、dirb、dirc、dirabcls dir[a-c]# 会展示 dira、dirb、dirc,但不会展示dirabc# 若想匹配dirabc,可以如下ls dir[a-c][a-c][a-c]# 则会只匹配到 dirabc,不会匹配到 dira、dirb、dirc


打包与压缩、解压缩

linux 中,一个文件夹要进行压缩,需要先进行打包,然后再压缩。

打包

打包是把多个文件或单个/多个文件夹(目录)合并成一个文件,这个过程原则上并不进行压缩。但打包也可能会造成文件占用存储空间表少,那是由于磁盘存储文件的方式。

参考:https://zhidao.baidu.com/question/10179074.html

文件打包,有可能仅仅是将多个文件连接成1个文件,并不进行压缩处理。有时候也可能看起来文件变小,那是因为多个文件储存可能造成多余的空间浪费,究其原因是文件储存方式中,分块 族 造成的。1个族1次只能被1个文件使用,虽然1个文件能使用多个族,但最后1个族未必能填满。因此,n个文件就会造成很多浪费。而连接成1个文件后,只会浪费1个族。

压缩就不一样了,它不但把文件连在一起,还进行特定算法的压缩。对于txt这类很“松”的文件,可以大大减小文件的大小

linux 中打包命令为 tar。

tar 的选项可以省略掉前面的-引导(当然保留-也是可以的)

# 以下命令不是对文件目录原地操作,而是会产生新的文件目录# 格式tar 选项 目的文件(打包后的文件) 源目录(待打包的目录)源目录可以是多个目录、文件,如:tar cf test.tar afile bfile cfile会将 afile bfile cfile 打包成 test.tar# 把 /etc 目录打包tar cf /tmp/etc-backup.tar /etc# 顺序写成fc 也不影响“目的文件”和“源目录”的位置# 但注意,如果不用“-”来引导选项时,c和f就要写到一起,分开来的话会有很奇怪的现象出现# 另外注意:如果目的文件已存在,不会有报错提醒或覆盖询问# 也可以写成(效果一样)tar -cf /tmp/etc-backup.tar /etc

查看包文件内容

# 类似 ls -a,但没有 "." ".." 两个目录。tar tf /tmp/etc-backup.tar # 更详细,类似 ll -a 或 ls -al,但没有 "." ".." 两个目录。tar tvf /tmp/etc-backup.tar

解包

# 以下命令不是对文件目录原地操作,而是会产生新的文件目录tar xf /tmp/etc-backup.tar # 默认解压到当前目录(pwd)tar xf /tmp/etc-backup.tar -C ./foo # 注意这里是大写 C, 解压到指定目录下,但foo得存在,否则报错

tar 命令选项参考:

-c 创建-f 指定文件名-t 查看 # 无论包是否压缩了都能查看包里有哪些文件-v 显示 # cvf 可以看到打包时涉及哪些文件; tvf 可以详细显示包里有什么文件 -x 解包-z gzip压缩-j bzip2压缩

压缩与解压缩

压缩

压缩会将文件大小变小,方便备份存储;解压缩则是把压缩的文件还原为压缩前的状态。

linux 中压缩命令为 gzip 与 bzip2,解压缩命令一样为 gzip 与 bzip2。

# 以下命令对文件目录进行原地操作,不另外生成目录文件# 对已经进行压缩的后缀名为 gz、tgz(.tar.gz的缩写)、bz2(bzip2的简写)、tbz2(.tar.bz2的缩写),不会进行进一步的压缩操作(即便只是改后缀名为bz2,而实际上没有压缩的文件)# 解压时,gzip只认识.gz、.tgz(.tar.gz的简写),bzip2只认识.bz2、.tbz2(.tar.bz2的简写)# gzip 压缩的不能用 bizp2 来解压,即便把文件后缀名改了也不行,反之 bzip2 压缩的命令也无法用 gzip 来解压。gzip xxx.tar # 压缩gzip -d xxx.tar.gz # 解压缩bzip2 xxx.tar # 压缩bzip2 -d xxx.tar.bz2 # 解压缩

但实际上 tar命令已经把 gzip 与 bzip2 集成了进去了。

bzip2方式比gzip方式对文件压缩得更小,但也更耗时。

如果希望在 tar 打包的同时,实现压缩,需要添加z选项(使用gzip)或j选项(使用bzip2)。

tar czf /tmp/etc-backup.tar /etc# 注意仍然使用tar后缀名是可以的,仍然会生成得是压缩后的打包文件,但是这样别人无法知道这个文件是不是经过压缩的,所以一般会用双扩展名:tar czf /tmp/etc-backup.tar.gz /etctar cjf /tmp/etc-backup.tar.bzip2 /etc # 尽量不要用.bzip2,因为bzip2命令本身识别不了这个后缀(虽然也能解压,但生成.out文件,即便重命名也是一个文件而非可以打开的目录,还得用tar来解压,等于少了一种解压途径)tar cjf /tmp/etc-backup.tar.bz2 /etc用tar来压缩的话,后缀名是无所谓的,tar czf xxx.aaa /etc都没有问题,aaa后缀名不影响 tar xf xxx.aaa 的解压缩。但是会影响其他用户,不知道xxx.aaa是什么压缩方式,也就无法知道另外去调用gzip还是bzip2来正常解压(实际上都不行)。

解压缩

tar xf xxx.gztar xf xxx.bz2当然也可以用z和j选项来区分,加入z、j选项来解压,并不认文件后缀名,而认文件格式内容:假如 xxx.aaa 是由gzip方式压缩而成,tar xzf xxx.aaa是没问题的;假如 xxx.bz2 是由gzip方式压缩而成,然后改了后缀名,还是试用 tar xzf才能解压成功,用tar xjf 是会报错的。但真的没有必要加z、j参数,直接tar xf 就好。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。