Linux基础

Linux FHS

文件系统层次结构标准Filesystem Hierarchy Standard,FHS)定义了Linux操作系统中的主要目录及目录内容

FHS存在的目的是希望让用户可以比较容易的理解已经安装的软件包在哪些目录下,也希望各个发行版和软件厂商能够遵循这个标准。

目录描述
/整个文件系统层次结构的根目录
/bin/放置着系统里必备可执行文件
/boot/系统的引导程序文件
/dev/所有系统中使用的外部设备
/etc/系统范围内的配置文件
/home/家目录
/lib//bin/和 /sbin/中二进制文件必要的库文件
/media/可移除媒体的挂载点
/mnt/临时挂载的文件系统
/opt/可选的应用软件包
/proc/虚拟文件系统
/root/超级用户的家目录
/sbin/必要的系统二进制文件
/srv/站点的具体数据由系统提供
/usr/存储只读用户数据
/var/变量文件

Linux基本操作命令

Linux内置编辑器

vi

vi是一种模式编辑器。不同的按钮和键击可以更改不同的“模式”。

基本上vi可以分为三种状态

命令模式(command mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode

命令行模式常用功能键

  • 按「i」 进入插入模式后从光标当前的位置开始输入文字
  • 按「a」进入插入模式后从光标下一个位置开始输入文字
  • 按「o」进入插入模式后从光标下一行行首开始输入文字
  • 按「ESC」切换为命令模式
  • 按「h」「j」「k」「l」分别控制光标左下上右
  • 按「0」回到行首
  • 按「w」换行
  • 按「e」光标跳到下个字的字尾
  • 按「x」删除光标所在位置的"后面"一个字符
  • 按「X」删除光标所在位置的"前面"一个字符
  • 按「u」撤销
  • 按「ESC+:+wq」保存并退出
  • 按「ESC+:+q!」不保存并退出

插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式

底行模式(last line mode)

将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号

nano

nano是一个体积小巧而功能强大的文本编辑器

按「Ctrl+W」搜索:输入你要搜索的关键字,回车确定。这将会定位到第一个匹配的文本,接着可以用Alt+W来定位到下一个匹配的文本

按「Ctrl+O」来保存所做的修改

按「Ctrl+X」退出 如果修改了文件,会询问你是否需要保存修改。输入Y确认保存,输入N不保存,按Ctrl+C取消

Linux系统

Linux有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本。商业版本以Redhat为代表,开源社区版本则以debian为代表

Centos\Debian\Ubuntu

运维命令

strace

strace

strace命令 是一个集诊断、调试、统计与一体的工具

实例

做一个很简单的程序来演示strace的基本用法。这个程序的C语言代码如下:
filename test.c
#include <stdio.h>
int main()
{
    int a;
    scanf("%d", &a);
    printf("%09d\n", a);
    return 0;
}
然后用gcc -o test test.c编译一下,得到一个可执行的文件test。然后用strace调用执行:
strace ./test
执行期间会要求你输入一个整数,输入99,最后得到如下的结果

从trace结构可以看到,系统首先调用execve开始一个新的进程,接着进行环境的初始化操作,停顿在”read(0,”上面,这也就是执行到了scanf函数的位置,等待输入数字呢,在输入完99之后,在调用write函数将格式化后的数值”000000099″输出到屏幕,最后调用exit_group退出进行,完成整个程序的执行过程。

netstat

netstat

查看Linux中网络系统状态信息

实例

列出所有端口 (包括监听和未监听的)
netstat -a     #列出所有端口
netstat -at    #列出所有tcp端口
netstat -au    #列出所有udp端口    
                         
列出所有处于监听状态的 Sockets
netstat -l        #只显示监听端口
netstat -lt       #只列出所有监听 tcp 端口
netstat -lu       #只列出所有监听 udp 端口
netstat -lx       #只列出所有监听 UNIX 端口

显示每个协议的统计信息
netstat -s   显示所有端口的统计信息
netstat -st   显示TCP端口的统计信息
netstat -su   显示UDP端口的统计信息

在netstat输出中显示 PID 和进程名称
netstat -pt

dstat

dstat

通用的系统资源统计工具

实例

yum install -y dstat
安装完后就可以使用了,dstat非常强大
可以实时的监控cpu、磁盘、网络、IO、内存等使用情况。

使用dstat,默认使用的是-cdngy参数
分别显示cpu、disk、net、page、system信息
默认是1s显示一条信息
可以在最后指定显示一条信息的时间间隔
如dstat 5是5s显示一条
dstat 5 10表示5s显示一条,一共显示10条。

更多查看:学习linux命令,看这篇2w多字的命令详解就够了

脚本

Shell

Python

Perl

基础服务

LAMP(Linux+Apache+MySQL+PHP)

LNMP(Linux+Nginx+MySQL+PHP)

FTP

DNS

SAMBA

EMAIL

NTP

DHCP

运维平台工具

SSH证书

Nagios

Puppet

Zabbix

Cacti

SaltStack

pssh/dsh

Fabric

KVM虚拟化

虚拟化概念

指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互相不影响,从而显著提高计算机的工作效率。

KVM原理

全称是基于内核的虚拟机(Kernel-based Virtual Machine)

KVM基础功能

KVM高级功能

KVM管理工具

硬件

接口类型

查看硬件信息

服务器类型

安全

防火墙配置

iptables

iptables命令 是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置

语法
iptables(选项)(参数)
参数作用
-P设置默认策略:iptables -P INPUT (DROP
-F清空规则链
-L查看规则链
-A在规则链的末尾加入新规则
-I num在规则链的头部加入新规则
-D num删除某一条规则
-s匹配来源地址IP/MASK,加叹号"!"表示除这个IP外
-d匹配目标地址
-i网卡名称 匹配从这块网卡流入的数据
-o网卡名称 匹配从这块网卡流出的数据
-p匹配协议,如tcp,udp,icmp
--dport num匹配目标端口号
-sport num匹配来源端口号
防火墙的策略

防火墙策略一般分为两种,一种叫通策略,一种叫堵策略,通策略,默认门是关着的,定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进

实例

清空当前的所有规则和计数

iptables -F  # 清空所有的防火墙规则
iptables -X  # 删除用户自定义的空链
iptables -Z  # 清空计数

配置允许ssh端口连接

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
# 22为你的ssh端口, -s 192.168.1.0/24表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。 -j ACCEPT表示接受这样的请求

开启相应的服务端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 开启80端口,因为web对外都是这个端口
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT # 允许被ping

屏蔽IP

iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP  # 屏蔽恶意主机
iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP      #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP    #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP    #封IP段即从123.45.6.1到123.45.6.254的命令是

ipset

规则集类型
hash:net #创建网络规则集(可以是是网段 或者 IP)
hash:net,port #创建网络规则集,带端口
基础用法
ipset create black_list hash:net    #创建规则集
ipset add black_list 10.0.0.0/24    #给新加的规则添加IP段
ipset del black_list 10.68.22.1/24  #删除IP
ipset flush black_list              #清空规则集black_list里的规则
ipset save black_list -f rule.txt   #将规则导出为文件
ipset restore -f rule.txt           #将规则导入ipset
ipset destroy black_list            #删除black_list规则集
ipset destroy                       #清除所有ipset规则集
ipset list     (pset -L)            #查看ipset现有规则集
灵活用法
#创建集合指定初始hash大小是4096,如果满了,这个hash会自动扩容为之前的两倍。最大能存储的数量是100000个
ipset create black_list hash:net,port hashsize 4096 maxelem 1000000   
ipset add black_list 3.4.5.6,80         #指定端口80,但是没指定协议,默认TCP
ipset add black_list 5.6.7.8,udp:53           #
ipset add black_list 1.2.3.4,80-86            #指定一个端口范围

ipset add black_list 123.123.123.0/24         #
ipset add black_list 123.123.123.0/30 nomatch #这是排除的意思(即将 123.123.123.0/30段从123.123.123.0/24里面排除)
iptables灵活调用方式
#黑名单用法(拒绝规则集里的地址)
iptables -I INPUT -m set --match-set black_list src -j DROP   

#白名单用法(不拒绝规则集里的地址)
iptables -I INPUT -m set ! --match-set black_list src -j DROP   

网络

TCP/IP协议

抓包 tcpdump

底层

Linux C

Linux 内核