e攻城狮

  • 首页

  • 随笔

  • 分类

  • 瞎折腾

  • 搜索

Linux下批量杀掉筛选进程

发表于 2018-11-30 分类于 服务器运维

由于情况要求,需要只杀掉某一类含有特定参数命令的进程。

具体命令参考:

1
ps -ef | grep test | grep -v grep | awk '{print $2}' | xargs kill -9

其中:

| 管道符,用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。

ps 命令用来列出系统中当前运行的进程, ps -ef显示所有进程信息,联通命令行。

grep 命令用于过滤/搜索特定字符,grep test在这里为搜索过滤所有含有‘test’名称的进程

grep -v grep 显示不包含匹配文本的所有行,在这里为筛选出所有不包含grep名称的进程,对上一步的进程再做一次筛选(因为ps -ef列出了所有的命令,包括命令行)

awk 在文件或字符串中基于指定规则浏览和抽取信息;把文件逐行读入,以空格为默认分隔符将每行切片,然后再进行后序处理。这里利用awk ‘{print $2}’将上一步中过滤得到的进程进行打印,$2表示打印第二个域(PID,进程号) $0表示所有域,$1表示第一个域,$n表示第n个域。

xargs 命令是给命令传递参数的过滤器,善于把标准数据数据转换成命令行参数。在这里则是将获取前一个命令的标准输出然后转换成命令行参数传递给后面的kill命令。

kill -9 强制关闭进程。

此外,也有使用cut命令进行处理的,参考如下:

1
ps -ef | grep test | grep -v grep | cut -c 9-15 | xargs kill -9

cut -c 9-15 仅显示第9-15个字符(即PID,进程号)

phpexcel导出excel无法打开,提示文件格式或文件名无效,文件损毁,解决办法

发表于 2018-11-14 分类于 PHP

xls还是xlsx?首先确定导出的excel文件扩展名,然后添加header,不同的文件类型,不同的header。我就是这里出了问题,xlsx用了xls的header,导致导出的excel无法打开。

xlsx如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
$excelName = '绩效得分统计'.time();

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

header('Content-Disposition: attachment;filename="'.$excelName.'.xlsx"');

header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

$objWriter->save('php://output');

exit;

xls如下:

1
2
3
4
5
6
7
8
9
10
11
header('Content-Type: application/vnd.ms-excel');

header('Content-Disposition: attachment;filename="links_out'.$timestamp.'.xls"');

header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');

$objWriter->save('php://output');

exit;

末尾添加exit。

1
2
3
$objWriter->save('php://output');

exit;

重启nginx后丢失nginx.pid的解决方法

发表于 2018-10-25 分类于 服务器运维
1
nginx -c /etc/nginx/nginx.conf

隐藏服务器token

发表于 2018-10-01 分类于 服务器运维

1、Php

关键词: expose_php = off

2、Nginx

nginx.conf :

关键词: server_tokens off

3、Apache

ServerSignature

这允许在服务器生成的文档(如错误消息、modproxy 的 ftp 目录列表、modinfo 输出等等)下添加一个显示服务器名称和版本号的页脚行。

它有三个可能的值:

  • On - 允许在服务器生成的文档中添加尾部页脚行
  • Off - 禁用页脚行
  • EMail - 创建一个 “mailto:” 引用;用于将邮件发送到所引用文档的 ServerAdmin。

ServerTokens

它决定了发送回客户端的服务器响应头字段是否包含服务器操作系统类型的描述和有关已启用的 Apache 模块的信息。

此指令具有以下可能的值(以及在设置特定值时发送到客户端的示例信息):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ServerTokens   Full (或者不指定)

发送给客户端的信息: Server: Apache/2.4.2 (Unix) PHP/4.2.2 MyMod/1.2

ServerTokens Prod[uctOnly]

发送给客户端的信息: Server: Apache

ServerTokens Major

发送给客户端的信息: Server: Apache/2

ServerTokens Minor

发送给客户端的信息: Server: Apache/2.4

ServerTokens Min[imal]

发送给客户端的信息:Server: Apache/2.4.2

ServerTokens OS

发送给客户端的信息: Server: Apache/2.4.2 (Unix)

注意:在 Apache 2.0.44 之后,ServerTokens 也控制由 ServerSignature 指令提供的信息。

为了隐藏 web 服务器版本号、服务器操作系统细节、已安装的 Apache 模块等等,使用你最喜欢的编辑器打开 Apache 配置文件:

1
2
3
$ sudo vi /etc/apache2/apache2.conf        #Debian/Ubuntu systems

$ sudo vi /etc/httpd/conf/httpd.conf #RHEL/CentOS systems

添加/修改/附加下面的行:

1
ServerTokens ProdServerSignature Off

保存并退出文件,重启你的 Apache 服务器

SVG to PNG

发表于 2018-09-18 分类于 PHP

Installation

$ composer require meyfa/php-svg

Getting Started

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
require '../vendor/autoload.php';

use SVG\SVGImage;

use SVG\Nodes\Shapes\SVGRect;

$svg = file_get_contents("d:/1.svg");

$svg = str_replace('fill="#2c2c2c"','fill="#e21010"',$svg);

$image = SVGImage::fromString($svg);

$rasterImage = $image->toRasterImage(200, 200);

header('Content-Type: image/png');

imagepng($rasterImage,'d:/1.png');

关于Lumen(Laravel)中.env文件中的环境变量是如何生效的

发表于 2018-09-11 分类于 PHP

.env 文件可自定义其他任何有效的环境变量,并可通过 调用 env() 或 $_SERVER 或 $_ENV 来获取该变量。那么env()是如何加载到这些变量的呢?

函数env():在Lumen的vendor/laravel/lumen-framework/src/helpers.php中,我们可以发现env函数是这样被定义的:

可见,env函数中调用了 getenv() 来读取环境变量。

vlucas/phpdotenv:我们知道getenv()是PHP原生提供可读取 $_SERVER 或 $_ENV 全局变量的函数API,.env文件中的环境变量为何可以通过getenv()来获取呢?vlucas/phpdotenv就是这个幕后功臣,在Lumen 或 Laravel 的vendor下可以找到她,如果要单独下载她,去这里。在vlucas/phpdotenv/src/Loader.php文件中,我们可以看到.env被加载进一个数组,然后把每一行看作setter并调用setEnvironmentVariable()方法:

Loader::setEnvironmentVariable($name, $value = null) 的定义如下:

PHP dotenv 是什么:

Loads environment variables from .env to getenv(), $_ENV and $_SERVER automagically.This is a PHP version of the original Ruby dotenv.

Why .env:

You should never store sensitive credentials in your code. Storing configuration in the environment is one of the tenets of a twelve-factor app. Anything that is likely to change between deployment environments – such as database credentials or credentials for 3rd party services – should be extracted from the code into environment variables.Basically, a .env file is an easy way to load custom configuration variables that your application needs without having to modify .htaccess files or Apache/nginx virtual hosts. This means you won’t have to edit any files outside the project, and all the environment variables are always set no matter how you run your project - Apache, Nginx, CLI, and even PHP 5.4’s built-in webserver. It’s WAY easier than all the other ways you know of to set environment variables, and you’re going to love it.. NO editing virtual hosts in Apache or Nginx. NO adding php_value flags to .htaccess files. EASY portability and sharing of required ENV values. COMPATIBLE with PHP’s built-in web server and CLI runner

Mysql创建新用户方法

发表于 2018-09-07 分类于 数据库

创建新用户

语法:

1
CREATE USER 'username'@'host' IDENTIFIED BY 'password';

例子:

1
2
3
4
5
6
7
8
9
CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456';

CREATE USER 'cat'@'192.168.1.101_' IDENDIFIED BY '123456';

CREATE USER 'cat'@'%' IDENTIFIED BY '123456';

CREATE USER 'cat'@'%' IDENTIFIED BY '';

CREATE USER 'cat'@'%';

实例1:

1
mysql>  create user ms ;

这样创建的用户,可以从任意安装了mysql客户端,并能够访问目标服务器的机器上创建连接,无须密码.例如,从ip:10.0.0.99的客户端执行连接:

1
mysql -ums  -h 172.16.1.110

查看该用户:

1
mysql>  select user,host,password from user where user='ms ';
1
SELECT USER();    //显示当前用户

实例2:

1
mysql>  create user ms _ps identified by 'ms ';

用户连接时,必须指定密码,那就可以在创建用户时,通过指定identified by子句来设定密码

用密码登陆:

1
mysql -ums _ps -p -h 172.16.1.110

如果希望指定的用户只能从某台指定的域(domain)或主机访问,可以在创建用户时指定host,例如,指定用户只能从10.0.0.99访问

1
mysql>  create user ms _ip@10.0.0.99 identified by password '123456';

用户访问授权

语法:

1
grant 权限1,权限2,...权限n on 数据库名称.表名称 to 用户名@用户地址 identified by '连接口令';

权限1,权限2,…权限n代表

1
select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限

实例:

1
mysql> grant select,insert,update,delete,create,drop on vtdc.employee to joe@10.163.225.87 identified by '123';

给来自10.163.225.87的用户joe分配可对数据库vtdc的employee表进行select,insert,update,delete,create,drop等操作的权限,并设定口令为123。

1
mysql> grant all privileges on vtdc.* to joe@10.163.225.87 identified by '123';

给来自10.163.225.87的用户joe分配可对数据库vtdc所有表进行所有操作的权限,并设定口令为123。

1
mysql> grant all privileges on *.* to joe@10.163.225.87 identified by '123';

给来自10.163.225.87的用户joe分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。

1
mysql> grant all privileges on *.* to joe@localhost identified by '123';

给本机用户joe分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。

直接向mysql.user表插入记录

1
2
3
mysql> insert into user (host,user,password) values ('%','ms _insert',password('ms '));

mysql> flush privileges; //刷新系统权限表

修改mysql用户密码方式

  • 使用mysqladmin语法:
1
mysqladmin -u用户名 -p旧密码 password 新密码

例如:

1
mysqladmin -u root -p 123 password 456;
  • 直接修改user表的用户口令:

语法:

1
update mysql.user set password=password('新密码') where User="root" and Host="localhost";

实例:

1
2
3
update user set password=password('123456') where user='root'

flush privileges;
  • 使用SET PASSWORD语句修改密码:语法:
1
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');

如果是当前登陆用户用SET PASSWORD = PASSWORD(“newpassword”);

实例:

1
2
3
4
5
set password for root@localhost=password('');

SET PASSWORD FOR name=PASSWORD('new password');

SET PASSWORD FOR 'cat'@'%' = PASSWORD("123456");

删除用户和撤销权限

  • 取消一个账户和其权限
1
2
3
4
5
Drop USER user;

drop user username@'%'

drop user username@localhost
  • 取消授权用户:

语法:

1
REVOKE privilege ON databasename.tablename FROM 'username'@'host';

例子:

1
2
3
4
5
6
7
8
9
REVOKE SELECT ON *.* FROM 'cat'@'%';

REVOKE SELECT ON test.user FROM 'cat'@'%';

revoke all on *.* from sss@localhost ;

revoke all on user.* from 'admin'@'%';

SHOW GRANTS FOR 'cat'@'%'; //查看授权
  • 删除用户:

语法:

1
Delete from user where user = "user_name" and host = "host_name" ;

例子:

1
delete from user where user='sss' and host='localhost';

数据库表

  • 查看所有数据库: 数据库目录:/usr/local/mysql/data
1
2
3
4
5
6
7
8
9
10
11
12
13
mysql>  SHOW DATABASES;   //显示数据库

mysql> USE abccs //进入数据库

mysql> SHOW TABLES; //显示表

mysql> DESCRIBE mytable; //显示表结构

mysql> CREATE DATABASE abccs; //创建一个数据库

mysql> CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1), birth DATE, birthaddr VARCHAR(20)); //创建表

mysql> insert into mytable values (‘abccs’,‘f’,‘1977-07-07’,‘china’); //插入表数据

使用文本方式插入数据:

mysql.txt内容:

1
2
3
4
5
6

abccs f 1977-07-07 china

mary f 1978-12-12 usa

tom m 1970-09-02 usa

执行sql

1
mysql>  LOAD DATA LOCAL INFILE "mytable.txt" INTO TABLE pet;    //导入TXT文件数据

2.删除数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql>  drop database drop_database;   //删除一个已经确定存在的数据库

alter table 表名 ENGINE=存储引擎名; //修改表的存储引擎

alter table 表名 drop 属性名; //删除字段

alter table 旧表名 rename to 新表名; //修改表名

alter table 表名 modify 属性名 数据类型; //修改字段数据类型

alter table 表名 change 旧属性名 新属性名 新数据类型; //修改字段名

alter table 表名 drop FOREING KEY 外键别名; //删除子表外键约束

增加表字段:

1
2
3
4
5
6
7
8
9
10
11
alter table example add phone VACGAR(20); //增加无约束的字段

alter table example add age INT(4) NOT NULL; //增加万增约束的字段

alter table example add num INT(8) PRIMARY KEY FIRST; //表的第一个位置增加字段

alter table example add address VARCHAR(30) NOT NULL AFTER phone; //表的指定位置之后增加字段

alter table example modify name VARCHAR(20) FIRST; //把字段修改到第一位

alter table example modify num INT(8) ATER phone;//把字段修改到指定字段之后

bash:scrapy:command not found

发表于 2018-08-25 分类于 Python

一、场景

执行 pip install scrapy 后,安装成功且执行 import scrapy 成功

二、问题

在shell中执行 scrapy 返回 bash: scrapy: command not found

三、解决办法

(1)进入 Python 的主目录,如cd /usr/local/python3.6/bin,查找 scrapy 项

(2)检查 cd /usr/bin/ | ll | grep scrapy,查看是否存在

(3)不存在则执行 ln -s /usr/local/bin/scrapy /usr/bin/scrapy

(4)回到shell,执行 scrapy version,成功

mysql常见时间格式

发表于 2018-08-22 分类于 数据库

DATE 范围 ‘1000-01-01’ to ‘9999-12-31’

DATETIME 范围 ‘1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’

TIMESTAMP 范围 ‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC

注: 如果当前时间字段不做查询, 可以直接存储为字符串。

解决U盘启动“Failed to load ldlinux.c32”

发表于 2018-08-20

利用UltraISO制作了Fedora 23的U盘启动,开机F12键USB启动时出现

Failed to load ldlinux.c32

Boot failed: please change disks and press a key to continue

在网上查询很多,进行了多次尝试:

换一个其他软件制作U盘启动,尝试失败

认为下载系统软件有问题,下载了其他版本的Fedora 21/25,顺利安装

猜测是不是制作启动时写入方式有问题,尝试了多个写入方式(USB-HDD、USB-HDD+、USB-ZIP),均失败

最后选择写入方式“RAW”,Success,问题解决,安装系统时可以顺利启动。

因此,最后解决办法是:

UltraISO制作启动盘时,换写入方式为“RAW”,即可解决

1…678…16
Mr.Gou

Mr.Gou

155 日志
11 分类
38 标签
RSS
GitHub E-Mail Weibo
Links
  • 阮一峰的网络日志
  • 离别歌 - 代码审计漏洞挖掘pythonc++
  • 一只猿 - 前端攻城尸
  • 雨了个雨's blog
  • nMask's Blog - 风陵渡口
  • 区块链技术导航
© 2023 蜀ICP备2022014529号