linux文件和目录
linux文件属性
如下:
[root@localhost /]# ll
总用量 40
lrwxrwxrwx. 1 root root 7 5月 26 06:11 bin -> usr/bin
dr-xr-xr-x. 3 root root 4096 5月 25 22:50 boot
drwxr-xr-x. 3 root root 15 6月 1 15:18 data
上面的列分别为:
权限 连接 所有者 用户组 文件容量 修改日期 文件名
其中权限的结构为
文件类型1+所有者权限3+用户组权限3+其他用户权限3
改变文件的属性与权限
chgrp:改变文件所属的组。
chown:改变用户的所有者。
chmod:改变文件的权限。
示例:chmod 777 .bash
三个数字分别为:所属用户权限,用户组权限,其他人权限。
权限有:r:4 w:2 1:x组成。
目录与文件的权限意义:
权限对文件的意义:
- r:可以读取此文件的内容,如文本文件的文字内容。
- w:可以修改此文件的内容。
- x:可以被执行。
权限对目录的意义
- r:具有读取目录结构列表的权限,如ls命令。
- w:具有更改目录结构列表的权限:可以在该目录下新增新的文件和目录,删除改路下的文件和目录(不论改文件的权限如何),重命名该目录下的文件和目录,转移该目录内的文件和目录。
- x:可以进入该目录。也就是cd命令。
linux的常用目录
/ | Linux系统的根目录。 |
/bin/ | 存放系统命令的目录,普通用户和超级用户都可以执行里面的命令。 |
/sbin/ | 存放与系统环境设置相关的命令,只有超级用户才可以执行里面的命令,但是有些命令允许普通用户查看。 |
/usr/ | 存放系统软件资源的目录。它是"Unix Software Resource"的缩写,而不是user的缩写。类似于windows的program files。 |
/var/ | 存放动态数据的目录。主要保存日志、邮件、缓存等。一定程度上说,usr用来存储安装软件,var存储安装软件运行时的数据。 |
/usr/bin/ | 存放系统命令的目录,普通用户和超级用户都可以执行里面的命令。这些命令和系统启动无关(和/bin的区别) |
/usr/sbin/ | 存放根文件系统不必要的系统管理命令,如多数服务程序。只有超级用户可以使用。 |
/boot/ | 系统启动目录,存放与系统启动相关的文件,如内核文件、启动引导程序(grub)文件等。 |
/dev/ | 存放硬件设备文件的目录。Linux中所有的内容都会以文件形式保存,包括硬件。这个目录就是用来保存所有的硬件设备文件的。 |
/etc/ | 存放配置文件的目录。系统内所有采用默认安装方式(rpm包安装)的服务的配置文件都保存在这个目录中,如用户名和密码、服务的启动脚本、常用服务的配置文件等。 |
/root/ | 超级用户root(也叫超级管理员)的家目录。家目录是用户的默认登录位置,当切换到其他目录后,想迅速返回家目录,可直接使用 cd 命令。 |
/home/ | 普通用户的家目录。创建普通用户时,每个用户要有一个默认的登录位置,这个位置就是该用户的家目录。普通用户的家目录就是在 /home/ 下自动创建一个和用户名相同的子目录。如用户user01的家目录就是 /home/user01/ 。 |
/lib/ | 存放系统函数库的目录。一般是bin和sbin目录下的程序索要用到的函数库。 |
/opt/ | 第三方软件的安装目录。如:手工安装的源码包软件就可以安装到这个目录当中。不过,现在更多的用户和厂家倾向于把软件安装到 /usr/local/ 目录当中。 |
/proc/ | 虚拟文件系统。该目录中的数据并不是保存在硬盘中,而是保存在内存当中。主要用来保存进程、外部设备等信息。如 /proc/cpuinfo 保存的是CPU信息,/proc/devices 保存的是设备驱动信息列表。 |
/sys/ | 虚拟文件系统。和 /proc 目录相似,里面的数据也是保存在内存中的,它主要用来保存内核的相关信息。 |
/srv/ | 存放系统服务相关数据的目录。 |
/tmp/ | 临时目录。系统存放临时文件的目录,所有用户对于该目录都有读和写的权限。不要在该目录保存重要数据,最好每次开机都把该目录清空。 |
目录命令:
- cd:切换目录
- pwd:显示当前位置。
- mkdir:新建目录。
- rmdir:删除空目录。不能删除非空目录。
关于执行文件路径的变量:
[root@localhost /]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
这些目录下的可执行文件可以在任何的目录下直接使用命令执行。
echo是打印的命令。
文件与目录管理
ls:
- -a, --all 不隐藏任何以. 开始的项目
- -d, --directory list directories themselves, not their contents
- -l 使用较长格式列出信息
ll命令:相当于ls -l
ll -a 等于 ls -al
复制:cp
删除:rm
移动:mv
这三个命令都有这几个重要的选项:
- -r 递归
- -f强制 复制或者移动时目标文件已存在 那么会覆盖 删除的时候回忽略不存在的文件 不会提示
- -i 是否询问 复制或者移动的时候 如果目标文件存在 会询问是否覆盖 删除的时候 会询问用户是否删除。
显示文件内容
cat
-n输出行号
缺点是会把所有内容一次性展示出来,如果文件内容较多,就很不方便。
tac
反向展示。
more
一页一页翻动。缺点是只能往前翻页。
less
一页一页翻动。可以往前(PgUp键)往后(PgDn键)翻动。
/字符串 向下查找字符串
?字符串 向上查找字符串
n 重复前一个查询 按n会定位到下一个符合的位置。
N反向重复前一个查询
q 退出
head
取出前几行
如:head -n 10 file.conf
tail
取出后几行。
创建新文件
touch
默认权限:
创建的文件默认权限是666。
注:mkdir创建的目录的默认权限是777。
文件查找:
which查找脚本文件
在任何一个目录,在输入字符后,连续按两次tab键,就可以展示出所有这些字符开头的所有命令,这些命令就是在$PATH环境变量中配置的路径中的。
如下:
[root@localhost redis]# redis- 这里连续按两次tab键
redis-benchmark redis-check-dump redis-server
redis-check-aof redis-cli
[root@localhost redis]# which redis-cli
/usr/local/bin/redis-cli
which可以展示$PATH中配置的路径下的一个可执行文件在哪个目录中。但是普通的用户使用which找不到root的命令。
寻找特定文件
- whereis
根据文件名或者目录名进行全部匹配,不支持局部匹配。
[root@localhost share]# whereis mysql
mysql: /usr/bin/mysql /usr/lib64/mysql /usr/include/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz
可以查询出所有的mysql文件夹和mysql文件(不论任何文件类型)。
[root@localhost share]# whereis mys
什么也没找到。
whereis的速度很快,因为它不是直接扫描硬盘的,而是根据类似于索引的结构来查找的,这个索引可能是过时的,所以可以通过updatedb命令重新生成索引。这个命令在我的电脑上需要几分钟。
whereis是根据目录树进行查找的,所以可以看到自己有权限看到的所有文件,也能找到/sbin目录下的文件。
- locate
locate会扫描目录树,然后将所有局部包含查找字符串的路径都打印出来。locate也是根据目录树索引查找的,速度较快。
[root@localhost mysql]# locate mys
/etc/logrotate.d/mysql
/etc/rc.d/init.d/mysql
/etc/rc.d/rc0.d/K36mysql
/etc/rc.d/rc1.d/K36mysql
/etc/rc.d/rc2.d/S64mysql
/etc/rc.d/rc3.d/S64mysql
/etc/rc.d/rc4.d/S64mysql
/etc/rc.d/rc5.d/S64mysql
/etc/rc.d/rc6.d/K36mysql
/etc/selinux/targeted/modules/active/modules/mysql.pp
/root/.mysql_history
- find
find是通过扫描硬盘查找的。
[root@localhost mysql]# find / -name mysql
/run/lock/subsys/mysql
/etc/logrotate.d/mysql
/etc/rc.d/init.d/mysql
/var/lib/mysql
/var/lib/mysql/mysql
/usr/bin/mysql
/usr/lib64/mysql
/usr/share/mysql
/usr/include/mysql
/usr/include/mysql/mysql
/usr/mysql
[root@localhost mysql]# find /var -name mysql
/var/lib/mysql
/var/lib/mysql/mysql
[root@localhost mysql]# find / -name mys
找不到
注意:locate和find都不支持正则表达式,但是find支持*和?这种通配符。
压缩命令
- gzip zcat 解压压缩单个文件
[root@localhost usr]# gzip my.cnf
[root@localhost usr]# ll
-rw-r--r--. 1 root root 556 6月 6 12:01 my.cnf.gz
- tar打包目录
主选项:
c 创建新的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。相当于打包。
x 从档案文件中释放文件。相当于拆包。
t 列出档案文件的内容,查看已经备份了哪些文件。
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩。
辅助选项:
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩或解压? 一般格式为xx.tar.gz或xx. tgz
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩或解压?一般格式为xx.tar.bz2
-v :压缩的过程中显示文件!这个常用
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加其他参数!
-p :使用原文件的原来属性(属性不会依据使用者而变)
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
范例:
范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar
[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
[root@linu ~]# tar -zxvf /tmp/etc.tar.gz