博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux文件、目录管理(上)
阅读量:7038 次
发布时间:2019-06-28

本文共 10124 字,大约阅读时间需要 33 分钟。

hot3.png

Linux文件、目录管理(上)

一、系统目录结构

1 简述

对于目录,我们大致能够理解,像书本学的章节,每个章下又都有很多小节一样;而Linux目录和Windows目录有着很大的不同,Linux目录类似一个树,最顶层是其根目录,如下图:

用ls查看“/ ”    “ls /” 查看根目录下的文件和目录;(不包含隐藏文件) “ls -a/”  会列出当前目录下所有文件和目录,含有隐藏文件

2 用tree命令显示目录和文件

利用**“tree”命令查看,这样看起来不是很直观;初次使用“tree”命令,系统里没有;要先用“yum”**命令安装它; 

用**“man tree”** 查看**“tree”**命令的介绍和用法;

“tree -L 1 / ” = 查看根目录下一层的目录和文件(L 1为1层目录);此时看起来就比较直观;

3 常用目录说明:

目录名称 说明
/bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。
/boot 存放用于系统引导时使用的各种文件
/dev 用于存放设备文件。
/etc 存放系统管理和配置文件
/home 存放所有用户文件的根目录,是用户主目录的基点,比如用户ying的主目录就是/home/ying
/lib 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。
/lib64 与/lib一样,只是它64位系统
/media 系统会自动识别一些设备(如U盘、光驱等),当识别后,Linux会把识别的设备挂载到该目录下。
/mnt 系统提供该目录是为了让用户临时挂载别的文件系统。我们可以将光驱挂载到/mnt/上,然后进入该目录查看光驱里的内容。
/opt 给主机额外安装软件所设置的目录,该目录默认为空。如你要安装一个ORACLE数据库,可以放到该目录下。
/proc 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/root 超级用户(系统管理员)的主目录
/run 这个目录其实和/var/run是同一个目录,这里面存放的是一些服务的pid,一个服务启动完后,是有一个pid文件的。/run/进程产生的临时文件,一旦关机重启就消失了
/stv 该目录存放的是一些服务启动之后需要提取的数据
/sys 该目录存放的是与硬件驱动程序相关的信息。
/tmp 该目录是用来存放一些临时文件的,权限很大,任何用户都可以再里面填写和删除
/usr 用于存放系统应用程序,比较重要的目录/usr/local本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。
/var 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等

二、ls命令

到目前为止,用"ls"这个命令比较频繁;它用来列取文件或者目录(全名:list)。

ls命令选项 说明
ls 列出当前目录下的文件和目录;(不包含隐藏文件)
ls -a 列出当前目录下所有的文件和目录,含有隐藏文件的
ls -l 列出当前目录下所有除隐藏文件之外的所有文件的详细信息,包含权限,所属主,所属组以及文件创建日期和时间。
ls -lh 在ls -l 的基础上,列出文件的大小
ls -lta 以时间的顺序排序,从现在到之前顺序
ls -d 列出目录本身
ls -ld 列出显示目录的详细信息
ls -i 显示文件索引节点号(inode)。一个索引节点代表一个文件

以下演示,常用的几种“ls”用法:

如果想了解更多的"ls"命令选项用法,可以"main ls"

三、文件类型

我们用ls-l 查看当前目录详细信息

[root@ying01 ~]# ls -l总用量 4-rw-------. 1 root root 1418 5月 . 9 02:25 anaconda-ks.cfg

第一列类型 说明
d 目录
- 普通的文件
b 光盘、光驱、磁盘
s SQL文件
l 软连接
c 字符串设备

四、alias命令:

  • “alias”=故名思议是取别名的意思,将一个常用的比较长的命令用一个别名替代。
  • “which”=查询该命令所在目录;

用“which”查看“ls”,我们常用的“ls”其实是”ls --color=auto”的别名;

现实试验用“ls” 和”ls --color=auto”分别运行,可以看出执行结果是一模一样的;

系统默认下的别名;直接“alias”可以查看;

我们也可以自己设置一些名令的别名; alias  别名='命令'(注意命令要用'')

消除别名,unalias 别名

PATH命令,表示的一系列的路径,which在查看时用的就是PATH里的路径;在Linux安装一些软件通常要添加路径环境变量PATH.PATH环境变量通俗的讲就是把程序的路径"备案"到系统中,这样执行这些程序时就不需要输入完整路径,直接在bash输入程序名就可以执行.比如常用的"ls"命令就是添加好了环境变量才可以直接执行ls;

查看当前环境变量:echo $PATH

五、相对和绝对路径

  • 绝对路径:就是从根开始的;绝对路径就是从/开始的路径;如/123属于绝对路径;~/123 用户家目录,属于绝对路径;

  • 相对路径:不是以根开头的,相对当前目录来讲的路径;./123 属于相对路径;

[nba@damozhiying root]$ ls /home/nba    user10  user12  user14  user17  user3  user7  ying111user1  user11  user13  user15  user18  user4  user8[nba@damozhiying root]$ ls /home/nba/                           [nba@damozhiying root]$ touch /home/nba/1.txt             //在nba新建文件[nba@damozhiying root]$ ls /home/nba/                     //打开nba目录1.txt[nba@damozhiying root]$ ls ~                              //此时可以看出ls ~可以打开/home/nba 用户家目录是绝对路径1.txt

pwd 查看当前在哪个目录

六、CD命令

cd 全称:"change directory",进入到哪个目录,如 :cd /root/.ssh/

命令 释义
cd - 将返回你上一的路径:
cd 和 cd ~ 切换到当前用户的家目录下
cd .. 回到上一层目录

七、创建和删除目录mkdir rmdir

7.1 mkdir

mkdir: make directory;就是创建目录;用法:mkdir 目录(绝对路径)

mkdir -p:建立多级目录;

mkdir -pv :可视化创建进程

7.2 rmdir

rmdir:删除命令; 注意,它只能删除空目录;

那么touch 文件能否删除,结果一样,还是无法删除非空目录;那说明rmdir只能删除空目录;

八、rm命令

刚才测试rmdir只能删除非空目录(只是目录),而rm这个命令可以删除文件,也可以删除非空的目录。比较强大;

这里删除文件,都有提示,是否删除;“rm -f” :不会提示,直接删除;

history: 查看所有的输入指令记录,!tree,将运行history中最近一次的tree命令

rm -r,-rf 删除目录及相关联的

rm -rfv:可视化删除,新建两个txt文本;

因此rm -f 这个命令慎用;(不会提示,直接删除,效率之大,危险系数也大;)

九、环境变量PATH

PATH命令,表示的一系列的路径,which在查看时用的就是PATH里的路径;在Linux安装一些软件通常要添加路径环境变量PATH.PATH环境变量通俗的讲就是把程序的路径"备案"到系统中,这样执行这些程序时就不需要输入完整路径,直接在bash输入程序名就可以执行.比如常用的"ls"命令就是添加好了环境变量才可以直接执行ls;

那我们现在何自定义环境变量

第一步:先查看ls在哪个路径下,在这里我们可以看见他在/usr/bin下;

[root@ying01 ~]# which ls               //查看which在哪个目录//alias ls='ls --color=auto'  /usr/bin/ls

第二步:查看一下PATH(环境变量)下都有哪些目录

[root@ying01 ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

第三步:把 ls 的绝对路径CP一份到/tmp下

[root@ying01 ~]# cp /usr/bin/ls /tmp/ls2     //把ls命令复制到ls2,相当于复制ls//[root@ying01 ~]# ls /tmp/ks-script-jtXaOgls2

第四步:使用PATH(环境变量)赋值,在基础上再添加一个目录;

[root@ying01 ~]# PATH=$PATH:/tmp/[root@ying01 ~]# !echoecho $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/tmp/   //新增tmp目录//

第五步:which ls2 查看是否生效;我们看到ls2和ls 一样的功能;

[root@ying01 ~]# which ls2/tmp/ls2[root@ying01 ~]# ls23.txt  anaconda-ks.cfg

但是这个环境变量只是在当前终端存在,不能永久存在;现在需要配置一个文件profile

vi /etc/profile 进入按大“G"进入到最后一行,再按"A"让光标到最后一个字符末尾,回车;

上面略....unset iunset -f pathmungePATH=$PATH:/tmp/         //增加的语句

如何赋值PATH(环境变量)呢,直接用PATH赋值

[root@ying01 ~]# PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:[root@ying01 ~]# !echoecho $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:

十、cp命令

  • cp即copy的简写 ;命令格式为: cp [选项] [来源文件] [目的文件]
  • -r : 如果要复制一个目录,必须加-r选项,否则不能复制。
  • cp -r 如果目标目录存在的话,则会拷贝到目标目录下的目录里面,如果目标目录不在的话,则会创建目录放置那里。

十一、mv命令

该命令的格式为:mv [选项] [源文件或目录] [目标文件或目录]

该命令有几种情况:

1、目标文件是目录,但该目录不存在;(相当于改名称)

[root@ying01 ~]# ls /tmp/ying/ 1.txt  4  5  6[root@ying01 ~]# cd /tmp/ying/       //切换到ying目录下//[root@ying01 ying]# mv 4 7          //把目录4移到未有的目录7// [root@ying01 ying]# ls1.txt  5  6  7                      //相当于目录4改名为目录7//

2、目标文件是目录,且目录存在 (移动)

[root@ying01 ying]# mv 5 7           //把目录5移到目录7//[root@ying01 ying]# tree.├── 1.txt├── 6└── 7   └── 53 directories, 1 file

3、目标文件是文件,且该文件不存在 (相当于改名称)

[root@ying01 ying]# mv 1.txt 2.txt           //把文件1.txt 移到未有的 2.txt//[root@ying01 ying]# ls2.txt  6  7                                  //把文件1.txt 替换成 2.txt//

4、目标文件是文件,但该文件存在   (替换)

[root@ying01 ying]# touch 3.txt                //新建文件3//[root@ying01 ying]# ls2.txt  3.txt  6  7[root@ying01 ying]# mv 3.txt 2.txt             //把文件3复制到2//   mv:是否覆盖"2.txt"? y[root@ying01 ying]# ls2.txt  6  7                                    //其实是文件3,相当于替换//,//

十二、文档查看cat/more/less/head/tail

12.1 cat

cat -A 在行尾加了$作为结束符

参数 -n :显示行数

12.2 more

概念:当文件内容太多,一屏不能全部显示时,用cat是查看不了前面的内容,这时可以使用“Ctrl+B”可以向上翻屏,按Ctrl+F可以向下翻屏(也可以按空格),想退出输入“q”

12.3 less

  • 概念:跟more使用的方法一样,后面直接跟文件名;
  • less,输入命令,按上下光标键可以查看,按ctrl+B,ctrl+F,向前先后看,按Q退出,
  • 在less里面输入/字符串,可以按N查找相应只付出,N往下看,shift+N,可以向前查看;
  • less可以实现查找功能,打开一个文档后,输入“/” 后面跟你想要查找的字符串,输入“?”

12.4 head

概念:命令head用于显示文件的前10行,后面直接跟文件名。如果加“-n”选项,则显示文件的前几行。

语法:head /etc/passwd

显示头两行语法: head -n 2 /etc/passwd

12.5 tail命令

概念:和head类似,命令tail用于显示文件的最后10行,直接跟文件名,如果加“-n”,则显示文件的前几行。

语法:tail /etc/passwd

显示最后两行语法:tail -n 2 /etc/passwd

tail-f 查看某个不断在写入的日志文件,head也有此功能;

十三、文件和目录权限chmod

  • 目录或文件权限九个字节分为三段,每段三个字节;例:如下表示
  • 第一段表示:所有者的权限;
  • 第二段表示:所属组的权限;
  • 第三段表示:其他用户。
    • r:表示是否可读 (数字表示4)
    • w:表示是否可写 (数字表示2)
    • x:表示是否可执行 (数字表示1)

-rw-r--r--

拿这个做例子,最一开始"rw"前面的“-”这个表示文件或目录类型

1.假设:rw-r--r-x=645,第一段4+2=6,第二段4,第三段5.

这样的话,所有者有可读可写不可执行;所属组拥有可读不可写不可执行,其他用户可读可写可执行

chmod更改权限;

从以上命令看出,chmod只能改变目录或文件本身的权限,而不能改变其下的子目录或子文件

chmod - R 批量修改所有目录或文件

还有一种写法 u= ,g= ,o=

chmod还有一个“a+”“a-”选项参数,给三段都加上权限

十四、更改所有者和所属组chown

概念:chown命令可以更改文件的所有者

命令格式如下:
chown [-R] 账户名(root) 文件名 更改文件所有者
chown [-R] 账户名(root):组名(root,中间不加空格) 文件名
-R 选项只适合于目录,作用是级联更改,不仅更改当前目录,连目录里的目录或文件也全部更改

1、chown [-R] 账户名(root) 文件名 更改文件所有者

[root@ying01 ~]# ls3.txt  6  anaconda-ks.cfg  NBA[root@ying01 ~]# touch NBA/text                      //在NBA目录下新建文件text//[root@ying01 ~]# ls -ld NBA/drwxr-xr-x. 2 root root 18 5月  13 20:44 NBA/        //查看目录NBA详细信息//[root@ying01 ~]# chown user1 NBA/                    //更改NBA目录的所属主//[root@ying01 ~]# ls -ld NBA/                         drwxr-xr-x. 2 user1 root 18 5月  13 20:44 NBA/       //目录NBA所属主已经改为user1//

2、chgrp 改变所属组

chown :root /tmp/yum.log 也变所有组为root

[root@ying01 ~]# groupadd user2[root@ying01 ~]# chgrp user2 NBA/[root@ying01 ~]# ls -ld NBA/drwxr-xr-x. 2 user1 user2 18 5月  13 20:44 NBA/

3、chown 所有者:所属组 文件或目录

[root@ying01 ~]# ls3.txt  6  anaconda-ks.cfg  NBA    [root@ying01 ~]# ls -ld 6/drwxr-xr-x. 2 root root 6 5月  13 18:27 6/[root@ying01 ~]# chown user1:user2 6/[root@ying01 ~]# ls -ld 6/drwxr-xr-x. 2 user1 user2 6 5月  13 18:27 6/

4、chown -R的用法和chmod -R的用法是一样的

[root@ying01 ~]# ls -la NBA/                         //查看NBA/目录下所有文件信息//总用量 0drwxr-xr-x. 2 user1 user2  18 5月  13 20:44 .dr-xr-x---. 5 root  root  196 5月  13 20:42 ..-rw-r--r--. 1 root  root    0 5月  13 20:44 text[root@ying01 ~]# chown -R user1:user2 NBA/          //可以更改当前目录,连目录里的目录或文件全部修改[root@ying01 ~]# ls -la NBA/总用量 0drwxr-xr-x. 2 user1 user2  18 5月  13 20:44 .dr-xr-x---. 5 root  root  196 5月  13 20:42 ..-rw-r--r--. 1 user1 user2   0 5月  13 20:44 text      //子文件修改成功

十五、umask 确定目录或文件的权限

概念:默认情况下,目录的权限制是755;普通文件的权限制为644. 那么这个值是谁来规定的呢,就是umask。

我们创建新目录新目录8,并创建新文件8,查看它们初始权限;

[root@ying01 ~]# mkdir 8                               //创建目录8//[root@ying01 ~]# touch 8/8.txt                         //在目录8创建文件8//[root@ying01 ~]# ls -ld 8/drwxr-xr-x. 2 root root 19 5月  13 23:32 8/            //查看目录8权限为755//[root@ying01 ~]# ls -l 8/8.txt                        -rw-r--r--. 1 root root 0 5月  13 23:32 8/8.txt         //查看文件8权限为644//

一般新建目录和文件有如下规则:

若用户建立普通文件,则预设没有可执行权限,只有r、w两个权限,rw- rw- rw- (文件的权限)666若用户建立目录,则预设所有权限开放,rwx rwx rwx  (目录的权限) 777

但是为什么我们新建的目录和文件分别是755和644呢?此时就涉及到umask

[root@ying01 ~]# umask 0022                                      //默认为022,一般只看后三位//

则我们不难看出来:

  • 默认的目录权限777,umask的值是022,新建目录的权限是755;
  • 默认的文件权限666, umask的值是022,新建文件的权限是644;
  • 那么新建目录权限:777 -022=755;新建文件的权限:666-022=644

我们再umask设置一个新值:002,看下新建的目录和文件权限:

[root@ying01 ~]# umask 002[root@ying01 ~]# umask0002                                                        //我们设置为002//[root@ying01 ~]# mkdir 9[root@ying01 ~]# touch 9/9.txt[root@ying01 ~]# ls -ld 9/drwxrwxr-x. 2 root root 19 5月  13 23:59 9/                //查看目录9权限为775//  [root@ying01 ~]# ls -l 9/9.txt -rw-rw-r--. 1 root root 0 5月  13 23:59 9/9.txt            //查看文件9权限为664//

当umask的值为002,此时新建目录权限:777 -002=775;新建文件的权限:666-002=664 ;结果看出来完全吻合;

那umaskd 值为003的时候呢?

[root@ying01 ~]# umask 003                                  //我们设置为003//[root@ying01 ~]# umask 0003                                    [root@ying01 ~]# mkdir 10[root@ying01 ~]# touch 10/10.txt[root@ying01 ~]# ls -ld 10/drwxrwxr--. 2 root root 20 5月  14 00:05 10/               //查看目录10权限为774//[root@ying01 ~]# ls -l 10/10.txt                           -rw-rw-r--. 1 root root 0 5月  14 00:05 10/10.txt          //查看文件10权限为664//

那么此时新建目录权限:777 -003=774;新建文件的权限:666-003=663;此时看来不吻合;

其实这个貌似是用数字加减的算法,其实不是直接减去,像umask预设值002、022、003,只是巧合;应该按下面做减法;

666-003 = (rw-rw-rw-)-(--------wx)=rw-rw-r--=664777-003 = (rwxrwxrwx)-(--------wx)=rwxrwxr----=774

转载于:https://my.oschina.net/u/3851633/blog/1811074

你可能感兴趣的文章
高亮显示用户键盘输入(<kbd>)
查看>>
Linux利用scp命令来进行文件复制
查看>>
【LabVIEW技巧】你可以不懂OOP,却不能不懂封装
查看>>
你是否也忘了刷新视图?
查看>>
完全详解--使用Resource实现多语言的支持
查看>>
《Programming in Lua 3》读书笔记(十五)
查看>>
PHP读取xlsx Excel 文件
查看>>
R语言模型中的加总偏误与内生性:一种数值模拟方法
查看>>
ajax进error的原因
查看>>
[数据结构]浅谈哈希表的冲突避免策略
查看>>
python全栈考试作业 2017-03-30
查看>>
easyshell 安装
查看>>
UITextView 点击添加文字 光标处于最后方
查看>>
kudu 1.8.0(开发版) 源码安装
查看>>
LVS+Keepalived实现MySQL从库读操作负载均衡
查看>>
【转载】说说标准服务器架构(WWW+Image/CSS/JS+File+DB)续测试环境搭建
查看>>
day13-类的重写和类的私有方法
查看>>
[LeetCode][Java] Unique Paths II
查看>>
哈理工2015 暑假训练赛 zoj 2976 Light Bulbs
查看>>
Notes for C++
查看>>