Linux日常命令

date时间字符串和时间戳相互转换

1
2
3
4
5
#时间字符串转时间戳
date -d "2010-10-18 00:00:00" +%s

#时间戳转时间字符串
date -d @1287331200 "+%Y-%m-%d %H:%m:%S"

按照文件大小排序 du -s ./* | sort -rn

sh -x test.sh debug调试shell脚本

rpm -e 删除软件,并删除依赖
rpm -e --nodeps 删除软件,不删除依赖
curl myip.ipip.net 查看当前机器的ip位置

ps -p PID -o lstart 查看进程启动时间

echo -e "\t" echo打印tab制表符

nl filename.txt 显示文件内容并带上行号

执行命令时可以加 -verbose 或 -v 来显示详细过程

打印目录结构tree
打印目录结构时忽略某些目录tree -I '*node_module*'

使用printf输出格式化数据 printf "%-5s %-10s %-4s\n" NO Name Mark ,- 是左对齐,没有- 是右对齐
http://blog.csdn.net/yss28/article/details/53538063

使用查看http请求的详细信息curl "http://www.jouypub.com" -v

crontab定时任务

1
2
3
4
5
crontab -e 是当前用户的定时任务
/etc/crontab 是系统的定时任务
* */1 * * * root sh 每分钟执行一次
0 */1 * * * root sh 每小时执行一次
50 23 * * * root sh /services/scripts/backup_mysql.sh 每天23:50执行

查看linux版本

1
2
lsb_release -a 	可以看到是centos 6.6
uname -a 可以看到系统是多少位的,内核版本

其它

1
2
3
4
$0 是脚本本身的名字
$1是传递给该shell脚本的第一个参数
$2是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表

逐行处理文本文件,参考:http://www.cnblogs.com/dwdxdy/archive/2012/07/25/2608816.html

1
2
3
4
cat data.dat | while read line
do
echo "File:${line}"
done

查看命令的路径 which python

程序休眠

1
2
3
4
sleep 1    睡眠1秒
sleep 1s 睡眠1秒
sleep 1m 睡眠1分
sleep 1h 睡眠1小时

linux shell 定义变量时,变量名和等号之间不能有空格,fileName=ls /root/

linux新建多级目录 mkdir -p /services/apps

linux新建多个目录

1
2
mkdir -p {/services/apps  ,/services/logs}
mkdir -p /home/user/{test,test1,test3}

eval,exec,source区别

1
2
3
eval 执行一个命令
exec 在新进程中执行一个命令,并且终止当前进程
source 在当前进程中执行脚本

修改DNS配置文件/etc/resolv.conf后,重启网络,DNS配置丢失:需要关闭NetworkManager

1
2
3
4
chkconfig NetworkManager off
service NetworkManager stop
service network restart
参考:http://my.oschina.net/HIJAY/blog/223118

应用程序退出状态(exit stat),只有0是执行成功,别的stat都是执行失败

vmstat命令实战详解(系统自带命令) http://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html

文件搜索

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
find /etc -name init 精确搜索
find /etc -name *init* 模糊搜索
find /etc -name init???  ?是单个词
find /etc -iname init???  iname不区分大小写
find /etc -inum 根据i节点查找
find /etc -cmin -5  查找5分钟内被修改过属性的文件
    -amin 访问时间
    -cmin 文件属性
    -mmin 文件内容
find /etc -size +1024 -a -size -10240 查找文件大小在1M和10M之间
    -a 且
    -o 或
find /etc -name init* -a -type f  按名称和类型
    f 文件
    d 目录
    l 软连接文件 
find /etc -name inittab -exec|-ok ls -l {} \; 查找到文件比
    exec 直接操作    
    ok 有操作提示

在当前文件夹中查找文件:find . -name "hadoop-*" -print
find忽略大小写 find -iname "MyCProgram.c"

ail -F:当文件删除或者移走后仍然追踪此文件,此时重新创建文件,会继续显示内容:
tail -f:当文件被删除或移走后,即使重新创建的文件也不会再出现新文件内容

yum命令详解 http://www.cnblogs.com/chuncn/archive/2010/10/17/1853915.html

RPM命令详解 http://zhidao.baidu.com/link?url=191S-J5lrJNBx30V5Z5G7skpKPIproqj3LOuS6Fne3ley992B4jjdNGtNFB2UZGzwidbX9hLnacd5B3nb1NQlK

格式化xml:gg=G

last命令

1
2
3
last        查看最近登录的用户
last -n 5 查看最近登录的几位用户
lastb 查看没有登陆成功的用户

uniq 要和sort一起用才能实现去重
uniq命令只能对相邻行进行去重,所以全文去重前需要先sort
awk中匹配字符串 $1~/baidu/ $1中是否包含百度

-P 要在紧跟scp后
scp -P 8004 adcall.war root@123.100.100.100:/home/root

du -h dest/ –max-depth=0

grep -i 忽略大小写

autoconf 自动生成configure脚本

linux日志

/var/log/lastlog :记录最后一次用户成功登陆的时间、登陆IP等信息
/var/log/messages :记录Linux操作系统常见的系统和服务错误信息
/var/log/secure :Linux系统安全日志,记录用户和工作组变坏情况、用户登陆认证情况,more /var/log/secure
/var/log/btmp :记录Linux登陆失败的用户、时间以及远程IP地址,需要使用lastb命令查看,last -f /var/log/btmp | more
/var/log/cron :记录crond计划任务服务执行情况



./configure 默认安装到/usr/local/bin ,如果要安装到别的位置,需要制定 --prefix=/usr/bin
删除./configure安装的软件,make uninstall&&make clean

执行shell报错
-bash: ./daily_adcall.sh: /bin/bash^M: bad interpreter: No such file or directory
vim打开文件 然后 :set fileformat=unix

wget重命名 ,大写的O
wget www.baidu.com -O baidu.html

grep 正则:
grep -E "123|456"
egrep egrep "(123|456)"     后面是正则组
grep -e "(123|456)"  后面是正则组


执行文件中的脚本
source /root/file.txt

ssh debug 模式 ssh -vvv root@122.22.2.2

计算文件md5,也可以计算字符串md5

1
2
cat file.txt | md5sum
echo "abc" | md5sum

base64 echo "abc" | base64
shell的hash和md5函数:sha1sum file.txt sha1sum file.txt

linux 命令行 md5 和base64
echo "abc" | md5

从远程机器上copy文件到本机 scp root@121.100.100.100:/root/sum.sh ./

查看进程下的线程

1
2
cat /proc/PID/status
pstree PID

aliyun的epel源

rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm

ifconfig命令找不到
yum install net-tools

less查看一个文件时,可以使用类似vi的command命令,在command模式下按G跳到文件末尾,再使用f或b来翻页

linux下多线程查看命令

pstree PID  树状显示进程
ps -Lf PID  查看有多少线程
pstack PID  查看每个线程栈

查看网络连接信息,相当于netstat,命令:ss
http://www.ttlsa.com/linux-command/ss-replace-netstat/

wget url -O filename 重命名保存

linux查看文件的修改历史 stat filename

查看文件编码 file filename:set fileencoding
设置编码 :set fileencoding=utf-8

command+u 删除命令行上 光标之间的字符
command+k 删除命令行上 光标之后的字符

lsof,查看一个进程占用的文件,查看最大的文件由哪个进程占用

join关联命令

http://www.runoob.com/linux/linux-comm-join.html
join -t ',' -o 2.2 1.2 1.3 1.4 1.5 -e '未知' -a1 req_suc_sort.txt /data/wangjun/city.txt > req_suc_city.txt

tar打包多个文件 tar czvf my.tar.gz file1 file2

paste 把两个文件并排合并成一个文件 paste file1 file2

linux上连接ftp 需要使用lftp lftp -u app,28NWwqlD 123.100.100.100

统计sum

1
2
3
4
5
6
cat num.txt | awk '{sum += $1} END {print sum}'


for i in `ls ./`;do echo $i;done 这里$i是文件
list=`ls ./`
for i in `ls $list`;do echo $i;done 这里$i是字符串

命令行搜索历史记录 ctrl+r

TCP抓包命令

tcpdump -A -s 0 'tcp port 9992 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' | grep "/client/bidrequest

执行脚本的两种方式,和区别

1  sh  执行时重建一个子shell
2  ./   执行在当前shell中,执行时能导出环境变量,而使用sh将不会


查看redis服务是否启动  redis-cli ping


快速去重 sort -u a.txt,比sort | uniq 快很多

编辑名称有特殊字符的文件

http://www.phpini.com/linux/linux-filename-with-special-characters

CDH 仓库

https://repository.cloudera.com/content/repositories/releases

浏览器模拟器

PhantomJS
Jasmine
Protractor
Nightwatch.js
CasperJS
Nemo.js
Buster.JS
DalekJS

ipv6地址申请

http://ipv6.google.com.hk/
http://broker.aarnet.net.au/
http://bbs2.6plat.org/d/23

ntp

更新系统时间
查看时区:more /etc/sysconfig/clock
安装ntpdate:yum -y install ntpdate

ntp server
ntpdate time.nist.gov
ntpdate time-a.nist.gov
ntpdate ntp.api.bz
ntpdate cn.pool.ntp.org
pool.ntp.org
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com
ntp8.aliyun.com
ntp9.aliyun.com
ntp10.aliyun.com

查看出口路由

1
2
linux     traceroute www.baidu.com
windows tracert www.baidu.coom

最全的静态网站生成器 http://www.iteye.com/magazines/133-Static-Site-Generators

扫描端口 nc -z -w 1 ip 1-65535

linux查看网卡信息

1
2
3
4
5
6
dmesg |grep eth0

mii-tool -v eth0

# 显示的信息最多
ethtool eth0

centos 清理内存

1
2
3
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

linux shell 判断字符串不包含 if [[ $line =~ *have* ]]

如果虚拟机ping不同外网,就看下dns,但是不能修改/etc/resolve.conf,这个文件重启后被修改,一定要在 if-eth0文件中加上dns

检测linux cpu工具 https://linux.cn/article-5104-1.html

根据protoc文件生成实体类 protoc --java_out=./ DPAds2.proto

su - hdfs 切换用户

shell 脚本,在调试时,FOR循环那行代码,总是出现错误syntax error near unexpected token do
http://xiewenbo.iteye.com/blog/1501826

Netty中的ServerBootstrap中有option和childOption的设置,区别在哪里?
option()是提供给NioServerSocketChannel用来接收进来的连接,也就是boss线程。childOption()是提供给由父管道ServerChannel接收到的连接,也就是worker线程,在这个例子中也是NioServerSocketChannel。

雅虎开源到数据学习数据13.5T
http://webscope.sandbox.yahoo.com/catalog.php?datatype=r&did=75

shadowsocks自定义代理规则user-rule设置方法,每次编辑完user-rule.txt后,均需执行“从GFWList更新PAC”,使本次规则也生效。
| 使用代理 @ 不使用代理
|ip.cn 只匹配后面
||ip.cn 匹配前后
@同理

查看tcp链接 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

不含行打印
for i in {1..100};do echo -n $i",";done
for i in {1..100};do printf $i",";done

正则:不以什么开头 ^[^,] 不以 , 开头|不以什么结尾 ^[,$] 不以 , 结尾

timestamp的值与时区毫无关系,因为timestamp一旦确定,其UTC时间就确定了,转换到任意时区的时间也是完全确定的,这就是为什么计算机存储的当前时间是以timestamp表示的,因为全球各地的计算机在任意时刻的timestamp都是完全相同的(假定时间已校准)。

修改密码 passwd jack
删除用户 usrdel jack
删除空目录 rmdir

date 当前时间
cal 显示日历

/etc/issue 保存欢迎页面的信息,远程登录不显示
/etc/issue.net 远程登录的欢迎页面
/etc/motd 登录后欢迎信息 ,这个信息不管远程登录还是本机登录都会显示,和以上信息同时显示

cat命令倒着写 tac,就是反向显示文件内容,从最后一行到第一行显示

谁创建的文件,文件就属于哪个用户,所属组就是用户所在地缺省组,一个用户可以有很多组,但只能有一个缺省组

以某个用户启动程序,即使这个用户不存在也是可以的

1
2
# 以tomcat身份启动,tomcat用户可以不存在
sudo -u tomcat /home/root/bin/start.sh

文件搜索

条件加-,命令不加-

ll -i 查看文件的i节点
每个文件都有一个i节点 ,如果文件名有空格或文件名很长,可以用i节点操作

普通用户更改密码时如果密码过于简单,系统不认,无法操作
管理员可以更改任何人的密码,而且可以任意

存储命令的地方 /bin /usr/sbin /usr/bin

w 查看服务器开启的时间,查看负载,查看用户和登录的时间,以及当前用户的操作和占用的cpu
who 查看当前用户

write 在线的用户,ctrl+d结束
wall(write all) 发广播,给所有在线用户发消息
mail 用户名 用户不在线也可以,查看mail直接使用mail然后enter
d+邮件号 删除邮件
邮件号 查看哪个邮件

last 查看最近登录的用户,日志查看哪些非法用户登录了系统
lastlog 先把所有用户列出来,并显示最后登陆

traceroute 查看访问一个网站经过的路由
这个如果连不上一个网站,可以查看在哪个节点断了

netstat 显示网络相关信息

netstat -tunpl 查看本机监听的端口
netstat -an 查看本机所有的网络连接
netstat -rn 查看本机路由表
-t TCP协议
-u UDP协议
-l 监听
-r 路由
-n 显示ip地址和端口号

setup:配置网络信息,使用setup配置的信息永久生效

mount 挂载
光盘的文件系统 iso9660
挂载一个光盘 mount (-t iso9660) /dev/cdrom /mnt/cdrom
光盘系统iso9660,(括号中可以省去)
设备目录 /dev
挂载点 /mnt
挂载:给硬件找一个设备目录/dev目录下,然后再分配一个目录(挂载点)连接起来就成为挂载
umount 卸载 umount /dev/cdrom /mnt/cdrom
不能在挂载点卸载

系统默认的运行级别 cat /etc/inittab 文件

# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode (单用户 )
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking) (多用户)
# 3 - Full multiuser mode (完整的服务模式)
# 4 - unused  (可以自定义)
# 5 - X11  (表示图形界面)
# 6 - reboot (Do NOT set initdefault to this)

查询当前的运行级别 runlevel
修改系统默认运行级别 id:3:initdefault: 注意最后一个分号

logout 退出登录,远程登录操作完后一定要退出登录

查看别名 which +命令 如:which cat

自定义快捷键 ab 快捷键 内容 如 ab mymail xx@163.com 输入ab后entry就显示邮箱
如果想重启仍然有效,进入家目录,打开.vimrc文件,把自定义命令写入

使用setup设置后需要重启网络服务
gcc c语言的源码编辑器,源码安装必须有gcc

so.2 结尾的软件包都是库依赖包,不是单独存在而是在其它软件包中

rpm

rpm -q 名称 查询是否安装
rpm -qa |grep xx 查询所有安装包 | 特定安装包
rpm -qi[p] xx 查询安装包信息[未安装包信息]
rpm -ql 查询安装包的路径
rpm -qp 查询未安装包的信息
rpm -qf 系统文件名 查询系统文件属于哪个rpm包
rpm -qR 查询软件包的依赖性
rpm -qp 查询未安装包信息
rpm -ivh|-Uvh 名称 安装软件包
rpm -e 卸载

rpm软件包名中有noarch表示这个软件不区分32或64位

yum

/etc/yum.repos.d/ 可用在线yum网址,一般使用*base
yum list 查看在线可用到rpm包
yum search 关键字 在线查找yum
yum -y install 包名: 安装 -y自动回答yes
yum -y update 包名: 升级 -y自动回答yes,如果不加包名就全部升级,包括linux内核,但升级linux内核后需要配置,否则无法使用,如果全部升级会无法使用,禁用
yum -y remove 包名: 卸载 -y自动回答yes ,这个是关联卸载,禁用
yum grouplist 查看可用到软件组
yum groupinstall 软件组安装
yum groupremove 软件组卸载

yum list 列出所有包
yum list installed 列出已经安装的包
yum remove packagename 删除

linux文本文件有严格的格式限制,注释不能跟在没注释的行后面 缩进空格

查看所有服务 /etc/rc.d/init.d/ 这些服务都可以直接起动
如果没有serivice命令,只能进这个目录启动

apache服务器的文件目录在/var/www/html/下

源码包安装的服务不能被服务管理命令管理,只能进软件安装目录启动

源码包和rpm和同时安装,因为安装位置不同

查看网卡 ` lspci | grep Ethernet `
查看CPU信息 ` cat /proc/cpuinfo `
查看内存信息 ` cat /proc/meminfo 查看磁盘信息 fdisk -l (需要root权限) `

批量修改文件名

1
2
3
4
5
6
# 方法一:for循环结合sed替换
> for file in `ls *.jpg`;do mv $file `echo $file|sed 's/.php//g'`;done;


# 方法二:ls结合awk,输出交给bash执行
> ls *.jpg |awk -F "_php" '{print "mv "$0" "$1$2""}'|bash

正则表达式:
匹配任意字符:[\s\S]+
贪婪模式:head[\s\S]+tail,懒惰模式:head[\s\S]+?tail

JouyPub wechat
欢迎订阅「K叔区块链」 - 专注于区块链技术学习