下面整理的命令时在工作中经常用到的,整理成博客,方便以后查询。后续也会继续更新。。。

版权声明:可以转载,但请备注原文链接:https://shuwoom.com/?p=607

也可以通过关注我的微信公众号(shuwoom的博客),每周定期接收博客内容推送:


一、linux常用基本命令

1.计算

start=3
end=4
ret=`expr $end - $start`

2.时间显示

echo $(date +"%Y%m%d%H%M%S")

3.查看各个文件夹大小命令:

du -h --max-depth=1 .

4.查看几天前的文件

find . -maxdepth 1 -mtime +3

5.mysql登录

mysql -hIP地址 -u用户名 -p密码 -P端口 -A 数据库名

6.压缩文件

tar -zcvf shell.tar.gz shell/

7.解压文件

tar -zxvf shell.tar.gz

8.文件夹建立软链接(用绝对地址)

ln -s 源地址  目的地址
比如我把linux文件系统rootfs_dir软链接到/home/jyg/目录下
ln -s /opt/linux/rootfs_dir  /home/jyg/rootfs_dir就可以了

9.find命令查找包含指定内容的文件

find . | xargs grep xxx

10.杀死进程

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

11.文件切割 

split -l {行数} -d a {文件后缀位数} {待切割的文件} {文件前缀}
如:split -l 3600 -d 3 from.txt prefix_
参数:-l参数标识切割后每个文本最多多少航,-d标识切割后的文件后缀用3位数字表示

12.文件合并

cat *.txt > merge.txt

13.文件去重

sort -n data.txt|uniq -u
备注:uniq:-u 唯一,-d 重复

14.文件交集

grep -Ff 20180313080001.txt todo.txt
统计file2中有,file1中没有的行
grep -vFf file1 file2

15.curl命令

(1)指定域名和ip访问(一个域名可能绑定多个ip)
curl -I "http://111.231.192.97" -H "Host:zt9199.com"

(2)POST请求
curl -H 'Host:xxx.com' 'http://xx.xx.xx.xx/test' -d '{"version":"1.0", "interface":{"interfaceName":"test.api", "para":{"act":"2","reason":"test","domains":["www.test.us","www.test2.us"]}}}'

16.递归修改目录用户组

chown apache:apache directory -R

17.测试并发量

ab -n 100 -c 10 -l http://www.your_site.com
-n number 总的请求数
-c concurrency 并发数 
-l 表示当某个请求的回复长度不与第一个请求的回复长度一致时,不把它作为失败的请求

post
ab -n 100 -c 10 -p post.txt http://10.235.35.110/dig.php
post.txt里面是参数,如data={"name":"wgc"},但是要url编码以后

18、crontab命令

命令格式:crontab [-u user] file crontab [-u user] [ -e | -l | -r ]

  • -u user:用来设定某个用户的crontab服务;
  • file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
  • -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
  • -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
  • -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
  • -i:在删除用户的crontab文件时给确认提示。

文件格式:分 时 日 月 星期 要运行的命令

  • 第1列分钟0~59
  • 第2列小时0~23(0表示子夜)
  • 第3列日1~31
  • 第4列月1~12
  • 第5列星期0~7(0和7表示星期天)
  • 第6列要运行的命令
(1)实例1:每1分钟执行一次myCommand
* * * * * myCommand
(2)实例2:每小时的第3和第15分钟执行
3,15 * * * * myCommand
(3)实例3:在上午8点到11点的第3和第15分钟执行
3,15 8-11 * * * myCommand
(4)实例4:每隔两天的上午8点到11点的第3和第15分钟执行
3,15 8-11 */2  *  * myCommand
(5)实例5:每周一上午8点到11点的第3和第15分钟执行
3,15 8-11 * * 1 myCommand
(6)实例6:每晚的21:30重启smb
30 21 * * * /etc/init.d/smb restart
(7)实例7:每月1、10、22日的4 : 45重启smb
45 4 1,10,22 * * /etc/init.d/smb restart
(8)实例8:每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
(9)实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
0,30 18-23 * * * /etc/init.d/smb restart
(10)实例10:每星期六的晚上11 : 00 pm重启smb
0 23 * * 6 /etc/init.d/smb restart
(11)实例11:每一小时重启smb
* */1 * * * /etc/init.d/smb restart
(12)实例12:晚上11点到早上7点之间,每隔一小时重启smb
0 23-7 * * * /etc/init.d/smb restart

二、mysql常用命令

1.mysql基本命令

查看列:desc 表名;
修改表名:alter table t_book rename to bbb;
添加列:alter table 表名 add column 列名 varchar(30);
删除列:alter table 表名 drop column 列名;
修改列名MySQL: alter table bbb change nnnnn hh int;
修改列名SQLServer:exec sp_rename't_student.name','nn','column';
修改列名Oracle:lter table bbb rename column nnnnn to hh int;
修改列属性:alter table t_book modify name varchar(22);
建表时设置主键:
create table tableName( id int primary key);
或
create table tableName(id int, primary key(id));
单独设置主键:alter table tableName add primary key;
删除主键:alter table tableName drop primary key;
唯一键会自动添加唯一索引
建表时添加唯一键:
create table tableName(columnName int unique);
create table tableName(columnName int, unique key(columnName));
单独添加唯一键:
alter table tableName add unique key(columnName);
删除唯一键:
alter table tableName drop index columnName;
建表时添加索引:
create table tableName(columnName int key);
或
create table tableName(columnName int, key/index indexName(columnName));
多列索引:
create table tableName(columnName1 int, columnName2 int, key/index indexName(columnName1, columnName2));
单独添加索引:
alter table tableName add key/index indexName(columnName1, columnName2);
删除索引:
alter table tableName drop key/index columnName;

2.查询清除重复记录的方法

(1)查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

select * from people
where peopleId in (select  peopleId  from  people  group  by  peopleId  having  count(peopleId) > 1)

(2)删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

delete from people
where peopleId  in (select  peopleId  from people  group  by  peopleId   having  count(peopleId) > 1)
and rowid not in (select min(rowid) from  people  group by peopleId  having count(peopleId )>1)

(3)查找表中多余的重复记录(多个字段)

select * from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq  having count(*) > 1)

(4)删除表中多余的重复记录(多个字段),只留有rowid最小的记录

delete from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

(5)查找表中多余的重复记录(多个字段),不包含rowid最小的记录

select * from vitae a
where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

3.统计库、表大小

(1)查看该数据库实例下所有库大小,得到的结果是以MB为单位

mysql> select table_schema,sum(data_length)/1024/1024 as data_length,sum(index_length)/1024/1024 \
as index_length,sum(data_length+index_length)/1024/1024 as sum from information_schema.tables;
+--------------------+---------------+--------------+---------------+
| table_schema       | data_length   | index_length | sum           |
+--------------------+---------------+--------------+---------------+
| information_schema | 2734.92757511 |  86.27539063 | 2821.20296574 |
+--------------------+---------------+--------------+---------------+

(2)查看该实例下各个库大小

mysql>  select table_schema, sum(data_length+index_length)/1024/1024 as total_mb, \
sum(data_length)/1024/1024 as data_mb, sum(index_length)/1024/1024 as index_mb, \
count(*) as tables, curdate() as today from information_schema.tables group by table_schema order by 2 desc;
+--------------------+---------------+---------------+-------------+--------+------------+
| table_schema       | total_mb      | data_mb       | index_mb    | tables | today      |
+--------------------+---------------+---------------+-------------+--------+------------+
| data_1234567890    | 2820.59610939 | 2734.39689064 | 86.19921875 |     65 | 2015-11-02 |
| mysql              |    0.60579967 |    0.53744030 |  0.06835938 |     14 | 2015-11-02 |
| information_schema |    0.00781250 |    0.00000000 |  0.00781250 |     35 | 2015-11-02 |
+--------------------+---------------+---------------+-------------+--------+------------+

(3)查看单个库的大小

mysql> select concat(truncate(sum(data_length)/1024/1024,2),'mb') as data_size, \
concat(truncate(sum(max_data_length)/1024/1024,2),'mb') as max_data_size, \
concat(truncate(sum(data_free)/1024/1024,2),'mb') as data_free, \
concat(truncate(sum(index_length)/1024/1024,2),'mb') as index_size\
 from information_schema.tables where table_schema = 'erongtu_tyb2014'; 
+-----------+------------------+-----------+------------+
| data_size | max_data_size    | data_free | index_size |
+-----------+------------------+-----------+------------+
| 2734.40mb | 83483426815.99mb | 14.06mb   | 86.19mb    |
+-----------+------------------+-----------+------------+

(4)查看单个表的状态

mysql> show table status from data_1234567890 where name = 'data_1234567890_ss' \G
*************************** 1. row ***************************
           Name: data_1234567890_ss
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 840065
 Avg_row_length: 477
    Data_length: 401473536
Max_data_length: 0
   Index_length: 0
      Data_free: 6291456
 Auto_increment: 882251
    Create_time: 2015-09-07 17:24:18
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options:
        Comment:
1 row in set (0.00 sec)

(5)查看单库下所有表的状态

mysql> select table_name, (data_length/1024/1024) as data_mb , (index_length/1024/1024) \
as index_mb, ((data_length+index_length)/1024/1024) as all_mb, table_rows \
from information_schema.tables where table_schema = 'data_1234567890';
+---------------------------+---------------+-------------+---------------+------------+
| table_name                | data_mb       | index_mb    | all_mb        | table_rows |
+---------------------------+---------------+-------------+---------------+------------+
| ss_daccount               |    0.23437500 |  0.10937500 |    0.34375000 |       4481 |
| ss_daccount_log           |    2.48262787 |  0.58496094 |    3.06758881 |      27248 |
| ss_daccount_type          |    0.00025558 |  0.00195313 |    0.00220871 |          8 |
| ss_daccountlog            |  221.61502457 | 22.66113281 |  244.27615738 |    1045462 |
| ss_dactives               |    0.00178146 |  0.00195313 |    0.00373459 |          7 |
| ss_dadmin                 |    0.00268173 |  0.00195313 |    0.00463486 |         19 |
| ss_dwd_classify           |    0.01562500 |  0.00000000 |    0.01562500 |         12 |
| ss_dwd_collection         |    0.01562500 |  0.00000000 |    0.01562500 |          2 |
| ss_dwd_questions          |    1.51562500 |  0.00000000 |    1.51562500 |       3614 |
| ss_dwget                  | 1894.69999695 | 13.02929688 | 1907.72929382 |    1187574 |
| ss_dzhuanti_bolanhui      |    0.00419235 |  0.00195313 |    0.00614548 |         20 |
| click                     |    0.00000000 |  0.00097656 |    0.00097656 |          0 |
| ss_account                |    0.14062500 |  0.07812500 |    0.21875000 |       1871 |
+---------------------------+---------------+-------------+---------------+------------+

4.备份与还原

(1)备份命令mysqldump格式

 格式:mysqldump -h主机名  -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql 

(2)备份MySQL数据库为带删除表的格式

备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
mysqldump  --add-drop-table -uusername -ppassword -database databasename > backupfile.sql

(3)直接将MySQL数据库压缩备份

mysqldump -hhostname -uusername -ppassword -database databasename | gzip > backupfile.sql.gz

(4)备份MySQL数据库某个(些)表

mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql

(5)同时备份多个MySQL数据库

mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql

(6)仅备份份数据库结构

mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql

(7)备份服务器上所有数据库

mysqldump –all-databases > allbackupfile.sql

(8)还原MySQL数据库的命令

mysql -hhostname -uusername -ppassword databasename < backupfile.sql

(9)还原压缩的MySQL数据库

gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename

(10)将数据库转移到新服务器

mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename

(11)–master-data 和–single-transaction

在mysqldump中使用--master-data=2,会记录binlog文件和position的信息 。--single-transaction会将隔离级别设置成repeatable-commited

(12)导入数据库

常用source命令,用use进入到某个数据库,mysql>source d:\test.sql,后面的参数为脚本文件。

(13)查看binlog日志

查看binlog日志可用用命令 mysqlbinlog  binlog日志名称|more

(14)general_log

General_log记录数据库的任何操作,查看general_log 的状态和位置可以用命令show variables like "general_log%"  ,开启general_log可以用命令set global general_log=on

三.常用shell脚本

1、For循环结构

for f_todo in ${v_todo_file_list}
do
    xxxxx
done

2、if-else结构

if [ -s $f_todo ]
then
    xxxx
fi

备注:参数说明:
-s:文件存在则为真
-z:字符串长度为零则为真
-o: 

3、awk工具

(1)根据\t分割每一行,并只打印第一列

awk -F'\t' '{print $1}'

(2)简单正则表达式(将包含allen和alan的所有记录打印出来)

awk '/allen|alan/' testfile(3)提取url中的domain
备注:${f_in}参数说明:(host,vip,http_method)
awk -F"\t" 
'BEGIN{
    OFS="\t"  //指定列输出的分隔符
};

{
    if(($1 !~ /[^a-zA-Z0-9._-]/)&&($1 !~ /^[.-]/)&&($1 !~ /[0-9.-]$/)&&($1 !~ /\.\.+/)){
        if($1!=""&&$2!=""&&$3!=""){
            gsub(/[[:blank:]]*/,"",$1); //删除所有空白
            domain=tolower($1);
            gsub(/[[:blank:]]*/,"",$2);
            gsub(/[[:blank:]]*/,"",$3);
            print domain,$2,$3
        }
    }
}' ${f_in} > ${f_out}

四、常用VIM命令

1、光标移动

命令  作用(解释)
h,j,k,l  h表示往左,j表示往下,k表示往右,l表示往上
Ctrl+f 上一页
Ctrl+b 下一页
w, e, W, E  跳到单词的后面,小写包括标点
b, B  以单词为单位往前跳动光标,小写包含标点
开启新的一行
^ 一行的开始
$ 一行的结尾
gg 文档的第一行
[N]G 文档的第N行或者最后一行

2、插入模式(Insert Mode)

命令 作用(解释)
插入到光标前面
插入到行的开始位置
a 插入到光标的后面
A 插入到行的最后位置
o, O 新开一行
Esc 关闭插入模式

3、编辑(Editing)

命令 作用(解释)
r 在插入模式替换光标所在的一个字符
J 合并下一行到上一行
s 删除光标所在的一个字符, 光标还在当行
S 删除光标所在的一行,光标还在当行,不同于dd
u 撤销上一步操作
ctrl + r 恢复上一步操作
. 重复最后一个命令
~ 变换为大写
[N]>> 一行或N行往右移动一个tab
[N]<< 一行或N行往左移动一个tab

4、关闭(Exiting)

命令 作用(解释)
:w  保存
:wq, 保存并关闭
:q  关闭(已保存)
:q!  强制关闭

5、搜索(Search)

命令  作用(解释)
/pattern 搜索(非插入模式)
?pattern 往后搜索
n 光标到达搜索结果的前一个目标
N 光标到达搜索结果的后一个目标

6、视觉模式(Visual Mode)

命令 作用(解释)
v 选中一个或多个字符
V 选中一行

7、剪切和复制(Cut and Paste)

命令  作用(解释)
dd 删除一行
dw 删除一个单词
x 删除后一个字符
X 删除前一个字符
D 删除一行最后一个字符
[N]yy  复制一行或者N行
yw 复制一个单词
p 粘贴

8、窗口操作

命令 作用(解释)
:split  水平方向分割出一个窗口
:vsplit 垂直方向分割出一个窗口
:close 关闭窗口
Ctrl+W 切换窗口, h到左边窗口,j到下方窗口,k到上方窗口,l到右边窗口

发表评论

电子邮件地址不会被公开。