Linux shell命令 文件 用户 网络 设备 服务
Shell命令
shell命令第一行#!/bin/bash 是一个bash报,是告诉系统用哪个shell语言来运行以下代码.
在Linux环境写不写不会有问题,但是其他平台可能会出错.
全局环境变量文件在/etc/profile 各用户的环境变量在~/.bash_profile路径中
看当前linux支持哪些版本的shell命令 进入到/etc/shells查看
需要使用哪种就直接敲bash或者sh 等等来回切换
echo命令 用来输出,也可以输出到文件
- echo常用的参数
-e: 支持反斜线控制字符转换 例: echo -e "\a"
-n: 取消输出后行末的换行符号 - echo 还可以输出颜色,格式是
echo -e "\e[1;31m xxx \e[0m"
\e[1;是开启颜色输出 31m是颜色代码 xxx是内容 \e[0m是终止颜色输出.
- echo输出的时候如果有感叹号 后面必须加空格.不然会报错,编辑在文本中也是一样.
shell命令执行
有2种方法.
- 第一种直接先赋予脚本执行权限,然后用绝对或者相对路径进行运行
- 第二种用bash 加相对或者绝对路径,这样方式不需要赋予脚本执行权限(渗透考虑)
bash的基本功能
-
history命令
history有2个参数 -c 清除历史命令,另一个-w 把缓存的历史命令强制写入历史保护命令.
历史保护命令的路径是当前用户根目录下的\.bash_history
,正常情况需要logout后才会把当前用户的缓存命令写入这个文件.
而通过-w命令可以不退出就写入到.bash_history.
默认记录1千条,在/etc/profile里的HISTSIZE这个参数设置.
渗透测试可以查看历史命令,看是否有当初配置的数据库或者其他应用配置设置的端口密码.
-
Bash的快捷键
-
Bash的输入输出重定向.
重定向定义就是本来一个正确或者错误结果输出到屏幕,我们改变他输出的方向,比如不输出到屏幕,把正确或者错误结果输出到文件.
要注意 正确的重定向 >和命令文件中间隔着空格,而错误的重定向不能有空格
输入重定向就是把>改成<,但是一般除了打补丁,用的不多. -
Bash多命令执行
多条命令执行示例
&&命令示例
-
Bash的其他特殊符号
bash是可以创建子shell的,shell命令本身就是在bash中运行的,我们输入bash可以在创建一个子shell.我们可以用pstree看出这个进程构造.
()中的命令会在子shell中运行.子shell和父shell是相互隔离的空间.子shell执行完后,变量就会自行清除.不影响父shell的变量
tar 压缩和解压缩
-c 打包 -x解包 -z调用gzip去压缩文件,节约磁盘空间 -v显示打包过程 -f指定一个文件名 -f必须是在最后
语法tar -cfv 打包的文件名字 你要打包的内容
tar(选项)(参数)
-A或--catenate:新增文件到以存在的备份文件;
-B:设置区块大小;
-c或--create:建立新的备份文件;
-C <目录>:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。
-d:记录文件的差别;
-x或--extract或--get:从备份文件中还原文件;
-t或--list:列出备份文件的内容;
-z或--gzip或--ungzip:通过gzip指令处理备份文件;
-Z或--compress或--uncompress:通过compress指令处理备份文件;
-f<备份文件>或--file=<备份文件>:指定备份文件;
-v或--verbose:显示指令执行过程;
-r:添加文件到已经压缩的文件;
-u:添加改变了和现有的文件到已经存在的压缩文件;
-j:支持bzip2解压文件;
-v:显示操作过程;
-l:文件系统边界设置;
-k:保留原有文件不覆盖;
-m:保留文件不被覆盖;
-w:确认压缩文件的正确性;
-p或--same-permissions:用原来的文件权限还原文件;
-P或--absolute-names:文件名使用绝对名称,不移除文件名称前的“/”号;
-N <日期格式> 或 --newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里;
--exclude=<范本样式>:排除符合范本样式的文件。
tar -zxvf Python-3.7.0b3.tgz #解压
tar -czvf oldboy.txt.tar.gz oldboy.txt #压缩oldboy.txt
上述命令等于 以下两条命令,==因此默认把用了-z的压缩包后缀命名.tar.gz==
==这样便于识别,解压的时候也要先用-zx先进行gzip解压再对tar包解压==
tar -cvf oldboy.tar oldboy.txt
gzip oldboy.tar
tar -cf all_pic.tar *.jpg #压缩当前目录所有jpg结尾的文件
tar -xjf xx.tar.bz2 #解压缩bz2结尾的文件
别名 alias
永久生效写在 .bashrc的文件中
alias[别名]=[指令名称] 取消别名用unalias ,单独一个alias是查看别名
配置文件不重启就生效 用source命令 source + 配置文件名路径,source可以用.代替
比如. .bashrc
别名的优先级会比命令高,所以尽量不要把别名和命令冲突.否则会影响正常的命令执行.
grep
mkdir
-p 参数可以递归创建 ,比如当前路径要创建 a1,b1文件夹,同时a1和b1同时又有c1和d1文件夹
mkdir -p ./{a1,b1}/{c1,d1}
linux的特殊符号含义
~ 用户的家目录
- 上一次的工作目录
. 当前目录
.. 上一级目录
./ 当前目录
> 重定向覆盖输出符号echo "> 就想python的w模式" > test.txt
>> 重定向追加输出符号echo ">> 就想python的a模式" > test.txt
< 重定向覆盖写入符号cat < eof > 1.txt
<< 重定向追加写入符号<<一般和EOF一起搭配使用 EOF是END Of File的缩写,表示自定义终止符.既然自定义,那么EOF就不是固定的,可以随意设置别名
[root@django_env2 ~]# cat<<eof>1.txt
> cat11
> cat222
> cat333
> eof
[root@django_env2 ~]# cat 1.txt
cat11
cat222
cat333
PS1变量 用来修改命令提示符的
默认的PS1是[\u@\h \W]\$
用echo $PS1
ps ,-aux和-ef展示内容差不多
ps 命令常用参数
-a 显示所有进程
-u 用户以及其他详细信息
-x 显示没有控制终端的进程
--forest 参数用来展示进程之间的父子关系
kill pkill killall命令
kill 一个个傻进程
pkill 支持正则匹配的进程名,对符合条件的全部杀掉
killall 复杂软件的服务程序会有多个进程协同为用户提供服务,如果逐个去结束这 些进程会比较麻烦,此时可以使用 killall 命令来批量结束某个服务程序带有的全部进程。例如nginx启动后有2个进程 killall nginx
第二个和第三个容易误杀其他进程,慎用!
cat more less
- cat用来读取小文本,是一次性读取
常用的有 -n 显示行号,
也可以和<<eof搭配使用,追加输入,eof只是个变量名,可以随意更换,比如换成bb
- more more以百分比形式告知已展示了多少内容,用回车查看剩余内容
- less less与more命令类似,但可以通过翻页键查看上下页的内容
cp
用法:cp [选项]... [-T] 源文件 目标文件
或:cp [选项]... 源文件... 目录
或:cp [选项]... 复制内容 复制之后的文件名...
常用参数 -r或者-R 递归复制目录和子目录的内容
mv
改文件名或者移动
grep
过滤passwd的root,有2种写法
一种是打开文件,把内容放|过滤 cat /etc/passwd |grep root
另一种是直接用grep 关键字 去过滤某个文件grep root /etc/passwd
常用的 -i(忽略大小写) -v(取反)
grep -v "^#" setting.py|grep "^$" -v
第一个grep -v "^#"
是把过滤配置文件#开头的结果取反 得到的是代码块和空行
第二个 grep "^$" -v
是过滤空行并取反,^$就是代表所有空行,得到所有的代码块
grep -v "^#" redis.conf |grep -v "^$" > myredis.conf
scp
语法格式 scp 1.txt root@192.168.1.3:/tmp
把文件scp到对方的/tmp路径下
scp 1.txt root@192.168.1.3:/tmp/1.txt /opt/
这个是把对方的1.txt下载到本地的/opt/路径下
du 用于显示目录或者文件的大小 du会显示指定目录或者文件占用的磁盘空间
常用的 -h(显示kb mb gb单位) -s(显示总和) -c 每个文件各自的文件大小
du -sh /etc
就是计算etc的文件大小
也可以用ll -lh展示每个文件的大小
df 和du类似只不过显示磁盘分区上的可用磁盘空间
-h 也是常用的
top 可以显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等
chattr lsattr
chattr 可以设置a(只能写入) c(压缩权限) d(无法进行备份) i(不能修改,不能删除,也不能重命名)属性
要设置属性可以chattr +ai
lsattr用来查看文件属性
date查看linux时间 ntpdate 使用网络计时协议(NTP)设置日期和时间
date查看当前主机时间
ntp 全称是 Network Time Protocol 网络时间协议
ntpdate -u ntp.aliyun.com 和阿里网络同步时间
date -s date_string 设置时间,默认的时间格式为月日时分年
[root@django_env2 ~]# date 0508112600
2000年 05月 08日 星期一 11:26:00 CST
cal查看日历
wget 在线下载网络文件
-r -p递归下载
linux和windows互传文件的软件 lrzsz
需要安装 yum install lrzsz -y
rz 接受文件(从windows接受文件,也可以直接拖拽)
sz 发送文件 语法 sz 1.txt 就会跳出windows的路径选择框了
su和sudo
su是(switch user)切换用户的缩写。通过su命令,可以从普通用户切换到root用户,也可以从root用户切换到普通用户。从普通用户切换到root用户需要密码(该密码是普通用户的密码),从root用户切换到普通用户不需要密码。
语法 su [user_name]
,其中su username 和su - username有如下区别
su 只能切换到管理员用户权限,不使用管理员的登陆脚本和搜索路径
su - 不但能切换到管理员权限而且使用管理员登陆脚本和搜索路径
使用su - 环境变量也跟着来啦~
sudo 临时提权
前提要你的账号在sudoers file要先配置上,配置文件在/etc/sudoers
下面这个nihaoa就是添加的允许sudo的账号
用户权限
linux权限主要根据三种身份决定
- user/owner 文件使用者,文件属于哪个用户
- group 属组,文件属于哪个组
- others 既不是user也不是group 就是other,其他人
other概念是这样的,某个文件是有a用户创建,属于A组,同时A组还有用户b.
那么此时用户c登陆后,这个c既不是a用户,也不属于A组,那么这个c对于这个文件就属于other
id 用来查看用户id id root
系统超级用户uid 默认是0
系统常用的服务的用户 权限都是1-999之间 比如系统创建的mysql服务
root创建的普通用户,默认id从1000开始
用户的增删改查
增:useradd newaccount
删:userdel -r -f 是强制删除用户以及用户家目录下的所有文件
改:su , logout(ctrl+d)
查:whoami
文件权限
linux文件的分类
- 普通文件
d 文件夹
b 设备文件(块设备)存储设备硬盘,U盘 /dev/sad
c 设备文件(字符设备) 打印机
l 软链接文件
s 套接字文件
p 管道文件
文件权限
r,w,x 不多解释,权限的增删改用chmod
chmod还可以用数字来更改权限
r为4 w为2 x为1
更改文件属主 chown
更改文件属组 chgrp
vim 进行文本编辑
常用功能
:set nu 设置行号
移动光标
w(e) 移动光标到下一个单词
b 移动到光标上一个单词
数字0 移动到本行开头
$ 移动光标到本行结尾
H 移动光标到屏幕首行
M 移动到光标到屏幕的中间一行
L 移动光标到屏幕的尾行
gg 移动光标到文档的首行
G 移动光标到文档尾行
gg=G 文本代码格式化
ctrl + f 下一页
ctrl + b 上一页
`. 移动光标到上一次的修改行
移动多行光标的方法
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
向下移动5行 5j
向右移动10字符 10l
n(space) 按下数字n,例如10,然后按下空格,光标会向右移动10个字符
查找
/chaoge 在整篇文档中搜索chaoge字符串,向下查找
?chaoge 在整篇文档中搜索chaoge字符串,向上查找
* 查找整个文档,匹配光标所在的所有单词,按下n查找下一处,N上一处
# 查找整个文档,匹配光标所在的所有单词,按下n查找下一处,N上一处
gd 找到光标所在单词匹配的单词,并停留在非注释的第一个匹配上
shift+% 找到括号的另一半!!
复制,删除,粘贴
yy 拷贝光标所在行
dd 删除光标所在行
D 删除当前光标到行尾的内容
dG 删除当前行到文档尾部的内容
p 粘贴yy所复制的内容
x 删除光标所在的字符
u 撤销上一步的操作
ggyG 全选复制
ggVG 全选高亮显示
数字与命令
3yy 拷贝光标所在的3行
5dd 删除光标所在5行
底线命令模式
:q! 强制退出
:wq! 强制写入退出
:set nu 显示行号
:set nonu 取消行号
:数字 调到数字那行
:4,7 s/old_str/replace_str/g vim文本中4-7行把old_str替换replace_str,4,$ 这里$表示最后一行 g代表全局匹配,不会只匹配一处
随时按下esc可以退出底线命令模式
Linux中文显示设置(防止中文乱码)
#查看系统当前字符集echo $LANGlocale#检查xshell crt的字符集#命令修改字符集
# vim /etc/profile.d/locale.sh
export LC_CTYPE=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
# vim /etc/locale.conf
LANG=zh_CN.UTF-8
# vim /etc/sysconfig/i18n
LANG=zh_CN.UTF-8
# vim /etc/environment
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
英文版本
# vim /etc/profile.d/locale.sh
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
# vim /etc/locale.conf
LANG=en_US.UTF-8
# vim /etc/sysconfig/i18n
LANG=en_US.UTF-8
# vim /etc/environment
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
2.更改后查看系统语言变量
locale
乱码核心解决办法
1.系统字符集utf8
2.xshell字符集utf8
3.文件字符集一致zh_CN.UTF-8
linux 查看系统版本
只针对centos版本的cat /etc/redhat-release
所有linux通用 cat /etc/os-release
查看内核 uname -r
查看主机名 hostname
查看主机ip hostname -I
网络相关查询
netstat
netstat [选项]
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-l或--listening:显示监控中的服务器的Socket;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-a或--all:显示所有连线中的Socket;
DNS
119.29.29.29 腾讯的DNS
223.5.5.5 阿里的DNS
223.6.6.6 阿里的DNS
8.8.8.8 谷歌的DNS
114.114.114.114 114公司的DNS
linux的DNS配置文件路径 /etc/resolv.conf
DNS解析流程
nslookup 用于查找域名服务器的程序,
nslookup有两种模式:交互和非交互
非交互就是 nslookup baidu.com
交互就是输入nslookup
然后再输入url
设备信息相关
设备信息都在/proc/下
比如cpu信息就是/proc/cpuinfo,内存信息就是/proc/meminfo
其他命令也可以看,比如top命令后按1显示cpu信息和核数,free是内存信息
更改主机名 hostnamectl set-hostname Name
服务相关
防火墙服务 firewalld.service
关闭服务 systemctl stop 服务名
禁止服务开机自启 systemctl disbale 服务名
防火墙规则清空 iptables -F
分析若干种现有流行的攻击方法,如何有针对性地设计 Iptables 的高级过滤规则?
SYN攻击
限制syn的请求速度:需要调节一个合理的速度值,不然会影响正常用户的请求
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
限制单个ip的最大syn连接数
iptables –A INPUT –i eth0 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP
DOS攻击:利用recent模块抵御DOS攻击
单个IP最多连接3个会话
iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP
新的连接请求加入到SSH列表
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
5分钟内你的尝试次数达到3次,就拒绝提供SSH列表中的这个IP服务。被限制5分钟后即可恢复访问
Iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
单个IP过度访问
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP
木马反弹
iptables –A OUTPUT –m state --state NEW –j DROP
ping攻击
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT