Linux知识补充点

完成基础知识后,多搜索网络综合文档,整理为我所用

/sed
/模式空间
/awk
seq
split

Network
iptables
selinux

watch
crontab
eval
expr

FTP
SSH


/LVM
/Heartbeat
/Keepalived


/linux服务器优化
/负载均衡

/常用脚本、命令

seq

以指定增量打印数字序列。

基本用法

seq [选项]... 尾数
seq [选项]... 首数 尾数
seq [选项]... 首数 增量 尾数

选项:

-f, --format=格式 使用printf 样式的浮点格式
-s, --separator=字符串 使用指定字符串分隔数字(默认使用:
)
-w, --equal-width 在列前添加0 使得宽度相同

例:

  • 尽可能显示大整数

seq --format=%1.f 1000000 1000001

显示
1000000
1000001

对比,不使用--format的情况,默认使用%g显示

[plain]
$ seq 1000000 1000001  

显示
1e+06
1e+06

  • 显示等宽数字,位数不足用前导0补齐

seq -w -s ' ' 0 10

显示
00 01 02 03 04 05 06 07 08 09 10

注:-s用于改变字数间的分隔符,-w用以保证等宽显示。

split

切割文件

split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]

参数:

-<行数>或-l<行数>  指定每多少行就要切成一个小文件。

  -b<字节>  指定每多少字就要切成一个小文件。支持单位:m,k

  -C<字节>  与-b参数类似,但切割时尽量维持每行的完整性。

  --help  显示帮助。

  --version  显示版本信息。

  [输出文件名]  设置切割后文件的前置文件名,split会自动在前置文件名后再加上编号。

说明:
split可将文件切成较小的文件,预设每1000行会切成一个小文件。

 
使用例子:

split -b 100m 1111.log (按照字节分隔)
split -l 1000000 1111.log(按照行数分隔)

eval

eval cmd

eval对cmd两遍扫描,如第一遍扫描后,cmdLine是普通命令,则执行;如cmdLine含变量间接引用,则保证间接引用语义。

举例如下:

set 11 22 33 44

如要输出最近一参数,即44,使用:

echo $4

但如我们不知道几个参数,要输出最后一个,使用$#来输出最后一个参数:

echo "$$#"

结果$4,
非44。

使用eval:

eval echo "$$#"

结果为44

expr

求表达式变量的值,一般用于整数值,也可用于字符串。

字串长度

# expr length "this is a test" 
14 

数字求商数

# expr 14 % 9 
5

从位置处抓取字串

# expr substr "this is a test" 3 5 
is is 

数字串only the first character

# expr index "testforthegame" e 
2 

字串真实重现

# expr quote thisisatestformela 
thisisatestformela

selinux

查看SELinux状态:

1、sestatus -v       #如果SELinux status参数为enabled即为开启状态

2、getenforce                 ##也可以用这个命令检查

关闭SELinux:

1、临时关闭(不用重启机器):
setenforce 0                  ##设置SELinux 成为permissive模式
                              ##setenforce 1 设置SELinux 成为enforcing模式

2、修改配置文件需要重启机器:
修改/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled

重启

watch

命令格式:

watch[参数][命令]

命令功能:

将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令

命令参数:

-n或--interval   缺省每2秒运行一下程序,可用-n或-interval来指定间隔的时间
-d或--differences 	高亮显示变化的区域 
-d=cumulative  把变动过的地方(不管最近的那次有没有变动)都高亮显示出来
-t 或-no-title  会关闭watch命令在顶部的时间间隔,命令,当前时间的输出
-h, --help 查看帮助文档

使用实例:

实例1:每隔一秒高亮显示网络链接数的变化情况

watch -n 1 -d netstat -ant

其它操作:
切换终端: Ctrl+x
退出watch:Ctrl+g

实例2:每隔一秒高亮显示http链接数的变化情况

watch -n 1 -d 'pstree|grep http'

每隔一秒高亮显示http链接数的变化情况。 后面接的命令若带有管道符,需要加''将命令区域归整。

实例3:实时查看模拟攻击客户机建立起来的连接数

watch 'netstat -an | grep:21 |  grep<模拟攻击客户机的IP>| wc -l' 

实例4:监测当前目录中 scf' 的文件的变化

watch -d 'ls -l|grep scf' 

实例5:10秒一次输出系统的平均负载

watch -n 10 'cat /proc/loadavg'

crontab

crontab [-u username] [-l|-e|-r]

选项:

-u  :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
-e  :编辑 crontab 的工作内容
-l  :查阅 crontab 的工作内容
-r  :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑

cron文件语法

crontab -e命令编辑/var/spool/cron对应用户cron文件,也可修改/etc/crontab文件。

具体格式如下:

Minute Hour Day Month Week command 
分钟 小时 天 月 星期 命令 
0-59 0-23 1-31 1-12 0-6 command

每个字段代表的含义如下:

Minute 每个小时的第几分钟执行该任务 
Hour 每天的第几个小时执行该任务 
Day 每月的第几天执行该任务 
Month 每年的第几个月执行该任务 
DayOfWeek 每周的第几天执行该任务,0表示周日
Command 指定要执行的程序 、脚本或命令

Command必须,其它可选。不指定字段,用*填补。

几个特殊符号的含义

*代表取值范围内的数字, 
/代表”每”, 
-代表从某个数字到某个数字, 
,分开几个离散的数字

关于cron配置文件/etc/crontab

SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=root 
HOME=/

# run-parts 
01 * * * * root run-parts /etc/cron.hourly 
02 4 * * * root run-parts /etc/cron.daily 
22 4 * * 0 root run-parts /etc/cron.weekly 
42 4 1 * * root run-parts /etc/cron.monthly 

前四行配置 cron 任务运行环境变量:

SHELL--指定shell 环境(默认bash shell)
PATH --执行命令的程序路径
MAILTO--cron任务的输出邮件给变量定义的用户名,空串(MAILTO="")不寄;
HOME --执行命令或脚本的主目录

若cron 任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执行,它可被添加到/etc/cron.d目录。
该目录中的所有文件使用和 /etc/crontab 中一样的语法。

编辑完cron设置,在/var/spool/cron生成一与用户同名文件,不可直接编辑,只可用crontab -e 编辑。

cron启动后每一分钟读该文件,检查是否要执行里面的命令。

常见cron示例参考

5  * * * * ls 指定每小时的第5分钟执行一次ls命令

30 5 * * * ls 指定每天的 5:30 执行ls命令 

30 7 8 * * ls 指定每月8号的7:30分执行ls命令

30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令 

30 6 * * 0 ls 指定每星期日6:30执行ls命令
[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。] 

30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段] 

25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段] 

*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ] 

30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月1、11、21、31日是的6:30执行一次ls命令 ]

每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件

50 7 * *  * root run-parts  /etc/cron.daily [ 注:run-parts参数表示,执行后面目录中的所有可执行文件

第10、20、30分钟输出到/tmp/cron1.txt:

10,20,30 * * * * echo "第10、20、30分钟输出一次" >> /tmp/cron1.txt

以用户lzw.me的身份每两小时就运行某个程序:

0 */2 * * * lzw.me /usr/bin/somecommand >> /dev/null 2>&1

特别提示

A、cron配置文件路径
#vi /etc/crontab

B、重启cron的方法
#/etc/rc.d/init.d/crond restart

Usage: /etc/rc.d/init.d/crond {start|stop|status|reload|restart|condrestart}

C、将脚本改成可执行
chmod +x filename

SSH

SSH为Secure Shell的缩写,为创建在应用层和传输层基础上的安全协议。

基本功能:

连接到远程主机:

ssh name@remoteserver
或
ssh remoteserver -l name

说明:server代表远程主机,name为登录远程主机用户名。

连接到远程主机指定的端口:

ssh name@remoteserver -p 2222
或
ssh remoteserver -l name –p 2222

说明:
p 参数指定端口号
通常在路由里做端口映射时,我们不会把22端口直接映射出去,而是转换成其他端口号,这时就需要使用-p 端口号命令格式。

通过远程主机1跳到远程主机2:

ssh -t remoteserver1 ssh remoteserver2

说明:
当remoteserver2无法直达,可使用-t参数,然后由remoteserver1跳转到remoteserver2。

通过SSH运行远程shell命令:

ssh -l name remoteserver ‘command’

说明:
连接到远程主机,并执行远程主机的command命令。

例如:查看远程主机的内存使用情况。

修改SSH监听端口

默认SSH监听端口22,攻击者使用端口扫描软件就可以看到主机是否运行有SSH服务.

将SSH端口修改为大于1024的端口是一个明智的选择.

因大多数端口扫描软件(包括nmap)默认情况都不扫描高位端口。打开/etc/ssh/sshd_config文件并查找下面这样的行:

Port  22

去掉该行前面的# 号,然后修改端口号并重新启动SSH服务:

$ /etc/init.d/ssh restart

仅允许SSH协议版本2

两个SSH协议版本,仅使用SSH协议版本2会更安全,SSH协议版本1有安全问题,包括中间人攻击(man-in-the-middle)和注入(insertion)攻击。

编辑/etc/ssh/sshd_config文件并查找下面这样的行:

# Protocol 2,1

修改为:
Protocol 2

禁止root用户登录:

通常情况下,不采用直接用root用户登录到远程主机,由于root用户拥有超级权限,这样会带来安全隐患,所以,一般我们用普通用户登录,当需要管理远程主机时,再切换到root用户下。

打开/etc/ssh/sshd_config文件并查找下面这样的行:

#PermitRootLogin yes

将#号去掉,然后将yes修改成no,重启ssh服务,这样就可以禁止root用户登录。

设置登录时提示信息

首先编辑一个文件,如bannertest.txt,文件内容自行定义。然后打开/etc/ssh/sshd_config文件并查找下面这样的行:

#Banner /some/path

将#号去掉,然后将bannertest.txt文件的全路径替换/some/path,然后保存,重启ssh服务。当客户端登录时,就会看到bannertest.txt文件中的提示信息。

scp命令

在两台服务器之间传送文件。传输过程中仍使用ssh加密。

将远程主机的/tmp/test 文件复制到本地的/bak文件夹下

scp -p root@192.168.1.120:/tmp/test /bak

将本地/bak/1234 文件复制到远程主机的/tmp路径下

scp -p /bak/1234 root@192.168.1.120:/tmp

FTP

1. 连接ftp服务器

ftp [hostname| ip-address]

a)在Linux命令行下输入:
ftp 192.168.1.1

b)服务器询问你用户名和密码,分别输入用户名和相应密码,待认证通过即可。

2. 下载文件

get和mget。

get

将文件从远端主机中传送至本地主机中:

get [remote-file] [local-file]

如要获取远程服务器上/usr/your/1.htm,则

ftp> get /usr/your/1.htm 1.htm (回车)

mget

远端主机接收一批文件至本地主机:

mget [remote-files]

如要获取服务器上/usr/your/下的所有文件,则

ftp> cd /usr/your/
ftp> mget *.* (回车)

此时每下载一个文件,都会有提示。如果要除掉提示,则在mget . 命令前先执行:prompt off

注意:文件都下载到了linux主机的当前目录下。比如,在 /usr/my下运行的ftp命令,则文件都下载到了/usr/my下。

3.上传文件

put

将本地一个文件传送至远端主机中

put local-file [remote-file]

如要把本地的1.htm传送到远端主机/usr/your,并改名为2.htm

ftp> put 1.htm /usr/your/2.htm (回车)

mput

将本地主机中一批文件传送至远端主机。

mput local-files

如要把本地当前目录下所有html文件上传到服务器/usr/your/ 下

ftp> cd /usr/your (回车)
ftp> mput *.htm (回车)

注意:上传文件都来自于主机的当前目录下。比如,在 /usr/my下运行的ftp命令,则只有在/usr/my下的文件linux才会上传到服务器/usr/your 下。

4. 断开连接

bye:中断与服务器的连接。

ftp> bye (回车)

模式空间

sed之所以能以行为单位的编辑或修改,原因在于它使用了两个空间:

活动的“模式空间(pattern space)”
起辅助作用的“暂存缓冲区(holdingspace)

Linux服务器优化

原文地址:https://www.cnblogs.com/pennli/p/8795109.html