wanggongzhen 2019-12-16
Linux系统目录结构介绍
一、Linux系统优化
(一)变量
linux系统信息采集:
[ ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [ ~]# uname -r 2.6.32-696.el6.x86_64 [ ~]# uname -m x86_64 [ ~]# 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 [ ~]#
/etc/redhat-release :存储系统信息位置
uname 显示系统信息:
uname -r :显示内核信息
uname -m:显示系统多少位
PS1是什么?系统的环境变量。一般都是大写的,在系统中任何地方都可以使用。
查看变量的内容:echo $PS1
[ ~]# echo $PS1 [\\h \W]\$ u=user h=hostname w=pwd
(二)添加用户
linux用户分类:root和普通用户。
创建用户:useradd
[ ~]# useradd lisi [ ~]# id lisi uid=1011(lisi) gid=1011(lisi) groups=1011(lisi) [ ~]# 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. [ ~]#
用户之间的切换:
[ ~]# su - lisi #切换至lisi [ ~]$ whoami lisi [ ~]$ exit #退出至root,或者ctrl+d logout [ ~]#
快捷键:ctrl+d:退出
(三)关闭selinux和iptables
(1)关闭selinux
查看selinux状态:
[ ~]# getenforce
Enforcing
临时关闭:
[ ~]# setenforce 0
[ ~]# getenforce
Permissive
永久关闭:(重启后生效)
[ ~]# vim /etc/selinux/config
[ ~]# grep ‘=disabled‘ /etc/selinux/config
SELINUX=disabled
[ ~]# getenforce Enforcing [ ~]# setenforce 0 [ ~]# getenforce Permissive [ ~]# vim /etc/selinux/config [ ~]# grep '=disabled' /etc/selinux/config SELINUX=disabled
(2)关闭iptables
查看防火墙状态:
[ ~]# /etc/init.d/iptables status
临时关闭:
[ ~]# /etc/init.d/iptables stop
永久关闭:让开机时候不启动
chkconfig 中3:表示开始启动还是不启动。
[ ~]# chkconfig iptables on
[ ~]# chkconfig | grep iptables
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[ ~]# chkconfig iptables off
[ ~]#
(四)中文乱码排查过程
字符集:utf-8,gbk,bgk,ascii,bgk2313
查看系统的字符集:
[ ~]# echo $LANG en_US.UTF-8
临时修改字符集:
[ ~]# export LANG=zh_CN.UTF-8 [ ~]# echo $LANG zh_CN.UTF-8
永久修改字符集:
[ ~]# vim /etc/sysconfig/i18n LANG="en_US.UTF-8" [ ~]# grep 'LANG' /etc/sysconfig/i18n LANG="en_US.UTF-8"
出现中文乱码原因:
linux使用的字符集和远程连接的工具使用的字符集不同。
排查:
将linux系统使用的字符集和远程连接工具使用的字符集修改一致。
二 、Linux目录结构
linux目录特点:一切从根开始,一切皆是文件。
磁盘,设备,分区没有挂载,无法使用。
挂载相当于给磁盘分区,设备开了一个入口,通过入口进入到光盘和磁盘中。
[ ~]# mount /dev/cdrom /mnt/ mount: block device /dev/sr0 is write-protected, mounting read-only [ ~]# 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 [ ~]# cd /mnt/ [ 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
[ /]# 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 [ /]#
(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
查看当前主机名:
[ /]# hostname centos6-kvm2
临时修改主机名:
[ /]# hostname oldboy-01 [ /]# hostname oldboy-01
永久修改主机名:重新登录生效
[ /]# vim /etc/sysconfig/network NETWORKING=yes HOSTNAME=oldboy-01 [ /]# grep 'HOSTNAME' /etc/sysconfig/network HOSTNAME=oldboy-01
快捷键:
vim中:大写D,删除光标之后内容。
ctrl + .:使用上一个命令最后的内容。
(4)目录详解/etc/hosts
ip 地址与域名解析关系,或者对主机名进行解析。一般用于测试。
(5)目录详解 /etc/fstab
/etc/fstabl 开机的时候自动挂载。
[ /]# 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 [ /]# 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 [ /]#
第一列表示设备/分区
第二列表示入口处。
(6)目录详解/etc/rc.local
开机时候自动运行的文件,需要在开机时候运行的程序,命令,服务。
开机自启动的两种方式:
①/etc/rc.local
②通过chkconfig管理开机自启动
(7)目录详解 /etc/inittab
开机的时候运行级别的配置文件
linux运行级别讲解
0:关机状态,不要把运行级别设置为0
1:当用户模式,root用户密码忘记了
2:多用户模式,但是没有nfs软件
3:完全的多用户模式,命令行模式(默认)
4:未使用
5:x11,桌面模式,图形化界面模式
6:重启状态
查看运行级别:
[ /]# runlevel
N 3
临时修改运行级别:
[ /]# init 5
[ /]# runlevel
3 5
永久修改运行级别:修改/etc/inittab 最后一行。
[ /]# tail -1 /etc/inittab
id:3:initdefault:
[ /]#
(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
查看是否安装成功:
[ /]# rpm -qa | grep tree
tree-1.5.3-3.el6.x86_64
[ /]#
/user/share :存放手册等文件。
/var/log/message :系统默认日志信息
/var/log/secure :系统用户的登录日志信息。
如:[ /]# grep ‘Failed‘ /var/log/secure
(11)目录详解 /proc/xxx
①查看内存信息:
[ /]# cat /proc/meminfo
[ /]# free -h
②查看cpu信息:
[ /]# cat /proc/cpuinfo
[ /]# lscpu
③查看负载信息:
[ /]# cat /proc/loadavg
最近1分钟,5分钟,15分钟 的平均负载。
[ /]# w
④查看系统的挂载信息:
[ /]# cat /proc/mounts
[vm2 /]# df -h
[ /]# 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存放的是命令的位置和路径:
[ ~]# 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 查询软件包里面的内容
[ oldboy]# rpm -aq | grep tree tree-1.5.3-3.el6.x86_64 [ 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 [ oldboy]#
方法1:
[ oldboy]# tree -d /oldboy /oldboy ├── alexdir ├── dir032 ├── ext │?? └── oldboy ├── test ├── xiaodong ├── xiaofan └── xiing
方法2:
[ oldboy]# tree -dL 1 /oldboy /oldboy ├── alexdir ├── dir032 ├── ext ├── test ├── xiaodong ├── xiaofan └── xiing
方法3:
[ oldboy]# find -maxdepth 1 -type d ! -name '.' ./xiaofan ./test ./xiing ./alexdir ./xiaodong ./dir032 ./ext
方法4:
[ 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:
[ 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:
[ oldboy]# ls -F | grep '/' alexdir/ dir032/ ext/ test/ xiaodong/ xiaofan/ xiing/
(四)快速切换目录
快速回到上一次的目录:
cd -==cd $OLDBOY
[ oldboy]# cd /tmp/ [ tmp]# pwd /tmp [ tmp]# cd - /oldboy
linux内置命令查找方法:
help cd (简介)
man cd (详细)
cd . :当前目录,cp内容值当前目录,cp /etc/hosts .
cd .. :进入当前目录上一级目录
cd ~ :进入当前用户的家目录
cd :表示家目录
(五)查看最近更新文件
[ etc]# ls -lrt
ls -l :显示详细信息
-F:给不同类型的文件加上不同的尾巴 /目录
-r :逆序
-t :按照文件的修改时间排序
(六)如何查看系统日志更新
/var/log/message
[ 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:
[ oldboy]# cat -n nginx.conf
方法2:
[ oldboy]# vim nginx.conf set nu:显示行号 set nonu:取消显示行号
方法3:
[ oldboy]# grep 'stu' nginx.conf -n [ oldboy]# grep '.' nginx.conf -n .#正则表达式中所有。
方法4:
[ oldboy]# awk '{print NR,$0}' nginx.conf
方法5:
[ oldboy]# sed '=' nginx.conf | xargs -n2
(八)保存最近几日apach日志
find :-mtime 根据修改时间。
方法1: [ logs]# find -type f -name '*.log' -mtime +7 | xargs ls -l 方法2: [ logs]# ls -l $(find -type f -name '*.log' -mtime +7 ) 方法3: [ logs]# find -type f -name '*.log' -mtime +7 -exec ls -l {} \;
(九)问题解析
(1)linux的0-6的运行级别。
(2)系统安装完成后,希望让网络文件共享服务nfs(iptables),仅在3级别上开机启动。
[ logs]# chkconfig --level 3 iptables on [ logs]# chkconfig | grep ipta iptables 0:off 1:off 2:off 3:on 4:off 5:off 6:off [ logs]#
(3)linux系统中查看中文,但是乱码,如何解决乱码问题。
linux使用的字符集与远程连接工具的不同。
修改xshell字符集
修改系统的字符集
命令行:export LANG=en_US.UTF-8
/etc/sysconfig/i18n中添加:LANG=en_US.UTF-8
source /etc/sysconfig/i18n
(十)备份文件
tar 压缩、解压
[ logs]# tar zcvf /tmp/etc.tar.gz /etc/
tar zcvf
z:通过gzip工具进行压缩。
c:表示create创建压缩包
v:verbose,显示执行过程
f:文件file,接上压缩包的名字
[ logs]# tar ztf /tmp/etc.tar.gz
tar ztf
t:表示list,显示压缩包的内容
解压:
tar zxvf etc.tar.gz
[ logs]# tar zxvf /tmp/etc.tar.gz
tar 在打包时候会把压缩包中绝对路径改成相对路径。
tar 命令在打包压缩的时候,会把绝对路径变化为相对路径。
解压到指定位置:-C
[ logs]# tar zxvf /tmp/etc.tar.gz -C /opt/
使用tar打包/etc/整个目录(打包机压缩,但需要排除/etc/services)
[ logs]# tar zcf /tmp/etc.paichu.tar.gz /etc/ --exclude=/etc/services
打包时候尽量使用相对路径进行打包,进入到要打包的路径中。
总结:
tar 打包压缩
创建压缩包,查看压缩包,解压
--exclude=:排除
-C:解压指定位置
(十一)awk应用
方法1:把要删除的内容替换为空
[ oldboy]# sed 's#i am##g' oldboy.txt | sed 's#mysql##g'
方法2:把逗号替换成默认的切割空格
[ oldboy]# sed 's#,# #g' /oldboy.txt | awk '{print $3,$5}'
方法3:使用多个分割符:,和空格,在中括号中。
[ oldboy]# awk -F '[, ]' '{print $3,$5}' oldboy.txt
在awk中,输出特殊字符:大括号中将两个字符使用逗号连接。
[ oldboy]# awk -F '[, ]' '{print $3','$5}' oldboy.txt
(十二)统计文件中多少行
[ oldboy]# wc -l /etc/hosts 11 /etc/hosts
ps -ef :系统中正在运行的进程。
ps -ef | grep ‘sshd‘
netstat -lntp | grep ‘ssh‘
[ oldboy]# ps -ef | grep 'sshd' |wc -l 4
查看文件中的数字:
[ 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 [ 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 [ oldboy]#
| :表示或者的意思。
shell:单引号和双引号的区别
单引号:所见即所得
双引号:里面的特殊符号会被解析
[ oldboy]# echo 'hello lls $LANG $(hostname) 'pwd'' hello lls $LANG $(hostname) pwd [ oldboy]# echo "hello lls $LANG $(hostname) 'pwd'" hello lls en_US.UTF-8 oldboy-01 'pwd' [ oldboy]# echo "hello lls $LANG $(hostname) $pwd" hello lls en_US.UTF-8 oldboy-01 [ oldboy]#