进入dir目录
cd dir
返回上一级
cd ..
返回上两级
cd ../..
返回根目录
cd /
切换磁盘,例如切换到F盘,不缺分大小写
f:
查看当前目录下的文件和目录
dir
创建名为dir的目录
md dir
只能删除名为dir的空目录
rd dir
删除dir文件,或者删除dir中一级目录下的文件(不包含目录和隐藏文件)
del dir
复制dir文件到另一个dir2文件
copy dir dir2
移动dir文件到另一个dir2文件
move dir dir2
清空cmd窗口内容
cls
打开一个新cmd窗口
start cmd
关闭cmd窗口
exit
查看ip相关的参数
ipconfig
检测IP地址的连通性,丢包率等
ping ip
定时关机,单位秒,例如定时一小时关闭电脑
shutdown -s -t 3600
取消定时关机
shutdown -a
查看电脑最大运行内存,单位:KB
不过这个命令存在很大疑惑,可能只是理论最大的单槽内存,具体还是建议去电脑官网查看。
wmic memphysical get maxcapacity
把*.ts缓存文件合并成一个.ts文件
copy/b ts文件地址\*.ts 复制地址\newfile.ts
ts转mp4格式
ffnpeg -i 文件路径\newfile.ts -acodec copy -vcodec copy -f mp4 生成路径\newfile.mp4
创建指定大小的文件,例如:在当前目录下创建一个名字为test.txt的10GB大小的文件,单位是B
fsutil file createnew test.txt 10737418240
1、安装基础依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
如果是政务外网使用yum需要提前修改代理,在etc/yum.conf中的添加
proxy=http://172.20.21.66:80
2、访问Nginx官网(http://nginx.org/download/)查找需要安装的版本
3、执行命令进行下载安装,版本号请替换成自己需要版本
//根目录创建一个目录,并进入此目录 mkdir installdata cd installdata //下载tar包,如果网络不通也可以自行下载上传到服务器 wget http://nginx.org/download/nginx-1.22.0.tar.gz //解压tar包 tar -xvf nginx-1.22.0.tar.gz //进入解压完成的目录 cd nginx-1.22.0 //执行命令 考虑到后续安装ssl证书 添加两个模块 ./configure --with-http_stub_status_module --with-http_ssl_module //执行make命令 make //执行make install命令 make install
4、启动Nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
5、配置Nginx
vi /usr/local/nginx/conf/nginx.conf
6、重启Nginx
/usr/local/nginx/sbin/nginx -s reload
7、查看nginx进程是否启动
ps -ef | grep nginx
因为linux安装软件的方式比较多,所以没有一个通用的办法能查到某些软件是否安装了。总结起来就是这样几类:
1、rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm -qa | grep “软件或者包的名字”。
rpm -qa | grep PHP
2、以deb包安装的,可以用dpkg -l能看到。如果是查找指定软件包,用dpkg -l | grep “软件或者包的名字”;
dpkg-l|grep PHP
3、yum方法安装的,可以用yum list installed查找,如果是查找指定包,命令后加 | grep “软件名或者包名”;
yum list installed | grep PHP
4、如果是以源码包自己编译安装的,例如.tar.gz或者tar.bz2形式的,这个只能看可执行文件是否存在了,
上面两种方法都看不到这种源码形式安装的包。如果是以root用户安装的,可执行程序通常都在/sbin:/usr/bin目录下。
1、打开控制面板,点击卸载程序,点击左边的【启用或关闭windows服务】
2、勾选【Telnet客户端】后点击【确定】,即可安装成功!
1、首先查看当前php命令运行的是哪个版本
ls /usr/bin/php -al
2、查看当前php运行目录
find / -name php
3、删除当前运行的目录
rm -rf /usr/bin/php
4.用ln -s 命令重新建立连接
ln -s /www/server/php/70/bin/php /usr/bin/php
因为有时候公司服务器的端口不会全部开放,所以安装好后的宝塔可能无法用默认的8888端口访问,所以查询了一下解决办法。
修改面板端口,如要改成38888(centos 6 系统)
echo '38888' > /www/server/panel/data/port.pl && /etc/init.d/bt restart iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 38888 -j ACCEPT service iptables save
修改面板端口,如要改成38888(centos 7 系统)
echo '38888' > /www/server/panel/data/port.pl && /etc/init.d/bt restart firewall-cmd --permanent --zone=public --add-port=38888/tcp firewall-cmd --reload
亲测有效!
现在我有一台服务器,这里叫服务器①,服务器①的80端口因为某些原因被封了,而原来指向这台服务器的域名全都失效了,只能通过服务器①的ip:端口号的方式进行访问,这样用户体验极差,所以找办法解决了一下,于是有了下面的方案。
需要两台服务器(服务器①和服务器②,服务器①是源码所在服务器),以及域名解析权限。
首先解析一个ip:端口号的访问地址,并确保能正常访问。
然后把想要恢复正常的网站解析到服务器②上,然后此服务器打开Nginx的配置,在配置的最后一行会有这么一句:
include /www/server/panel/vhost/nginx/*.conf;
我们去打开这个目录,因为他是用*进行加载的配置,所以这里建议每个网站建立一个conf文件,文件名随意,但建议和域名同步,防止混乱后期也便于维护,要配置的内容是:
upstream shx { server 服务器①的ip:端口号 weight=1; } server { listen 80; server_name 解析的域名地址; index index.html; location / { proxy_pass http://shx/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location ~ ^/(WEB-INF)/ { deny all; } }
配置好后就可以通过域名正常访问,看上去是域名进行访问,但实际上访问的是ip:端口号。
因为此目录下所有配置是一起加载的,所以每个upstream后面的名字都要不一样,下面proxy_pass中的也要相应替换。
这个方法还有其它作用,例如某阿域名要求必须绑定自己公司的服务器,如果你绑定其他公司的服务器,会导致网站无法正常访问,也可以用这种方法,先解析到某阿自己的服务器,再指向到自己的服务器。
S:Sever服务器
C:Client
B:Browser
具有分布性的特点(前后端分离),可以随时随地进行查询、浏览等业务处理。
业务扩展简单,通过增加网页即可增加服务器功能。
维护简单方便,只需要改变网页,即可实现所有用户的同步更新。
不需要安装客户端,可以直接运行在web浏览器中。
逻辑结构比C/S多一层,处理速度较慢。
交互能力较差,不能够在子程序间自由切换。
安全性较差,许多信息容易暴露在浏览器中。
应用服务器运行数据负荷较轻。
具有较强的事务处理能力,能实现复杂的业务流程。
由于客户端与服务器直接相连,中间没有环节,因此响应速度更快。
数据的储存管理功能较为透明,这是相当于前台用户来说的,他们无需过问(也无法干涉)背后的逻辑过程。
客户端需要安装专用的客户端软件。
对客户端的操作系统一般也会有限制。
兼容性差,对于不同的开发工具有较大的局限性。
开发成本相对较高。需要一定专业水准的技术人员才能完成。
简单来说就是,攻击者通过一些技术手段欺骗用户通过浏览器去访问一个,自己已经认证过(登陆过,留下过登录验证信息)的网站,进行一系列操作(例如:发邮件,发消息,甚至财产操作和转账),所以被访问的网站会认为是真正的用户操作而去运行。
简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求是用户自愿发出的。
假设:
假如把1000元钱转账给shx的链接为:
https://www.bank.com/withdraw?amount=1000&for=shx
那么,一个恶意攻击者top可以在另外一个网站上设置如下链接:
https://www.bank.com/withdraw?amount=1000&for=top
如果用户登陆过账号不久,登录信息尚未过期,并且被攻击者骗取打开此链接,那么shx就有可能会损失1000元钱。
①检查Referer字段:
HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。在处理敏感数据请求时,通过此字段获取发送请求的网址,并传递给服务器端,这时候服务器就能识别出是否为恶意访问。
这种办法简单易行,工作量低,仅需要在关键访问处增加一步校验。但这种办法也有其局限性,因其完全依赖浏览器发送正确的Referer字段。虽然http协议对此字段的内容有明确的规定,但并无法保证来访的浏览器的具体实现,亦无法保证浏览器没有安全漏洞影响到此字段。并且也存在攻击者攻击某些浏览器,篡改其Referer字段的可能。
②添加校验token:
由于CSRF的本质是利用存储在浏览器中的验证数据欺骗用户去访问攻击者设置的地址,只要用户提供的验证数据不存储在浏览器中,并且攻击者无法伪造验证数据作为效验,那么攻击者就无法运行CSRF攻击。
所以这种验证数据一般是由服务器生成,将其放在请求的返回值中,其内容是一个伪随机码,当客户端提交数据时,将这个伪随机码一并提交上去做校验。
当用户正常访问时,客户端能接受并返回这个随机码,而通过CSRF传来的欺骗性攻击中,攻击者无法事先得知或伪造这个伪随机码,服务器就会因为token的值为空或者错误,拒绝这个可疑请求。
③在 HTTP 头中自定义属性并验证:
这种方法本质也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。
然而这种方法的局限性非常大。XMLHttpRequest 请求通常用于 Ajax 方法中对于页面局部的异步刷新,并非所有的请求都适合用这个类来发起,而且通过该类请求得到的页面不能被浏览器所记录下,从而进行前进,后退,刷新,收藏等操作,给用户带来不便。另外,对于没有进行 CSRF 防护的遗留系统来说,要采用这种方法来进行防护,要把所有请求都改为 XMLHttpRequest 请求,这样几乎是要重写整个网站,这代价无疑是不能接受的。
XSS攻击通常是指利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,当HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。
①由于XSS攻击在用户当前使用的应用程序中执行,用户将会看到与其有关的个性化信息,如账户信息或“欢迎回来”消息,克隆的Web站点不会显示个性化信息。
②通常,在钓鱼攻击中使用的克隆Web站点一经发现,就会立即被关闭。
③许多浏览器与安全防护软件产品都内置钓鱼攻击过滤器,可阻止用户访问恶意的克隆站点。
④如果客户访问一个克隆的Web网银站点,银行一般不承担责任。但是,如果攻击者通过银行应用程序中的XSS漏洞攻击了银行客户,则银行将不能简单地推卸责任。
①持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。
②非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。
③DOM跨站(DOM XSS):DOM(document object model文档对象模型),客户端脚本处理逻辑导致的安全问题。
基于DOM的XSS漏洞是指受害者端的网页脚本在修改本地页面DOM环境时未进行合理的处置,而使得攻击脚本被执行。在整个攻击过程中,服务器响应的页面并没有发生变化,引起客户端脚本执行结果差异的原因是对本地DOM的恶意篡改利用。
①盗用cookie,获取敏感信息。
②利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
③利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
④利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
⑤在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。
①不信任用户提交的任何内容,对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、REFER、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。尽量采用POST而非GET提交表单;对“<”,“>”,“;”,“””等字符做过滤;任何内容输出到页面之前都必须加以en-code,避免不小心把htmltag显示出来。
②实现Session 标记(session tokens)、CAPTCHA(验证码)系统或者HTTP引用头检查,以防功能被第三方网站所执行,对于用户提交信息的中的img等link,检查是否有重定向回本站、不是真的图片等可疑操作。
③cookie 防盗。避免直接在cookie中泄露用户隐私,例如email、密码,等等;通过使cookie和系统IP绑定来降低cookie泄露后的危险。这样攻击者得到的cookie没有实际价值,很难拿来直接进行重放攻击。
④确认接收的内容被妥善地规范化,仅包含最小的、安全的Tag(没有JavaScript),去掉任何对远程内容的引用(尤其是样式表和JavaScript),使用HTTPonly的cookie。
进入dir目录
cd dir
返回上一级
cd ..
返回上两级
cd ../..
返回根目录
cd /
返回最近一次访问目录
cd -
查看当前访问路径
pwd
将test目录或文件压缩成一个名为newzip的压缩文件,可在名称前加上路径
zip newzip.zip test
查看当前目录内容
ls
查看目录中的隐藏文件
ls -a
创建名为dir的目录
mkdir dir
删除名为dir的目录或文件
rm -rf dir
移动dir目录到指定url路径
mv dir url
复制dir目录下所有内容到dir2目录中,其中dir和dir2都可以是目录所在路径。
备注:如果复制目录则必须需要加-r参数,才能将目录中的所有内容都复制过去,复制文件则不需要加-r参数。
cp -r dir dir2
查看当前目录下所有目录或者文件的大小(但不包括目录下的大小)和权限信息。
单位:B,以下两种相同
ls -ll
ls -l
单位:KB
ls -lh
查看当前所在目录权限以及大小(但不包括目录下的大小),加h单位是KB,不加则为B。
ls -ld
查看当前所有目录和文件的总大小(包括目录下面内容的大小),单位自动,视情况使用KB、MB、GB等。
du -sh
查看名为dir的目录或文件大小(包括目录下面内容的大小),单位自动,视情况使用KB、MB、GB等。
du -sh dir
查看当前目录下所有一级目录或文件各自的大小
--max-depth指定最大深度,0就是只计算查看当前目录下的内容。
如果想查询到当前目录的二级子目录,则可以将0改为1,三级子目录则改为2,以此类推……
du -h --max-depth=0 *
如果是1,则会把这几个目录下的二级子目录和文件都计算展示出来。
查看file文件内容,正向查看文件。
cat file
查看file文件内容,反向查看文件。
tac file
打开一个file文件
vim file
打开文件后编辑文件
I
使用I进入编辑模式后退出编辑
ESC
按ESC退出编辑后使用,保存并退出编辑窗口
:wq
按ESC退出编辑后使用,保存但不退出编辑窗口
:w
按ESC退出编辑后使用,强制性保存但不退出编辑窗口
:w!
按ESC退出编辑后使用,将修改保存到另外的file中,当file文件不存在时自动创建
:w file
按ESC退出编辑后使用,强制性保存并退出编辑窗口
:wq!
按ESC退出编辑后使用,不保存退出并退出编辑窗口
:q
按ESC退出编辑后使用,不保存强制退出并退出编辑窗口
:q!
按ESC退出编辑后使用,放弃所有修改,从上次保存的开始编辑:
:e!
查看当前目录下的权限信息
备注:
文件最前方有十个字符。
第一个代表文件类型,-代表是普通文件,d代表是目录。
后面九个代表权限一共分成3组,每3个一组,分别是所有者、所属组、其他人。
ls -l
给dir目录或文件设置777权限。
权限数字表示:
r=4,w=2,x=1。
例如:
rwxrw-r--:三个一组,rwx权限分别对应421,相加得7,rw-对应42相加,r--对应4。
chmod 777 dir
给dir目录以及他下面文件和目录设置777权限,R必须大写。
chmod -R 777 dir
给dir目录或文件的所有者单独加一个读的权限
u:所有者, g:所属组,o:其他人,a:所有。
+:添加权限,-减少权限,=直接赋值成这个权限。
chmod u+r dir
查看80端口占用情况
lsof -i tcp:80
netstat 命令用于显示网络状态
#查看TCP和Socket的网络信息,并显示正在使用Socket的程序识别码(pid)和程序名称 netstat --tcp --listening --program #等同于:netstat -t -l -p
kill 命令用于杀死指定pid的进程(假设Websocket进程的pid为123456)
kill 123456 #杀死进程 kill -KILL 123456 #强制杀死进程 kill -9 123456 #彻底杀死进程(是操作系统从内核级别强制杀死一个进程) kill -15 123456 可以理解为操作系统发送一个通知告诉应用主动关闭.
拼合命令:杀死指定(9502)端口进程
kill -15 `netstat -nlp | grep :9502 | awk '{print $7}' | grep -o '[0-9]*'`
持久化启动python3的Django项目
nohup python3 manage.py runserver 0.0.0.0:80 >>log_app.out>&1 &
持久化启动某个程序,log_app.out 为日志文件,&1是保存标准输出内容的意思,最后&后台运行的意思
nohup 启动命令 >>log_app.out>&1 &
根据 文件或目录名称 搜索
find 【搜索目录】【-name或者-iname】【搜索字符】:-name和-iname的区别一个区分大小写,一个不区分大小写
eg:在/etc 目录下搜索名字为init的文件或目录
find /etc -name init (精准搜索,名字必须为 init 才能搜索的到) find /etc -iname init (精准搜索,名字必须为 init或者有字母大写也能搜索的到) find /etc -name *init (模糊搜索,以 init 结尾的文件或目录名) find /etc -name init??? (模糊搜索,? 表示单个字符,即搜索到 init___)