shell用法和技巧

Posted on Posted in linux
Tips: 本文创建于2013年12月9日,已超过 2 年,内容或图片可能已经失效!

Linux shell用法和技巧详解
检查远程端口是否对bash开放:

  1. echo >/dev/tcp/8.8.8.8/53 && echo "open"  

让进程转入后台:

  1. Ctrl + z  

将进程转到前台

  1. fg  

产生随机的十六进制数,其中n是字符数:

  1. openssl rand -hex n  

在当前shell里执行一个文件里的命令:

  1. source /home/user/file.name  

截取前5个字符:

  1. ${variable:0:5}  

SSH debug 模式:

  1. ssh -vvv user@ip_address  
  2. SSH with pem key:  
  3. ssh user@ip_address -i key.pem  

用wget抓取完整的网站目录结构,存放到本地目录中:

  1. wget -r --no-parent --reject "index.html*" http://hostname/ -P /home/user/dirs  

一次创建多个目录:

  1. mkdir -p /home/user/{test,test1,test2}  

列出包括子进程的进程树:

  1. ps axwef  

创建 war 文件:

  1. jar -cvf name.war file  

测试硬盘写入速度:

  1. dd if=/dev/zero of=/tmp/output.img bs=8k count=256k; rm -rf /tmp/output.img  
  2. #或  
  3. time dd if=/dev/zero of=/var/test bs=2k count=1000000  

测试硬盘读取速度:

  1. hdparm -Tt /dev/sda  
  2. #或  
  3. time dd if=/var/test of=/dev/null bs=2k  

获取文本的md5 hash:

  1. echo -n "text" | md5sum  

检查xml格式:

  1. xmllint --noout file.xml  

将tar.gz提取到新目录里:

  1. tar zxvf package.tar.gz -C new_dir  

使用curl获取HTTP头信息:

  1. curl -I http://www.example.com  

修改文件或目录的时间戳(YYMMDDhhmm):

  1. touch -t 0712250000 file  

用wget命令执行ftp下载:

  1. wget -m ftp://username:password@hostname  

生成随机密码(例子里是16个字符长):

  1. LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;  

快速备份一个文件:

  1. cp some_file_name{,.bkp}  

访问Windows共享目录:

  1. smbclient -U "DOMAIN\user" //dc.domain.com/share/test/dir  

执行历史记录里的命令(这里是第100行):

  1. !100  

解压:

  1. unzip package_name.zip -d dir_name  

输入多行文字(CTRL + d 退出):

  1. cat > test.txt  

创建空文件或清空一个现有文件:

  1. > test.txt  

与Ubuntu NTP server同步时间:

  1. ntpdate ntp.ubuntu.com  

用netstat显示所有tcp4监听端口:

  1. netstat -lnt4 | awk '{print $4}' | cut -f2 -d: | grep -o '[0-9]*'  

qcow2镜像文件转换:

  1. qemu-img convert -f qcow2 -O raw precise-server-cloudimg-amd64-disk1.img \  
  2. precise-server-cloudimg-amd64-disk1.raw  

重复运行文件,显示其输出(缺省是2秒一次):

  1. watch ps -ef  

所有用户列表:

  1. getent passwd  
  2. Mount root in read/write mode:  
  3. mount -o remount,rw /  

挂载一个目录(这是不能使用链接的情况):

  1. mount --bind /source /destination  

动态更新DNS server:

  1. nsupdate < <EOF  
  2. update add $HOST 86400 A $IP  
  3. send  
  4. EOF  

递归grep所有目录:

  1. grep -r "some_text" /path/to/dir  

列出前10个最大的文件:

  1. lsof / | awk '{ if($7 > 1048576) print $7/1048576 "MB "$9 }' | sort -n -u | tail  

显示剩余内存(MB):

  1. free -m | grep cache | awk '/[0-9]/{ print $4" MB" }'  

打开Vim并跳到文件末:

  1. vim + some_file_name  

Git 克隆指定分支(master):

  1. git clone git@github.com:name/app.git -b master  

Git 切换到其它分支(develop):

  1. git checkout develop  

Git 删除分支(myfeature):

  1. git branch -d myfeature  

Git 删除远程分支

  1. git push origin :branchName  

Git 将新分支推送到远程服务器:

  1. git push -u origin mynewfeature  

打印历史记录中最后一次cat命令:

  1. !cat:p  

找出/home/user下所有空子目录:

  1. find /home/user -maxdepth 1 -type d -empty  

获取test.txt文件中第50-60行内容:

  1. < test.txt sed -n '50,60p'  

运行最后一个命令(如果最后一个命令是mkdir /root/test, 下面将会运行: sudo mkdir /root/test):

  1. sudo !!  

创建临时RAM文件系统 – ramdisk (先创建/tmpram目录):

  1. mount -t tmpfs tmpfs /tmpram -o size=512m  
  2. Grep whole words:  
  3. grep -w "name" test.txt  

在需要提升权限的情况下往一个文件里追加文本:

  1. echo "some text" | sudo tee -a /path/file  

列出所有kill signal参数:

  1. kill -l  

在bash历史记录里禁止记录最后一次会话:

  1. kill -9 $$  

扫描网络寻找开放的端口:

  1. nmap -p 8081 172.20.0.0/16  

设置git email:

  1. git config --global user.email "me@example.com"  
  2. To sync with master if you have unpublished commits:  
  3. git pull --rebase origin master  

将所有文件名中含有"txt"的文件移入/home/user目录:

  1. find -iname "*txt*" -exec mv -v {} /home/user \;  

将文件按行并列显示:

  1. paste test.txt test1.txt  

shell里的进度条:

  1. pv data.log  

使用netcat将数据发送到Graphite server:

  1. echo "hosts.sampleHost 10 `date +%s`" | nc 192.168.200.2 3000  

将tabs转换成空格:

  1. expand test.txt > test1.txt  
  2. Skip bash history:  
  3. < space >cmd  

去之前的工作目录:

  1. cd -  

拆分大体积的tar.gz文件(每个100MB),然后合并回去:

  1. split –b 100m /path/to/large/archive /path/to/output/files  
  2. cat files* > archive  

使用curl获取HTTP status code:

  1. curl -sL -w "%{http_code}\\n" www.example.com -o /dev/null  

设置root密码,强化MySQL安全安装:

  1. /usr/bin/mysql_secure_installation  

当Ctrl + c不好使时:

  1. Ctrl + \  

获取文件owner:

  1. stat -c %U file.txt  

block设备列表:

  1. lsblk -f  

找出文件名结尾有空格的文件:

  1. find . -type f -exec egrep -l " +$" {} \;  

找出文件名有tab缩进符的文件

  1. find . -type f -exec egrep -l $'\t' {} \;  

用"="打印出横线:

  1. printf '%100s\n' | tr ' ' =  

linux去掉注释和空行

  1. grep -v ^# /etc/vsftpd/vsftpd.conf |grep -v ^$  

以上转自 Linux shell用法和技巧详解

linux修改登录后的欢迎信息

  1. vim /etc/motd  

linux修改登录前的欢迎信息
issue的内容是出现在本机登录的用户界面上,而issue.net则是在用户通过网络telnet的时候出现。

  1. /etc/issue  
  2. or  
  3. /etc/issue.net  

修改网卡MAC地址

  1. /sbin/ifconfig eth0 down  
  2. /sbin/ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE  
  3. /sbin/ifconfig eht0 up  

让主机不响应ping

  1. echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all  
  2. #若想恢复就用  
  3. echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all  
  4. #必须是用命令改,不能是vi修改  

自动注销ROOT,即root超时

  1. vi /etc/profile  
  2. #在"HISTSIZE="后面加入下面这行:  
  3. TMOUT=300  
  4. #300,表示300秒  

ls只列出目录

  1. ls -lF | grep ^d  
  2. ls -lF | grep /$  
  3. ls -F | grep /$  

让cron任务不回馈信息

  1. * * * * * cmd > /dev/null 2>&1  

linux挂载windows共享

  1. mount -t smbfs -o username=massky,password=massky //192.168.1.1/dbf /mnt/share  
  2. #如想机器重启自动挂载,vi /etc/fstab最后加入:  
  3. //192.168.1.1/dbf /mnt/share smbfs defaults,auto,username=massky,password=massky 0 0  

定制linux 提示符
在bash 中提示符是通过一个环境变量$PS1 指定的。用export $PS1 查看现在的值,比较直
观常用的提示符可以设定为export PS1="[\u@\h \W]\$"。其中\u 代表用户名,\h 代表主机
名,\W 代表当前工作目录的最后一层,如果是普通用户\$则显示$,root 用户显示#。

前后台任务相关
jobs 列出属于当前用户的进程
bg 将进程搬到后台运行(Background)
fg 将进程搬到前台运行(Foreground)
万一你运行程序时忘记使用"&"了,又不想重新执行。可以先使用ctrl+z挂起程序,然后敲入bg命令,这样程序就在后台继续运行了。

查找当前目录下七天前的文件,并删除

  1. find ./ -mtime +7 -type f -exec rm {} \;  

查找当前目录下文件并更改扩展名

  1. # 更改所有.ss文件为.aa  
  2. find ./ -name "*.ss" -exec rename .ss .aa ‘{}’ \;  

如何用tar打包一个目录时,去掉其中的某些子目录或指定文件

  1. #加参数 –exclude 即可, 可加文件名或目录名, 可多写  
  2. tar cvf –exclude {dirname,filename} #dirname不要加/  

占用CPU的一个命令

  1. yes string  

文件行数/字数统计

  1. wc –l file # 计算文件行数  
  2. wc -w file # 计算文件中的单词数  
  3. wc -c file # 计算文件中的字符数  

如何知道某个命令使用了什么库文件

  1. # 例如要知道ls使用了什么库文件,可以使用:  
  2. ldd /bin/ls  

限制用户的最小密码长度

  1. # 修改/etc/login.defs里面的PASS_MIN_LEN的值。比如限制用户最小密码长度是8:  
  2. PASS_MIN_LEN 8  

取消root命令历史记录以增加安全性

  1. # 为了设置系统不记录每个人执行过的命令,就在/etc/profile里设置:  
  2. # HISTFILESIZE=0  
  3. HISTSIZE=0  
  4. # 或者:  
  5. ln -s /dev/null ~/.bash_history  

使新用户首次登陆后强制修改密码

  1. #useradd -p '' testuser; chage -d 0 testuser  

显示系统运行了多长时间

  1. uptime  

查看所有帐号的最后登录时间

  1. lastlog /var/log/lastlog  

查看系统自开通以来所有用户的登录时间和地点

  1. cat /var/log/secure  

查找或删除正在使用某文件的进程

  1. fuser filename  
  2. fuser -k filename  

以不同的用户身份运行程序

  1. su – username -c "/path/to/command"  
» 转载请注明来源:若我若鱼 » shell用法和技巧

Leave a Reply

Your email address will not be published. Required fields are marked *

seventeen + nineteen =