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权限主要根据三种身份决定

  1. user/owner 文件使用者,文件属于哪个用户
  2. group 属组,文件属于哪个组
  3. 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 



posted @ 2021-07-09 15:44  零哭谷  阅读(458)  评论(0编辑  收藏  举报