1. Linux系统的目录结构
在Linux中一切皆文件,这些文件按照一定的规则存放在不同的目录当中。为了能够快速找到文件及以后的操作的规范性,我们必须记清楚Linux的目录结构。

Windows:以多跟的方式组织文件 C:\ D:\ E:
Linux:以单跟的方式组织文件 /
1.1 存放命令相关的目录
/bin:普通用户使用的命令。例如:/bin/ls; /bin/date
/sbin:超级管理元使用的命令。例如/sbin/service;/sbin/useradd
[test1@node2 ~]$ useradd jack
-bash: /usr/sbin/useradd: Permission denied
# 普通用户无法使用useradd的命令
1.2存放用户相关的家目录
/home:存放普通用户的家目录。
/root:超级管理员root的家目录,普通用户无操作权限。
每个用户的家目录文件存在着差异,就像Windows一样,不同的用户登陆系统显示的桌面环境是不一样的。
1.3 系统文件目录
/usr:相当于C:\Windows。
/usr/local:软件安装的目录,相当于C:\Program File。
/usr/bin:普通用户使用的应用程序(重要)。
/usr/sbin:超级管理员使用的应用程序(重要)
/usr/lib:库文件Glibc 32bit。若删除可能导致命令不可用。
/usr/lib64:库文件Glibc 64bit。若删除可能导致命令不可用。
1.4 启动目录
/boot:存放的系统启动相关的文件,例如kernel,grub(引导装载程序)等。
[root@node2 ~]# ll /boot | grep vm
-rwxr-xr-x. 1 root root 6639904 Jul 24 23:38 vmlinuz-0-rescue-cc09b6cf7038418bae14d61df6427b48
-rwxr-xr-x. 1 root root 6639904 Nov 9 2018 vmlinuz-3.10.0-957.el7.x86_64

上图说明/boot目录下有关于开机应道相关的文件。
1.5 配置文件
/etc:配置文件目录。极其重要,后续所有服务的配置文件都在这个目录中。
/etc/sysconfig/network-scripts/ifcfg- :网络配置文件。
/etc/hostname:更改主机名。
/etc/resolv.conf:更改DNS,优先级小于网络配置文件中的DNS。具体格式如下:
[root@node2 ~]# vim /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 10.0.0.254
nameserver 114.114.114.114
/etc/hosts:本地域名解析文件。
[root@node2 ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.201 www.node.com
测试解析结果
[root@node2 ~]# ping www.node.com
PING www.node.com (10.0.0.201) 56(84) bytes of data.
64 bytes from www.node.com (10.0.0.201): icmp_seq=1 ttl=64 time=0.046 ms
64 bytes from www.node.com (10.0.0.201): icmp_seq=2 ttl=64 time=0.050 ms
1.6 可变项目与临时目录
/var:存放一些可变的文件。例如日志文件,即/var/log/下的文件。
查看登陆到服务器的用户:
[root@node2 log]# cat /var/log/secure
Jul 26 14:55:48 node2 sshd[7342]: Address 10.0.0.1 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
Jul 26 14:55:48 node2 sshd[7342]: Accepted password for root from 10.0.0.1 port 60772 ssh2
# 从10.0.0.1就受了一个root的密码。端口为60772
Jul 26 14:55:49 node2 sshd[7342]: pam_unix(sshd:session): session opened for user root by (uid=0)
# 为root用户打开了会话。
Jul 26 14:56:41 node2 sshd[7371]: Address 10.0.0.1 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
Jul 26 14:56:45 node2 sshd[7371]: Accepted password for test2 from 10.0.0.1 port 60784 ssh2
# 从10.0.0.1接受了test2的密码。对口好为60784
Jul 26 14:56:45 node2 sshd[7371]: pam_unix(sshd:session): session opened for user test2 by (uid=0)
# 为test2用户打开了一个会话。
/var/tmp:进程产生的临时文件。
/tmp:系统历史目录(类似与公共厕所)
1.7 设备目录文件
/dev:存放设备文件。比如硬盘、分区、光驱、会话终端等。
/dev/sd :硬盘分区及硬盘分区。例如sda sdb sdc4等。
[root@node2 log]# ll /dev/sd*
brw-rw----. 1 root disk 8, 0 Jul 26 14:06 /dev/sda
brw-rw----. 1 root disk 8, 1 Jul 26 14:06 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jul 26 14:06 /dev/sda2
brw-rw----. 1 root disk 8, 3 Jul 26 14:06 /dev/sda3
/dev/null:黑洞设备,只进不出。
/dev/zero:源源不断的产生数据。
[root@node2 ~]# dd if=/dev/zero of=/opt/test.txt bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 19.7035 s, 54.5 MB/s
[root@node2 ~]# ll -h /opt/test.txt
-rw-r--r--. 1 root root 1.0G Jul 26 15:30 /opt/test.txt
/dev/random:生产随机数的设备。
[root@node2 ~]# echo $RANDOM
29939
[root@node2 ~]# echo $RANDOM
26472
[root@node2 ~]# echo $RANDOM
22698
1.8 虚拟的文件系统
/proc:反应当前系统正在运行的进程实时状态。
例:
[root@node2 ~]# ps aux | grep httpd
# 查看httpd相关的服务进程
root 7268 0.0 0.5 230408 5228 ? Ss 14:48 0:00 /usr/sbinhttpd -DFOREGROUND
apache 7272 0.0 0.3 230408 3028 ? S 14:49 0:00 /usr/sbinhttpd -DFOREGROUND
apache 7273 0.0 0.3 230408 3028 ? S 14:49 0:00 /usr/sbinhttpd -DFOREGROUND
apache 7274 0.0 0.3 230408 3028 ? S 14:49 0:00 /usr/sbinhttpd -DFOREGROUND
apache 7275 0.0 0.3 230408 3028 ? S 14:49 0:00 /usr/sbinhttpd -DFOREGROUND
apache 7276 0.0 0.3 230408 3028 ? S 14:49 0:00 /usr/sbinhttpd -DFOREGROUND
root 7547 0.0 0.0 112708 976 pts/2 R+ 15:42 0:00 grep --color=auto httpd
[root@node2 ~]# ls /proc/7268
# 在/proc中可以查看到这个进程号所对应的文件
attr cwd map_files oom_adj schedstat task
autogroup environ maps oom_score sessionid timers
auxv exe mem oom_score_adj setgroups uid_map
cgroup fd mountinfo pagemap smaps wchan
clear_refs fdinfo mounts patch_state stack
cmdline gid_map mountstats personality stat
comm io net projid_map statm
coredump_filter limits ns root status
cpuset loginuid numa_maps sched syscall
[root@node2 ~]# systemctl stop httpd
# 停止httpd这个服务
[root@node2 ~]# ls /proc/7268
# 查看不到这个进程所对应的文件
ls: cannot access /proc/7268: No such file or directory
1.9 软连接形式目录
在CentOS7中/bin,/sbin,/lib,/lib64都是以软链接的形式连接到/usr目录下。
[root@node2 ~]# ll / | grep lr
lrwxrwxrwx. 1 root root 7 Jul 24 23:31 bin -> usr/bin
lrwxrwxrwx. 1 root root 7 Jul 24 23:31 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Jul 24 23:31 lib64 -> usr/lib64
lrwxrwxrwx. 1 root root 8 Jul 24 23:31 sbin -> usr/sbin
/media:提供设备的挂载点。
/mnt:提供设备的挂载点。
/opt:第三方工具默认的安装目录。比如oracle数据库。
/run:进程运行的pid。
[root@node2 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
2.文件定义
比如: /etc/hostname,整个文件中包含文件名称以及文件所在的位置,我们将这个叫做路径,也就是说我们是通过路径对文件进行定位。
绝对路径:只要是以/开始的命令都算绝对路径。例如:
[root@node2 ~]# ls /etc/sysconfig/network-scripts/ifcfg-ens32
相对路径:相对于当前目录的路径。例如:
[root@node2 sysconfig]# cat network-scripts/ifcfg-ens32
cd常用参数及说明
cd: 切换目录,例: cd /etc
cd - : 切换回上一次所在的目录
cd ~ : 切换回当前用户的家目录,注意:root和普通用户是否有所不同。
cd . : 代表当前目录,一般在拷贝、移动等情况下使用 cp /etc/hostname ./
cd .. : 切换回当前目录的上级目录
例:
[root@node2 ~]# cd /etc/sysconfig/network-scripts/
# 绝对路径,进入/etc/sysconfig/network-scripts/目录
[root@node2 network-scripts]# cd
# 回到家目录
[root@node2 ~]# cd -
/etc/sysconfig/network-scripts
#回到上次所在的目录
[root@node2 network-scripts]# cd ~
[root@node2 ~]# cd .
# 到当前目录
[root@node2 ~]# cd ..
# 回到上级目录
[root@node2 /]#
3. 文件操作
文件操作主要包括文件的创建、复制、移动、删除等
mkdir常用参数及说明
选项 | 解释 |
---|---|
-p | 递归创建目录 |
创建一个名称为haha目录
[root@node2 ~]# mkdir haha
同时创建多个目录
[root@node2 ~]# mkdir hehe xixi lala
创建dir-1到dir-50的目录
[root@node2 ~]# mkdir dir-{1..50}
利用{ }灵活创建目录
[root@node2 ~]# mkdir -p /opt/{bin,logs,conf}/test
[root@node2 ~]# tree /opt
/opt
├── bin
│ └── test
├── conf
│ └── test
└── logs
└── test
touch命令
创建一个名为test.txt的文件
[root@node2 ~]# touch test.txt
mv命令
把test.txt移动到dir-1目录中
[root@node2 ~]# mv test.txt dir-1/
把dir-1中的test.txt移动到dir-2目录下,并重命名为test2.txt
[root@node2 ~]# mv dir-1/test.txt dir-2/test2.txt
把test2.txt重命名为test3.txt
[root@node2 dir-2]# mv test2.txt test3.txt
把dir-1、dir-2 和 dir-3 移动到 dir-4 中
[root@node2 ~]# mv dir-1 dir-2 dir-3 dir-4
[root@node2 ~]# ll dir-4
total 0
drwxr-xr-x. 2 root root 6 Jul 26 17:03 dir-1
drwxr-xr-x. 2 root root 23 Jul 26 17:08 dir-2
drwxr-xr-x. 2 root root 6 Jul 26 16:54 dir-3
rm常用参数及说明
选项 | 解释 |
---|---|
-f | 强制删除,没有提示 |
-r | 递归删除,删除目录时必须加r |
强制删除test3.txt
[root@node2 dir-2]# rm -f test3.txt
删除目录
[root@node2 dir-4]# rm dir-1
rm: cannot remove ‘dir-1’: Is a directory
# 不加-r选项,删除失败
[root@node2 dir-4]# rm -r dir-1
rm: remove directory ‘dir-1’? y
删除所有以 dir-开头的目录
[root@node2 ~]# rm -rf dir-*
网友评论