Linux系统目录结构介绍
一、Linux系统优化
(一)变量
linux系统信息采集:
[root@centos6-kvm2 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@centos6-kvm2 ~]# uname -r
2.6.32-696.el6.x86_64
[root@centos6-kvm2 ~]# uname -m
x86_64
[root@centos6-kvm2 ~]# uname -a
Linux centos6-kvm2 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@centos6-kvm2 ~]#
/etc/redhat-release :存储系统信息位置
uname 显示系统信息:
uname -r :显示内核信息
uname -m:显示系统多少位
PS1是什么?系统的环境变量。一般都是大写的,在系统中任何地方都可以使用。
查看变量的内容:echo $PS1
[root@centos6-kvm2 ~]# echo $PS1
[u@h W]$
u=user
h=hostname
w=pwd
(二)添加用户
linux用户分类:root和普通用户。
创建用户:useradd
[root@centos6-kvm2 ~]# useradd lisi
[root@centos6-kvm2 ~]# id lisi
uid=1011(lisi) gid=1011(lisi) groups=1011(lisi)
[root@centos6-kvm2 ~]# passwd lisi
Changing password for user lisi.
New password:
BAD PASSWORD: it is too simplistic/systematic
Retype new password:
Sorry, passwords do not match.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
[root@centos6-kvm2 ~]#
用户之间的切换:
[root@centos6-kvm2 ~]# su - lisi #切换至lisi
[lisi@centos6-kvm2 ~]$ whoami
lisi
[lisi@centos6-kvm2 ~]$ exit #退出至root,或者ctrl+d
logout
[root@centos6-kvm2 ~]#
快捷键:ctrl+d:退出
(三)关闭selinux和iptables
(1)关闭selinux
查看selinux状态:
[root@centos6-kvm2 ~]# getenforce
Enforcing
临时关闭:
[root@centos6-kvm2 ~]# setenforce 0
[root@centos6-kvm2 ~]# getenforce
Permissive
永久关闭:(重启后生效)
[root@centos6-kvm2 ~]# vim /etc/selinux/config
[root@centos6-kvm2 ~]# grep '=disabled' /etc/selinux/config
SELINUX=disabled
[root@centos6-kvm2 ~]# getenforce
Enforcing
[root@centos6-kvm2 ~]# setenforce 0
[root@centos6-kvm2 ~]# getenforce
Permissive
[root@centos6-kvm2 ~]# vim /etc/selinux/config
[root@centos6-kvm2 ~]# grep '=disabled' /etc/selinux/config
SELINUX=disabled
(2)关闭iptables
查看防火墙状态:
[root@centos6-kvm2 ~]# /etc/init.d/iptables status
临时关闭:
[root@centos6-kvm2 ~]# /etc/init.d/iptables stop
永久关闭:让开机时候不启动
chkconfig 中3:表示开始启动还是不启动。
[root@centos6-kvm2 ~]# chkconfig iptables on
[root@centos6-kvm2 ~]# chkconfig | grep iptables
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@centos6-kvm2 ~]# chkconfig iptables off
[root@centos6-kvm2 ~]#
(四)中文乱码排查过程
字符集:utf-8,gbk,bgk,ascii,bgk2313
查看系统的字符集:
[root@centos6-kvm2 ~]# echo $LANG
en_US.UTF-8
临时修改字符集:
[root@centos6-kvm2 ~]# export LANG=zh_CN.UTF-8
[root@centos6-kvm2 ~]# echo $LANG
zh_CN.UTF-8
永久修改字符集:
[root@centos6-kvm2 ~]# vim /etc/sysconfig/i18n
LANG="en_US.UTF-8"
[root@centos6-kvm2 ~]# grep 'LANG' /etc/sysconfig/i18n
LANG="en_US.UTF-8"
出现中文乱码原因:
linux使用的字符集和远程连接的工具使用的字符集不同。
排查:
将linux系统使用的字符集和远程连接工具使用的字符集修改一致。
二 、Linux目录结构
linux目录特点:一切从根开始,一切皆是文件。
磁盘,设备,分区没有挂载,无法使用。
挂载相当于给磁盘分区,设备开了一个入口,通过入口进入到光盘和磁盘中。
[root@centos6-kvm2 ~]# mount /dev/cdrom /mnt/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@centos6-kvm2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.9G 6.5G 23% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
/dev/sr0 3.7G 3.7G 0 100% /mnt
[root@centos6-kvm2 ~]# cd /mnt/
[root@centos6-kvm2 mnt]# pwd
/mnt
(一)、linux核心目录简介
bin:二进制,二进制文件的存放目录。
boot:系统引导程序,系统的内核。
etc:系统的配置文件
home:普通用于的家目录
lib/lib64:libary库,库文件。系统是64位库文件。
lost+found:磁盘或者文件系统损坏断电临时文件存放位置。
media:挂载光盘。
mnt:临时挂载点。
opt:第三方软件安装位置。
proc:存放内存的信息,虚拟目录。
root:root家目录。
sbin:超级命令,只有root能用的命令存放位置。
selinux:selinux及配置文件存放位置。
sys:虚拟目录内存信息
tmp:临时文件存在位置。
usr:存放用户的程序
var:经常变换的文件,如:log。
(二)、Linux目录详解
(1)目录详解--网卡配置文件
目录1:/etc/sysconfig/network-scripts/ifcfg-eth0
[root@centos6-kvm2 /]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 ##网卡名称
TYPE=Ethernet ##互联网
ONBOOT=yes ## 在启动时候,是否开始网卡。
UUID= ##系统中唯一标识
NM_CONTROLLED=yes ##是否能被network软件进行管理。
BOOTPROTO=none ##网卡获取ip地址的方式。
#none,static ip地址是固定的,dhcp自动获取的。
IPADDR=10.0.0.202 ##ip地址
NETMASK=255.255.255.0 ###子网掩码
GATEWAY=10.0.0.254 ##网关,默认的出口
USERCTL=no ##是否允许普通用于管理网卡。
PEERDNS=yes ##网卡中dns配置是否优先于/etc/resolv.conf
IPV6INIT=no
DNS1=223.5.5.5 ##DNS
DNS2=223.6.6.6
[root@centos6-kvm2 /]#
(2)DNS问题排查
域名解析:把使用的域名转换为ip地址。
阿里的DNS:
223.5.5.5,223.6.6.6
114DNS:
114.114.114.114
Linux无法上网排查:
①ping www.baidu.com #是否可以上网
②ping 223.5.5.5 #DNS是否有问题
修改DNS:
在/etc/sysconfig/network-scripts/ifcfg-eth0中添加DNS配置。
重启网卡:
①ifdown eth0 && ifup eth0
②/etc/init.d/network restart
DNS配置文件:/etc/resolv.conf
(3)主机名修改
/etc/sysconfig/network
查看当前主机名:
[root@centos6-kvm2 /]# hostname
centos6-kvm2
临时修改主机名:
[root@centos6-kvm2 /]# hostname oldboy-01
[root@centos6-kvm2 /]# hostname
oldboy-01
永久修改主机名:重新登录生效
[root@centos6-kvm2 /]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=oldboy-01
[root@centos6-kvm2 /]# grep 'HOSTNAME' /etc/sysconfig/network
HOSTNAME=oldboy-01
快捷键:
vim中:大写D,删除光标之后内容。
ctrl + .:使用上一个命令最后的内容。
(4)目录详解/etc/hosts
ip 地址与域名解析关系,或者对主机名进行解析。一般用于测试。
(5)目录详解 /etc/fstab
/etc/fstabl 开机的时候自动挂载。
[root@centos6-kvm2 /]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Oct 10 23:33:34 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=fbcdee28-a042-425f-973f-b95d62fe7e4c / ext4 defaults 1 1
UUID=c59a9218-362c-44a2-a260-340e1c27e4f9 /boot ext4 defaults 1 2
UUID=414702c9-8348-45be-8b09-d3376d202d58 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[root@centos6-kvm2 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.9G 6.5G 23% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
/dev/sr0 3.7G 3.7G 0 100% /mnt
[root@centos6-kvm2 /]#
第一列表示设备/分区
第二列表示入口处。
(6)目录详解/etc/rc.local
开机时候自动运行的文件,需要在开机时候运行的程序,命令,服务。
开机自启动的两种方式:
①/etc/rc.local
②通过chkconfig管理开机自启动
(7)目录详解 /etc/inittab
开机的时候运行级别的配置文件
linux运行级别讲解
0:关机状态,不要把运行级别设置为0
1:当用户模式,root用户密码忘记了
2:多用户模式,但是没有nfs软件
3:完全的多用户模式,命令行模式(默认)
4:未使用
5:x11,桌面模式,图形化界面模式
6:重启状态
查看运行级别:
[root@centos6-kvm2 /]# runlevel
N 3
临时修改运行级别:
[root@centos6-kvm2 /]# init 5
[root@centos6-kvm2 /]# runlevel
3 5
永久修改运行级别:修改/etc/inittab 最后一行。
[root@centos6-kvm2 /]# tail -1 /etc/inittab
id:3:initdefault:
[root@centos6-kvm2 /]#
(8)目录详细讲解 /etc/init.d
/etc/init.d 服务管理的命令
(9) 目录详解/etc/profile,/etc/bashrc
系统环境变量和别名存放的位置。
LANG:单独放在/etc/sysconfig/i18n
/etc/bashrc 只存放别名。
- 当前用户生效的:
- /.bashrc
~/.bash_profile
~表示当前用户的家目录
(10)目录详解usr-local
/usr/local :编辑安装的软件默认的位置
linux安装软件方法:
①yum:自动解决安装依赖的软件。软件包管理工具。
yum install xx
②rpm:缺少什么自己解决。
③编辑:自己解决一切。
编辑安装的步骤:./configuer,make, make install
查看是否安装成功:
[root@centos6-kvm2 /]# rpm -qa | grep tree
tree-1.5.3-3.el6.x86_64
[root@centos6-kvm2 /]#
/user/share :存放手册等文件。
/var/log/message :系统默认日志信息
/var/log/secure :系统用户的登录日志信息。
如:[root@centos6-kvm2 /]# grep 'Failed' /var/log/secure
(11)目录详解 /proc/xxx
①查看内存信息:
[root@centos6-kvm2 /]# cat /proc/meminfo
[root@centos6-kvm2 /]# free -h
②查看cpu信息:
[root@centos6-kvm2 /]# cat /proc/cpuinfo
[root@centos6-kvm2 /]# lscpu
③查看负载信息:
[root@centos6-kvm2 /]# cat /proc/loadavg
最近1分钟,5分钟,15分钟 的平均负载。
[root@centos6-kvm2 /]# w
④查看系统的挂载信息:
[root@centos6-kvm2 /]# cat /proc/mounts
[root@centos6-kvm2 /]# df -h
[root@centos6-kvm2 /]# findmnt
三、闯关测试
(一)、Linux启动过程
按下电源
(1)开机自检(BIOS):内存、cpu、硬盘是否有问题(硬件检查)
(2)MBR引导:硬盘引导
(3)GRUB菜单:选择不同的内核
(4)加载内核(kernel)
(5)运行INIT进程:linux系统里面的第一个进程
(6)读取/etc/inittab配置文件:读取机器的运行级别(0-6)
(7)执行/etc/rc.d/rc.sysinit脚本:系统的初始化脚本,设置主机名,设置ip地址。
(8)执行/etc/rc.d/rc脚本:根据系统运行级别,在开机的时候启动不同的软件
(9)启动mingetty进程。
(二)环境变量PATH
环境变量:
①大写;
②在系统大部分地方都可以使用,含义相同。
LANG 和PATH
PATH存放的是命令的位置和路径:
[root@oldboy-01 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
linux下面运行命令的过程
①输入命令。
②在PATH里面路径进行查找。
③找到就运行
④找不到提示:command not found。
(三) 如何过滤出已知当前目录下oldboy中的所有一级目录。
查看某个软件是否安装:
rpm 包管理命令。
-qa 查询
-ql 查询软件包里面的内容
[root@oldboy-01 oldboy]# rpm -aq | grep tree
tree-1.5.3-3.el6.x86_64
[root@oldboy-01 oldboy]# rpm -ql tree #安装哪些软件包
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz
[root@oldboy-01 oldboy]#
方法1:
[root@oldboy-01 oldboy]# tree -d /oldboy
/oldboy
├── alexdir
├── dir032
├── ext
│ └── oldboy
├── test
├── xiaodong
├── xiaofan
└── xiing
方法2:
[root@oldboy-01 oldboy]# tree -dL 1 /oldboy
/oldboy
├── alexdir
├── dir032
├── ext
├── test
├── xiaodong
├── xiaofan
└── xiing
方法3:
[root@oldboy-01 oldboy]# find -maxdepth 1 -type d ! -name '.'
./xiaofan
./test
./xiing
./alexdir
./xiaodong
./dir032
./ext
方法4:
[root@oldboy-01 oldboy]# ls -l | grep '^d'
d--xr-xr-x. 2 oldboy oldboy 4096 Oct 21 2018 alexdir
drwxr--r-x. 2 root root 4096 Oct 21 2018 dir032
drwxr-xr-x. 3 root root 4096 Dec 13 23:51 ext
drwxr-xr-x. 2 root root 4096 Oct 24 2018 test
drwxr-xr-x. 2 root root 4096 Dec 13 23:51 xiaodong
drwxr-xr-x. 2 root root 4096 Dec 13 23:51 xiaofan
drwxr-xr-x. 2 root root 4096 Dec 13 23:51 xiing
方法5:
[root@oldboy-01 oldboy]# ls -l | awk '$2>1'
total 9552
d--xr-xr-x. 2 oldboy oldboy 4096 Oct 21 2018 alexdir
drwxr--r-x. 2 root root 4096 Oct 21 2018 dir032
drwxr-xr-x. 3 root root 4096 Dec 13 23:51 ext
drwxr-xr-x. 2 root root 4096 Oct 24 2018 test
drwxr-xr-x. 2 root root 4096 Dec 13 23:51 xiaodong
drwxr-xr-x. 2 root root 4096 Dec 13 23:51 xiaofan
drwxr-xr-x. 2 root root 4096 Dec 13 23:51 xiing
方法6:
[root@oldboy-01 oldboy]# ls -F | grep '/'
alexdir/
dir032/
ext/
test/
xiaodong/
xiaofan/
xiing/
(四)快速切换目录
快速回到上一次的目录:
cd -==cd $OLDBOY
[root@oldboy-01 oldboy]# cd /tmp/
[root@oldboy-01 tmp]# pwd
/tmp
[root@oldboy-01 tmp]# cd -
/oldboy
linux内置命令查找方法:
help cd (简介)
man cd (详细)
cd . :当前目录,cp内容值当前目录,cp /etc/hosts .
cd .. :进入当前目录上一级目录
cd ~ :进入当前用户的家目录
cd :表示家目录
(五)查看最近更新文件
[root@oldboy-01 etc]# ls -lrt
ls -l :显示详细信息
-F:给不同类型的文件加上不同的尾巴 /目录
-r :逆序
-t :按照文件的修改时间排序
(六)如何查看系统日志更新
/var/log/message
[root@oldboy-01 etc]# tail -f /var/log/messages
(七) 打印配置文件Nginx.conf
cat -n :显示内容和行号。
grep -n :显示内容和行号。
awk :三剑客老大,擅长取列
NR表示行号
$数字,表示某一列
$0 表示一整行内容
{print 显示}
sed 三剑客老二,取行,替换
=:给内容加行号
-n 取消默认输出,一般与p一起使用
-i 修改文件的内容
查找显示某几行:‘10p’,‘10,20p’
替换:'s###g'
方法1:
[root@oldboy-01 oldboy]# cat -n nginx.conf
方法2:
[root@oldboy-01 oldboy]# vim nginx.conf
set nu:显示行号
set nonu:取消显示行号
方法3:
[root@oldboy-01 oldboy]# grep 'stu' nginx.conf -n
[root@oldboy-01 oldboy]# grep '.' nginx.conf -n
.#正则表达式中所有。
方法4:
[root@oldboy-01 oldboy]# awk '{print NR,$0}' nginx.conf
方法5:
[root@oldboy-01 oldboy]# sed '=' nginx.conf | xargs -n2
(八)保存最近几日apach日志
find :-mtime 根据修改时间。
方法1:
[root@oldboy-01 logs]# find -type f -name '*.log' -mtime +7 | xargs ls -l
方法2:
[root@oldboy-01 logs]# ls -l $(find -type f -name '*.log' -mtime +7 )
方法3:
[root@oldboy-01 logs]# find -type f -name '*.log' -mtime +7 -exec ls -l {} ;
(九)问题解析
(1)linux的0-6的运行级别。
(2)系统安装完成后,希望让网络文件共享服务nfs(iptables),仅在3级别上开机启动。
[root@oldboy-01 logs]# chkconfig --level 3 iptables on
[root@oldboy-01 logs]# chkconfig | grep ipta
iptables 0:off 1:off 2:off 3:on 4:off 5:off 6:off
[root@oldboy-01 logs]#
(3)linux系统中查看中文,但是乱码,如何解决乱码问题。
linux使用的字符集与远程连接工具的不同。
修改xshell字符集
修改系统的字符集
命令行:export LANG=en_US.UTF-8
/etc/sysconfig/i18n中添加:LANG=en_US.UTF-8
source /etc/sysconfig/i18n
(十)备份文件
tar 压缩、解压
[root@oldboy-01 logs]# tar zcvf /tmp/etc.tar.gz /etc/
tar zcvf
z:通过gzip工具进行压缩。
c:表示create创建压缩包
v:verbose,显示执行过程
f:文件file,接上压缩包的名字
[root@oldboy-01 logs]# tar ztf /tmp/etc.tar.gz
tar ztf
t:表示list,显示压缩包的内容
解压:
tar zxvf etc.tar.gz
[root@oldboy-01 logs]# tar zxvf /tmp/etc.tar.gz
tar 在打包时候会把压缩包中绝对路径改成相对路径。
tar 命令在打包压缩的时候,会把绝对路径变化为相对路径。
解压到指定位置:-C
[root@oldboy-01 logs]# tar zxvf /tmp/etc.tar.gz -C /opt/
使用tar打包/etc/整个目录(打包机压缩,但需要排除/etc/services)
[root@oldboy-01 logs]# tar zcf /tmp/etc.paichu.tar.gz /etc/ --exclude=/etc/services
打包时候尽量使用相对路径进行打包,进入到要打包的路径中。
总结:
tar 打包压缩
创建压缩包,查看压缩包,解压
--exclude=:排除
-C:解压指定位置
(十一)awk应用
方法1:把要删除的内容替换为空
[root@oldboy-01 oldboy]# sed 's#i am##g' oldboy.txt | sed 's#mysql##g'
方法2:把逗号替换成默认的切割空格
[root@oldboy-01 oldboy]# sed 's#,# #g' /oldboy.txt | awk '{print $3,$5}'
方法3:使用多个分割符:,和空格,在中括号中。
[root@oldboy-01 oldboy]# awk -F '[, ]' '{print $3,$5}' oldboy.txt
在awk中,输出特殊字符:大括号中将两个字符使用逗号连接。
[root@oldboy-01 oldboy]# awk -F '[, ]' '{print $3','$5}' oldboy.txt
(十二)统计文件中多少行
[root@oldboy-01 oldboy]# wc -l /etc/hosts
11 /etc/hosts
ps -ef :系统中正在运行的进程。
ps -ef | grep 'sshd'
netstat -lntp | grep 'ssh'
[root@oldboy-01 oldboy]# ps -ef | grep 'sshd' |wc -l
4
查看文件中的数字:
[root@oldboy-01 oldboy]# egrep '3306|1521' /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
[root@oldboy-01 oldboy]# grep '3306|1521' /etc/services -E
mysql 3306/tcp # MySQL
mysql 3306/udp # MySQL
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
[root@oldboy-01 oldboy]#
| :表示或者的意思。
shell:单引号和双引号的区别
单引号:所见即所得
双引号:里面的特殊符号会被解析
[root@oldboy-01 oldboy]# echo 'hello lls $LANG $(hostname) 'pwd''
hello lls $LANG $(hostname) pwd
[root@oldboy-01 oldboy]# echo "hello lls $LANG $(hostname) 'pwd'"
hello lls en_US.UTF-8 oldboy-01 'pwd'
[root@oldboy-01 oldboy]# echo "hello lls $LANG $(hostname) $pwd"
hello lls en_US.UTF-8 oldboy-01
[root@oldboy-01 oldboy]#