/ 根目录 /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成 targetfile tar 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 -l total 24 drwxr-xr-x. 3 root root 21 Dec 21 17:16 app lrwxrwxrwx. 1 root root 7 Jul 20 07:56 bin -> usr/bin dr-xr-xr-x. 5 root root 4096 Jul 20 00:05 boot drwxr-xr-x. 19 root root 3280 Dec 24 01:01 dev drwxr-xr-x. 144 root root 8192 Dec 24 01:01 etc drwxr-xr-x. 3 root root 19 Jul 20 00:05 home lrwxrwxrwx. 1 root root 7 Jul 20 07:56 lib -> usr/lib lrwxrwxrwx. 1 root root 9 Jul 20 07:56 lib64 -> usr/lib64 drwxr-xr-x. 2 root root 6 Apr 10 2018 media drwxr-xr-x. 2 root root 6 Apr 10 2018 mnt drwxr-xr-x. 3 root root 16 Jul 20 00:00 opt dr-xr-xr-x. 217 root root 0 Dec 24 01:01 proc dr-xr-x---. 4 root root 246 Dec 21 17:20 root drwxr-xr-x. 42 root root 1220 Dec 24 01:39 run lrwxrwxrwx. 1 root root 8 Jul 20 07:56 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 Apr 10 2018 srv dr-xr-xr-x. 13 root root 0 Dec 24 01:01 sys drwxrwxrwt. 33 root root 4096 Dec 24 01:39 tmp drwxr-xr-x. 13 root root 155 Jul 20 07:56 usr drwxr-xr-x. 21 root root 4096 Jul 20 00:05 var
解析
| 文件类型和权限 | 包含多少个文件目录 | 文件所属用户(属主) | 文件所属用户组(属组) | 文件大小(单位:字节) | 文件最后修改时间 | 文件名称 |
|---|---|---|---|---|---|---|
| drwxr-xr-x. | 3 | root | root | 21 | Dec 21 17:16 | app |
目录文件:即便内容为空,也会包含两个目录文件(.与..),因此,目录文件至少包含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 有读的权限。
-a:显示所有(包含隐藏文件/目录)其实vim对文件的写,并非是真正的直接将内容写入到文件。底层实际上,复制一个以点开头的文件(隐藏文件),所有写入的内容是写入到这个隐藏文件中。当进行保存并且退出时,隐藏文件会替换原有的文件。【因此vim并非直接往文件中写入,因此对文件的写权限,不要用vim来进行测试,可以使用echo xxx > 该文件 来测试】
若用户对文件只有读权限,没有写权限,也可以通过vim来成功对该文件进行写入保存,但是使用echo写入则会报错说“没有权限”。
若用户对文件连读的权限都没有(用vim打开也看不到内容),也仍然可以用vim成功进行写入保存(保存关闭后也看不到内容,但用root可以看到这个文件内容被新写入内容覆盖了[而非将新写入内容追加到文件尾])。
-r:以逆向方式排序显示隐藏文件/目录:以点“.”开头文件/目录
默认是以文件名来进行逆向显示。
-t:以时间来排序显示-R:递归显示 -h:文件大小使用可读性更强的单位-rt则为以时间逆序来显示
-l 默认返回的的文件大小的单位为字节,有时候会因为文件比较大,字节数比较多,可读性比较差。结合 -h 选项,文件大小会按大小以合适的单位来标出,如大一点用“K”,再大一点用“M”,甚至用“G”。
-d:列出目录本身,而非目录内的文件建议配合 -l 使用。否则就只打印这个目录而已。
如果该文件不是目录文件而是普通文件,也不会报错,效果和直接 ls 这个普通文件一样。
cd(切换目录)
-:与之前打开的目录来回切换(两个目录间跳转)
cd /home/kevin cd / cd - # pwd 返回 /home/kevin cd - # 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/e mkdir -p /a/b # 并不会报错,并且不会清空 b 下面的 c/d/e
相对路径
# 如已经在 /home/kevin/Downloads 目录下,创建 test 目录 # 可以不输入完整路径 mkdir /home/kevin/Downloads/test mkdir ./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:复制目录、文件
# 当前目录中创建文件 afile touch afile # 将文件 afile 复制到当前目录下,并命名为 bfile cp afile bfile # 复制目录 cp -r atest btest
[root@localhost test]# ll total 0 -rw-r--r--. 1 root root 0 Dec 27 19:24 afile drwxr-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]# ll total 0 -rw-r--r--. 1 root root 0 Dec 27 19:24 afile drwxr-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文件 重命名为 bfile mv afile bfile # 把 atest目录 重命名为 btest mv atest btest # 把 afile文件 移动到并重命名为 /tmp/bfile mv afile /tmp/bfile # 把 atest目录 移动到并重命名为 /tmp/btest mv atest /tmp/btest
注意:如果是移动/重命名文件时目的文件已经存在,会询问是否覆盖此文件;但如果移动/重命名的目的目录已经存在,并不会报错,而是会把目录不换名字移动到该已存在的目录下。
# 已存在/tmp/btest mv 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、test mv dir* test # 会把 dira、dirb、dirc 都移入 test mv * 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、dirabc ls dir[abc] # 会展示 dira、dirb、dirc,但不会展示dirabc[^xyz]或[!xyz]不匹配xyz(仍然只是匹配一个字符)
# 假设目录下有 dira、dirb、dirc、dirabc ls dir[^c] 或 ls dir[!c] # 会展示dirc,但不会展示 dira、dirb、dirabc[a-z]匹配一个范围(仍然只是匹配一个字符)
# 假设目录下有 dira、dirb、dirc、dirabc ls 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 /etc tar 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.gz tar 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 就好。



