一、文件和目录的操作


    cp :复制文件和目录

    ①复制一个文件到目录下,格式:cp [文件] [目录]

[root@mylinux ~]# cp mylinux.txt /tmp/
[root@mylinux ~]# ls /tmp/*
/tmp/mylinux.txt
[root@mylinux ~]#

    ②复制多个文件到目录下,格式:cp [文件1] [文件2] [目录]

[root@mylinux ~]# cp mylinux.txt.1 mylinux.txt.2 /tmp
[root@mylinux ~]# ls /tmp/*
/tmp/mylinux.txt  /tmp/mylinux.txt.1  /tmp/mylinux.txt.2
[root@mylinux ~]#

    ③复制一个目录到另一个目录,连同源目录下的文件一起复制需要使用选项'r'或'R',即级联的意思

      格式:cp -r [源目录] [目标目录]

[root@mylinux ~]# cp mylinux.d/ /tmp/
cp: 略过目录"mylinux.d/"
[root@mylinux ~]# cp -r mylinux.d/ /tmp/
[root@mylinux ~]# cd !$
cd /tmp/
[root@mylinux tmp]# ls
mylinux.d  mylinux.txt  mylinux.txt.1  mylinux.txt.2
[root@mylinux tmp]# ls mylinux.d
1.txt  2.txt  3.txt
[root@mylinux tmp]#

     ④特殊用法:当目标目录已存在要复制的文件,复制文件时,会提示是否覆盖,需要用户输入命令进行交互,如果不希望提示可以使用强制,即使用命令的绝对路径/bin/cp

[root@mylinux ~]# cp mylinux.txt /tmp
cp:是否覆盖"/tmp/mylinux.txt"? n
[root@mylinux ~]# /bin/cp mylinux.txt /tmp
[root@mylinux ~]#

       当复制文件或目录时,需要连同源文件或目录的权限属性一起复制,需要使用选项:-p




    mkdir : 创建目录

    ①mkdir [目录名字]

    ②需要创建一个目录中包含多个目录,有嵌套关系时,需要使用选项 :-p

[root@mylinux ~]# mkdir -p aaa/bbb/ccc
[root@mylinux ~]# ls aaa/
bbb
[root@mylinux ~]# ls aaa/bbb/
ccc
[root@mylinux ~]#



    rmdir : 用于删除空目录,如果目录中含有文件,则无法删除,所以不常用



   

    rm : 删除文件和目录

    ①删除文件的格式 :rm [文件名字]

    ②删除目录的格式 : rm -rf [目录]

      -r  级联递归,将目录下的其他文件一并删除

      -f  强制删除,删除文件时不要提示

   

    rmdir与rm的区别:

         rmdir   不能用于删除非空目录

         rm      可以删除非空目录




     mv :移动/重命名文件和目录

     ①移动(类似与windows下的剪切),将多个文件移动到目录下

     格式 :mv [文件1] [文件2] [文件3] [目录]

[root@mylinux mylinux.d]# ls
1.txt  2.txt  3.txt
[root@mylinux mylinux.d]# mkdir 123/
[root@mylinux mylinux.d]# ls
123  1.txt  2.txt  3.txt
[root@mylinux mylinux.d]# mv 1.txt 2.txt 3.txt 123/
[root@mylinux mylinux.d]# ls
123
[root@mylinux mylinux.d]# cd 123/
[root@mylinux 123]# ls
1.txt  2.txt  3.txt
[root@mylinux 123]#

    ②修改文件或目录名字

    格式 :mv [名字1] [名字2]

[root@mylinux mylinux.d]# ls
123
[root@mylinux mylinux.d]# mv 123/ 456/
[root@mylinux mylinux.d]# ls
456
[root@mylinux mylinux.d]# ls 456/
1.txt  2.txt  3.txt
[root@mylinux mylinux.d]#

    ③当移动文件到目录时,目录已含义同名文件,会提示是否覆盖,如果不希望提示,需要使用命令的绝对路径/bin/mv ,进行强制覆盖

[root@mylinux mylinux.d]# ls 456/
1.txt  2.txt  3.txt
[root@mylinux mylinux.d]# touch 1.txt
[root@mylinux mylinux.d]# ls
1.txt  456
[root@mylinux mylinux.d]# mv 1.txt 456/
mv:是否覆盖"456/1.txt"? n
[root@mylinux mylinux.d]# /bin/mv 1.txt 456/
[root@mylinux mylinux.d]# ls
456
[root@mylinux mylinux.d]#




二、文本处理相关命令

    cat  将[文件]或标准输入组合输出到标准输出

    选项 :-n 对输出的所有行编号

[root@mylinux ~]# cat -n /etc/passwd
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

           -b 对非空输出行编号

[root@mylinux ~]# cat -b /etc/passwd
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

           -E或者-A 在每行结束处显示"$"

[root@mylinux ~]# cat -E /etc/passwd
root:x:0:0:root:/root:/bin/bash$
bin:x:1:1:bin:/bin:/sbin/nologin$
daemon:x:2:2:daemon:/sbin:/sbin/nologin$
adm:x:3:4:adm:/var/adm:/sbin/nologin$
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin$




     tac  将每个指定文件按行倒置并写到标准输出。与cat相反




     head 显示每个指定文件的前10 行显示到标准输出。

     选项 :-n 显示每个文件的前n行内容

[root@mylinux ~]# head -5 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@mylinux ~]#




     tail 显示每个指定文件的最后10 行到标准输出。与head相反

     选项 :-n 显示每个文件的后n行内容

[root@mylinux ~]# tail -5 passwd
radvd:x:75:75:radvd user:/:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
mylinux:x:500:500::/home/mylinux:/bin/bash
test007:x:501:501::/home/test007:/bin/bash
[root@mylinux ~]#

            -f 用于即时显示的效果,把刚写入的数据立刻输出,一般用于动态查看日志

[root@mylinux ~]# tail -f passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
mylinux:x:500:500::/home/mylinux:/bin/bash
test007:x:501:501::/home/test007:/bin/bash

     



     more 查看文件内容,当内容显示为满屏时暂停,按空格翻到下一屏内容,不支持回看,按‘q’退出 




     less,与more类似,但是less允许利用光标上下卷动文本内容进行浏览

     查看文本操作常用键盘指令:

     Page Up 、b                    <== 翻到上一页

     Page Down 、Space              <== 翻到下一页

     G                              <== 移动到文本最后一页

     1G 、g                         <== 移动到文本首页

     /字符串                        <== 在整个文本文件中查找字符串

     n                              <== 向下一级再次检索

     N                              <== 向上一级再次检索

     q                              <== 退出




三、文件的属性

    文件的属性用'ls -l'就可以查看 

[root@mylinux ~]# ls -l
总用量 40
drwxr-xr-x  3 root root  4096 3月  14 12:33 aaa
-rw-------. 1 root root   943 2月  27 00:15 anaconda-ks.cfg
-rw-r--r--. 1 root root    70 2月  28 06:26 err.log
-rw-r--r--. 1 root root 12577 2月  27 00:15 install.log
-rw-r--r--. 1 root root  3482 2月  27 00:15 install.log.syslog
drwxr-xr-x  3 root root  4096 3月  14 13:01 mylinux.d
-rw-r--r--  1 root root     0 3月  14 11:39 mylinux.txt
-rw-r--r--  1 root root     0 3月  14 11:46 mylinux.txt.1
-rw-r--r--  1 root root     0 3月  14 11:46 mylinux.txt.2
-rw-r--r--  1 root root  1341 3月  15 10:00 passwd
[root@mylinux ~]#

     我们单独拿出一行进行分析:

wKioL1UFA1LhNXc1AAEbUya3OTk608.jpg

  

    文件类型和权限

    wKioL1UFBvWjIbobAAD40g7fTO4142.jpg  

     Linux文件类型:

     d         <== 目录文件

     -         <== 普通文件

     l         <== 链接文件(又分软连接和硬链接)

     b         <== 块设备文件(如磁盘等)

     c         <== 字符设备文件(如鼠标,键盘等)

     s         <== 套接字文件

     p         <== 管道文件

     Linux文件权限:

     每个文件都有三类用户的权限,即所属用户(所属主,'u')的权限,所属用户组(所属组,'g')的权限,和其他用户的权限,'o',每类用户都分别由‘r’‘w’‘x’,即‘读’‘写’‘执行’来控制


     Linux文件链接数(即inode-索引节点)

     上面例子中的inode数为‘3’,那么我们分析一下这个‘3’是怎么得出来的

    (注:ls命令-i选项可以查看文件的inode号)

[root@mylinux ~]# ls -di aaa/                  # 查看目录aaa本身的inode号
134760 aaa/
[root@mylinux ~]# ls -ai aaa/                  # 查看目录aaa里的所有文件的inode号
134760 .  130563 ..  134763 bbb
[root@mylinux ~]# ls -ai aaa/bbb/              # 查看子目录bbb里的所有文件的inode号
134763 .  134760 ..  137274 ccc
[root@mylinux ~]# ls -ai aaa/bbb/ccc/          # 查看子目录ccc里的所有文件的inode号
137274 .  134763 ..

         从上面的例子可以看到目录aaa的inode号共出现三次:

          ①目录本身

          ②目录aaa里的‘.’文件

          ③子目录bbb里的 ‘..’文件

     

      所以目录aaa的inode共有3个




四、修改文件的属性和权限

    chown 更改文件所属主和所属组

    格式 :

    ①更改文件所属主,格式 :chown [新主名] [文件]

[root@mylinux ~]# ls -ld aaa/                        
drwxr-xr-x 3 root root 4096 3月  14 12:33 aaa/      #当前目录aaa的所属主为root
[root@mylinux ~]# chown mylinux aaa/                #把目录aaa的所属主改为mylinux
[root@mylinux ~]# !ls
ls -ld aaa/
drwxr-xr-x 3 mylinux root 4096 3月  14 12:33 aaa/   #当前目录aaa的所属主为mylinux
[root@mylinux ~]#

    ②更改文件所属主,格式 :chown :[新组名] [文件]

[root@mylinux ~]# ls -ld aaa/
d------rwx 3 mylinux root 4096 3月  14 12:33 aaa/   #当前目录aaa的所属组为root
[root@mylinux ~]# chown :mylinux aaa/               #把目录aaa的所属组改为mylinux
[root@mylinux ~]# !ls
ls -ld aaa/
d------rwx 3 mylinux mylinux 4096 3月  14 12:33 aaa/#当前目录aaa的所属组为mylinux
[root@mylinux ~]#

    ③更改文件所属主,及所属组,格式 :chown [新主名]:[新组名] [文件]

[root@mylinux ~]# ls -ld aaa/
drwxr-xr-x 3 root root 4096 3月  14 12:33 aaa/        #当前目录aaa的所属主和组均为root
[root@mylinux ~]# chown mylinux:mylinux aaa/          #把目录aaa的所属主和组改为mylinux
[root@mylinux ~]# !ls                                  和mylinux
ls -ld aaa/
drwxr-xr-x 3 mylinux mylinux 4096 3月  14 12:33 aaa/  #当前目录aaa的所属主和组均为mylinux
[root@mylinux ~]#

    ④更改目录及目录下文件的所属主,或所属组,需要用的选项 :-R 级联,递归

[root@mylinux ~]# ls -ld aaa/ aaa/bbb/                #目录aaa和其子目录bbb,所属主均为root
drwxr-xr-x 3 root root 4096 3月  14 12:33 aaa/        
drwxr-xr-x 3 root root 4096 3月  14 12:33 aaa/bbb/
[root@mylinux ~]# chown -R mylinux aaa/               #更改aaa及其子目录bbb的所属主
[root@mylinux ~]# !ls
ls -ld aaa/ aaa/bbb/                                  #目录aaa和其子目录bbb,所属主已经为 
drwxr-xr-x 3 mylinux root 4096 3月  14 12:33 aaa/      mylinux
drwxr-xr-x 3 mylinux root 4096 3月  14 12:33 aaa/bbb/
[root@mylinux ~]#




   chgrp 修改文件所属组,因为chown的存在,所以chgrp并不常用




   chmod 修改文件/目录的许可

   'rwx'这3个字符用二进制数表示,被识别为2的n次方的形式。

   所以'r'是2的2次方,'w'是2的1次方,'x'是2的0次方,

   因此,rwx用二进制数为111,或十进制7表示

   rwx rwx rwx = 111 111 111 = 777

   rw- rw- rw- = 110 110 110 = 666

   rwx --- --- = 111 000 000 = 700

   ‘u’代表所属用户

    'g' 代表所属用户组

    'o' 代表其他用户

    'a' 代表所有用户

    chmod u-x [文件/目录] 代表所属用户取出'x'的许可权限

    chmod g+w [文件/目录] 代表所属用户组增加'w'的许可权限

[root@mylinux ~]# ls -ld aaa/
drwxr-xr-x 3 mylinux root 4096 3月  14 12:33 aaa/
[root@mylinux ~]# chmod u-x aaa/
[root@mylinux ~]# !ls
ls -ld aaa/
drw-r-xr-x 3 mylinux root 4096 3月  14 12:33 aaa/
[root@mylinux ~]# chmod g+w aaa/
[root@mylinux ~]# !ls
ls -ld aaa/
drw-rwxr-x 3 mylinux root 4096 3月  14 12:33 aaa/
[root@mylinux ~]#

     当然亦可以使用数字   

[root@mylinux ~]# !ls
ls -ld aaa/
drw-rwxr-x 3 mylinux root 4096 3月  14 12:33 aaa/
[root@mylinux ~]# chmod 700 aaa/
[root@mylinux ~]# !ls
ls -ld aaa/
drwx------ 3 mylinux root 4096 3月  14 12:33 aaa/
[root@mylinux ~]#

 



    umask 权限掩码

当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。

    umask 在用户 UID < 199 时,默认值为022,目录创建默认权限为777-022=755,文件创建默认权限为666-022=644。

          在用户 UID > 199 时,默认值为002,目录创建默认权限为777-002=775,文件创建默认权限为666-002=664.

    在linux中umask设置在/etc/bashrc中。



本内容由导师:阿铭提供技术支持:跟阿铭学linux 点这里