linux日常命令记录
文本处理
- sed命令
替换:sed 's/被替换字符/替换字符/g' file_name
删除文件所有空行:sed '/^$/d' file_name
删除文件所有注释:sed '/*#/d' file_name
- echo命令
查看第一行的第一栏:echo a b c | awk '{print $1}'
查看一行的第一和第三栏:echo a b c | awk '{print $1,$3}'
- paste命令
合并两个文件或两栏的内容:paste file1 file2
合并两个文件或两栏的内容用“+”号区分:paste -d '+' file1 file2
- sort命令
排序两个文件的内容:sort file1 file2
取出两个文件的并集(重复的行只保留一份):sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份)
删除交集,留下其他的行:sort file1 file2 | uniq -u 删除交集,留下其他的行
取出两个文件的交集(只留下同时存在于两个文件中的文件):sort file1 file2 | uniq -d
- comm命令
比较两个文件的内容只删除 'file1' 所包含的内容:comm -1 file1 file2
比较两个文件的内容只删除 'file2' 所包含的内容:comm -2 file1 file2
比较两个文件的内容只删除两个文件共有的部分:comm -3 file1 file2
字符设置和文件格式转换
将一个文本文件的格式从MSDOS转换成UNIX:dos2unix filedos.txt fileunix.txt
将一个文本文件的格式从UNIX转换成MSDOS:unix2dos fileunix.txt filedos.txt 将一个文本文件的格式从UNIX转换成MSDOS
将一个文本文件转换成html:recode ..HTML < page.txt > page.html 将一个文本文件转换成html
显示所有允许的转换格式:recode -l | more
各种备份命令
- dump命令
制作一个 '/home' 目录的完整备份:dump -0aj -f /tmp/home0.bak /home
制作一个 '/home' 目录的交互式备份:dump -1aj -f /tmp/home0.bak /home
还原一个交互式备份:restore -if /tmp/home0.bak
- rsync命令
同步两边的目录:rsync -rogpav --delete /home /tmp
通过SSH通道rsync:rsync -rogpav -e ssh --delete /home ip_address:/tmp
通过ssh和压缩将一个远程目录同步到本地目录:rsync -az -e ssh --delete ip_addr:/home/public /home/local
通过ssh和压缩将本地目录同步到远程目录:rsync -az -e ssh --delete /home/local ip_addr:/home/public
- dd命令
通过ssh在远程主机上执行一次备份本地磁盘的操作:dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz'
备份磁盘内容到一个文件:dd if=/dev/sda of=/tmp/file1
做一个将 MBR (Master Boot Record)内容复制到软盘的动作:dd if=/dev/hda of=/dev/fd0 bs=512 count=1
从已经保存到软盘的备份中恢复MBR内容:dd if=/dev/fd0 of=/dev/hda bs=512 count=1
- tar命令
执行一次对 '/home/user' 目录的交互式备份操作:tar -Puf backup.tar /home/user
通过ssh在远程目录中复制一个目录内容:( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p'
通过ssh在远程目录中复制一个本地目录:( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p'
本地将一个目录复制到另一个地方,保留原有权限及链接:tar cf - . | (cd /tmp/backup ; tar xf - )
从一个目录查找并复制所有以 '.txt' 结尾的文件到另一个目录:find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents
查找所有以 '.log' 结尾的文件并做成一个bzip包:find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2
文件的特殊属性
- chattr命令
使用 "+" 设置权限,使用 "-" 用于取消
只允许以追加方式读写文件:chattr +a file1
允许这个文件能被内核自动压缩/解压:chattr +c file1
在进行文件系统备份时,dump程序将忽略这个文件:chattr +d file1
设置成不可变的文件,不能被删除、修改、重命名或者链接:chattr +i file1
允许一个文件被安全地删除:chattr +s file1
一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘:chattr +S file1
若文件被删除,系统会允许你在以后恢复这个被删除的文件:chattr +u file1
显示特殊的属性:lsattr
用户设置
设置用户口令的失效期限:chage -E 2016-4-22 user1
检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户:pwck
检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组:grpck
登陆进一个新的群组以改变新创建文件的预设群组:newgrp group_name
工作常用
检查进程运行状态:ps -ef | grep 进程名称
杀死进程:kill -9 进程号 如:ps aux|grep zabbix |awk '{print $2}' |xargs kill -9
查看某个时间段到现在日志:sed -n '/2016-04-23 09:00:00/,$p' system.log.2016-04-23 | less
根据条件查找文件:grep server_name *.conf --color=auto
批量替换:find . -type f -name "*.conf"|xargs perl -pi -e 's|listen 80|#listen 80|g'
a,b机器之间文件传输:
a机器:python -m SimpleHTTPServer(默认端口是8000) #需要在当前文件执行
b机器:wget http://ip_add:8000/文件的名字
获取Java堆栈信息:
sudo -u user1 /usr/local/java/bin/jstack 进程号(top查看最高的java进程) > a.txt
找到最高的JAVA线程
top -H -p 进程号
把线程号转成16进制
printf "%x" 327
147
去a.txt里面查找147
vim a.txt /147
jstat -gcutil 23116 1000 5
git常用
查看版本:git remote -v
拉取用户的代码:git fetch user1
切换并创建新的分支:git checkout -b 创建的分支名 分支
删除分支:git branch -D 分支
查看分支:git branch
切换分支:git checkout 分支名称