1.Linux目录结构
我们知道在Windows中,系统是装在C盘中的。
在装好系统时,会自动生成三个重要的文件夹,分别时Windows、User、Program files。
- Windows:用于存放系统文件。
- User:用于存放用户数据。
- Program Files:软件安装的默认位置。
同样,在安装Linux时,系统也会生成一些文件夹。相对Windows,Linux生成的文件夹数量更多。
/bin :存放常见的命令,例如ls、mount等,实际上就是一些程序。/bin是/usr/bin的快捷方式(软链接)。该目录不能作为挂载点。
/boot :存放和系统启动相关的东西,例如内核、参数模块等。可以单独挂载分区建议500M以上,免得出现空间不足的情况。/boot不能出现在LVM中,只能是一个标准分区。
/dev :存放磁盘、光驱、USB设备等设备。也不能给他挂载单独的分区。为什么这些设备可以存放在/dev文件夹中,简单原理如下:
图中,只有内核可以识别物理设备(有驱动的情况下),用户只能在用户空间通过/dev来操作设备,/dev相当于汽车里的中控台,我们对/dev的操作会被映射给内核空间,然后内核空间再根据要求去操作实际的物理设备。他们之间通过udev进行映射。
有时候我们在安装物理硬件后,无法发现设备,很可能就是内核无法识别硬件,可能是没有硬件设备驱动。
/etc :存放各种配置文件,包括操作系统、网络和还有应用程序等的配置文件。绝对不能单独划分分区。
/home :存放用户的家目录。可以单独划分分区。
/lib : 是/usr/lib的快捷方式,用于存放各种模块、动态库等。不可以单独划分分区。
/lib64 :是/usr/lib64的快捷方式,存放64位的模块、库等。不可以单独划分分区。
/media : 作为默认的介质挂载点,不过现在已经默认挂载在/run/media里(RHEL6及以前的版本是挂载到/media的),这个文件夹基本没用。
/mnt :用于用户习惯性的挂载光驱等设备的挂载点。
/opt :没什么用,只是有些应用会默认安装在这里。
/proc :用于存放内核参数,例如可以修改物理内存允许的使用率。
/root :root用户的家目录。
/run :程序或服务启动后,存放PID等内容。同时里面还有RHEL7默认介质挂载点media。
/sbin :是/usr/sbin的快捷方式,存放与系统关系紧密的命令,例如ifconfig。不能单独挂载分区。
/srv :一般用不到,只有特殊情况可能用到,例如在openstack配置的过程中可能用到。
/sys :不能单独挂载分区。存放与硬件相关的一些内容,例如可以修改CPU启用情况,如果有2颗CPU(通过lscpu查看),我们可以停用一颗。
我们在 /sys/devices/system/cpu/cpu0 下可以看到一个叫online的文件,里面是值0或1,分别代表该颗CPU是否启用。通过 echo 0 > online 就可以停用CPU。
/tmp :存放临时文件,或者垃圾文件。
/usr :相当于windows里的program files,用于存在应用程序。可以单独划分分区。
/var :存放数据库、日志什么的。可以划分分区。
2.文件路径
文件路径分为:
- 绝对路径:从根"/"开始算。
- 相对路径:相对另一个路径的路径。
使用tree软件可以以树形结构查看文件目录。
安装tree软件:
1)挂载光盘
mount /dev/cdrom /mnt
2)安装tree
rpm -ivh /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
cd ~用户名
可以进入指定用户名的家目录。例如在root用户下执行cd ~hanxinda就可以进入hanxinda的家目录。
cd -
回到上一次的目录。
3.常用命令
1)文件操作
在Linux中,文件名后缀大部分时候和类型是没有关系的,后缀只是作为名称的一部分。和Windows不一样。
file # 用来查看一个文件或目录的类型。例如file /boot 输出/boot: directory,说明/boot是一个文件夹。
touch # 用来创建一个文件,例如touch hello默认在当前目录创建hello文件,如果hello已经存在,则更新文件时间 (可以使用touch -t指定时间)。touch /leo/hello在/leo文件夹下创建hello文件,前提是/leo必须已经存在。
touch -t 201210201010 hello # 修改hello的最近访问和最近更改时间修改为2012年10月20日10点10分。
如果要同时创建多个文件:
touch aa bb cc # 同时创建aa bb cc。 touch aa{1,2,3,4,5} # 同时创建aa1,aa2,aa3,aa4,aa5。 touch aa{1..5} # 同时创建aa1,aa2,aa3,aa4,aa5。
stat # 查看文件信息。例如访问时间、创建时间、修改时间等。
rm # 删除文件。在普通用户下使用rm hello会直接删除,并没有提示确认。而在root下使用rm hello就会提示确认。这是为什么,原因是root下,rm是rm -i 的alias别名,执行rm hello相当于执行rm -i hello,所以会提示删除确认,为的是防止误删。
rm -f # 强制删除,不会提醒确认。
rm -r # 递归的删除文件和文件夹。
rm -rf /* #删除根目录下的所有文件,千万不要使用该命令,使用后基本无法恢复。
wc # 统计文件中内容。wc -l统计行数,wc -w统计单词(空格分割就是单词),wc -c统计字符。
2)软硬链接
ln # 链接(软连接、硬链接)。硬链接在后面讲解。软连接就相当于Windows下的快捷方式。
ln -s hello helloo # 创建hello的软连接helloo。通过ls -l查看可以看到helloo -> hello。
3)文件查看
cat # 查看文本文件的内容。但只适合查看小文件,太长的文件不合适。
cat -n # 可以在查看时显示行号。
cat -A # 可查看隐藏的换行符。
more # 从文件的开始显示文件内容。问题是只能往后看,不能往前看。
less # 比较方便的查看文件内容。支持前后滚动。按enter可以一行一行往后查看,按空格可以一页一页往后查看,按pgup可以往前翻一页,按pgdown可以往后翻一页,按home可以回到文件开头,按end可以跳到文件结尾。按"/"可以进行查询,按n往后查询,N往前查询。按q退出。
head # 查看文件的前几行,默认10行。例如head /etc/passwd,默认显示前10行内容。
head -n 8 # 查看文件的前8行。也可以写为head -8 /etc/passwd。
tail # 查看文件的尾几行,默认10行。tail -n +35 /etc/passwd表示从35行开始一直显示到最后。
tail -f # 动态的查询文件。例如进行日志监控等。
4)文件夹操作
mkdir # 创建文件夹。例如mkdir /zz,在根目录下创建文件夹zz。
mkdir -p # 递归的创建多层文件夹。例如mkdir -p /kk/123,即在根目录下创建kk文件夹,并在kk里面创建123文件夹。
rmdir # 删除一个目录,但是如果目录有多层的话,就无法删除。这时我们可以使用rm命令来进行删除。
rm -r # 递归的删除一个目录,即直接删除该目录和目录下所有内容。
rm -rf #递归强制删除,千万不要使用rm -rf /,会导致系统崩溃。
5)复制剪切操作
cp # 复制文件或文件夹。cp /hello /usr/hello2,把根目录下的hello文件复制到/usr下,并命名为hello2。可以同时拷贝多个文件:cp /hello /hello2 /usr,把根目录下的hello和hello2拷贝到/usr目录下。
cp -p # 默认拷贝时只会拷贝文件的内容,文件的属性,例如创建时间等默认是不拷贝的。使用-p选项可以拷贝属性。
cp -rf # 强制拷贝文件和文件夹。
cp -rfp # 强制拷贝文件和文件夹,并拷贝属性。
cp -a # -a表示归档,相当于-rfp都包含了。
mv # 移动文件或文件夹到另一个路径,即剪切。
====