diff --git a/sources/Linux shell tips and tricks.md b/sources/Linux shell tips and tricks.md deleted file mode 100644 index d0a108de51..0000000000 --- a/sources/Linux shell tips and tricks.md +++ /dev/null @@ -1,314 +0,0 @@ -Translating------------geekpi - - - -Linux shell tips and tricks -================================================================================ -I’m using Linux shell (Bash) on daily basis, but I often forgot some useful command or shell tip. Yes, I can remember commands, but I can’t say that if I used it just once for specific task. Then I started to write Linux shell tips in text file on my Dropbox account and now I decided to share that. This list will be updated over time. Also keep in mind that for some tips you will need to install additional software on your Linux distribution. - -Check if remote port is open with bash: - - echo >/dev/tcp/8.8.8.8/53 && echo "open" - -Suspend process: - - Ctrl + z - -Move process to foreground: - - fg - -Generate random hex number where n is number of characters: - - openssl rand -hex n - -Execute commands from a file in the current shell: - - source /home/user/file.name - -Substring for first 5 characters: - - ${variable:0:5} - -SSH debug mode: - - ssh -vvv user@ip_address - -SSH with pem key: - - ssh user@ip_address -i key.pem - -Get complete directory listing to local directory with wget: - - wget -r --no-parent --reject "index.html*" http://hostname/ -P /home/user/dirs - -Create multiple directories: - - mkdir -p /home/user/{test,test1,test2} - -List processes tree with child processes: - - ps axwef - -Create war file: - - jar -cvf name.war file - -Test disk write speed: - - dd if=/dev/zero of=/tmp/output.img bs=8k count=256k conv=fdatasync; rm -rf /tmp/output.img - -Test disk read speed: - - hdparm -Tt /dev/sda - -Get md5 hash from text: - - echo -n "text" | md5sum - -Check xml syntax: - - xmllint --noout file.xml - -Extract tar.gz in new directory: - - tar zxvf package.tar.gz -C new_dir - -Get HTTP headers with curl: - - curl -I http://www.example.com - -Modify timestamp of some file or directory (YYMMDDhhmm): - - touch -t 0712250000 file - -Download from ftp using wget: - - wget -m ftp://username:password@hostname - -Generate random password (16 char long in this case): - - LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo; - -Quickly create a backup of a file: - - cp some_file_name{,.bkp} - -Access Windows share: - - smbclient -U "DOMAIN\user" //dc.domain.com/share/test/dir - -Run command from history (here at line 100): - - !100 - -Unzip to directory: - - unzip package_name.zip -d dir_name - -Multiline text (CTRL + d to exit): - - cat > test.txt - -Create empty file or empty existing one: - - > test.txt - -Update date from Ubuntu NTP server: - - ntpdate ntp.ubuntu.com - -netstat show all tcp4 listening ports: - - netstat -lnt4 | awk '{print $4}' | cut -f2 -d: | grep -o '[0-9]*' - -Convert image from qcow2 to raw: - - qemu-img convert -f qcow2 -O raw precise-server-cloudimg-amd64-disk1.img \ - precise-server-cloudimg-amd64-disk1.raw - -Run command repeatedly, displaying it's output (default every two seconds): - - watch ps -ef - -List all users: - - getent passwd - -Mount root in read/write mode: - - mount -o remount,rw / - -Mount a directory (for cases when symlinking will not work): - - mount --bind /source /destination - -Send dynamic update to DNS server: - - nsupdate < 1048576) print $7/1048576 "MB "$9 }' | sort -n -u | tail - -Show free RAM in MB: - - free -m | grep cache | awk '/[0-9]/{ print $4" MB" }' - -Open Vim and jump to end of file: - - vim + some_file_name - -Git clone specific branch (master): - - git clone git@github.com:name/app.git -b master - -Git switch to another branch (develop): - - git checkout develop - -Git delete branch (myfeature): - - git branch -d myfeature - -Git delete remote branch: - - git push origin :branchName - -Git push new branch to remote: - - git push -u origin mynewfeature - -Print out the last cat command from history: - - !cat:p - -Run your last cat command from history: - - !cat - -Find all empty subdirectories in /home/user: - - find /home/user -maxdepth 1 -type d -empty - -Get all from line 50 to 60 in test.txt: - - < test.txt sed -n '50,60p' - -Run last command (if it was: mkdir /root/test, below will run: sudo mkdir /root/test): - - sudo !! - -Create temporary RAM filesystem - ramdisk (first create /tmpram directory): - - mount -t tmpfs tmpfs /tmpram -o size=512m - -Grep whole words: - - grep -w "name" test.txt - -Append text to a file that requires raised privileges: - - echo "some text" | sudo tee -a /path/file - -List all supported kill signals: - - kill -l - -Generate random password (16 characters long in this case): - - openssl rand -base64 16 - -Do not log last session in bash history: - - kill -9 $$ - -Scan network to find open port: - - nmap -p 8081 172.20.0.0/16 - -Set git email: - - git config --global user.email "me@example.com" - -To sync with master if you have unpublished commits: - - git pull --rebase origin master - -Move all files with "txt" in name to /home/user: - - find -iname "*txt*" -exec mv -v {} /home/user \; - -Put the file lines side by side: - - paste test.txt test1.txt - -Progress bar in shell: - - pv data.log - -Send the data to server with netcat: - - echo "hosts.sampleHost 10 `date +%s`" | nc 192.168.200.2 3000 - -Convert tabs to spaces: - - expand test.txt > test1.txt - -Skip bash history: - - < >cmd - -Go to the previous working directory: - - cd - - -Split large tar.gz archive (100MB each) and put it back: - - split –b 100m /path/to/large/archive /path/to/output/files - cat files* > archive - -Get HTTP status code with curl: - - curl -sL -w "%{http_code}\\n" www.example.com -o /dev/null - -When Ctrl + c not works: - - Ctrl + \ - -Get file owner: - - stat -c %U file.txt - -List block devices: - - lsblk -f - -Find files with trailing spaces: - - find . -type f -exec egrep -l " +$" "{}" \; - -Find files with tabs indentation: - - find . -type f -exec egrep -l $'\t' "{}" \; - -Print horizontal line with "=": - - printf '%100s\n' | tr ' ' = - -**UPDATE: November 25, 2013** - --------------------------------------------------------------------------------- - -via: http://www.techbar.me/linux-shell-tips/ - -译者:[译者ID](https://github.com/译者ID) 校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file diff --git a/translated/Linux shell tips and tricks.md b/translated/Linux shell tips and tricks.md new file mode 100644 index 0000000000..ca7d929c54 --- /dev/null +++ b/translated/Linux shell tips and tricks.md @@ -0,0 +1,310 @@ +Linux sheel 贴士和技巧 +================================================================================ +我日常使用Linux shell(Bash),但是我经常忘记一些有用的命令或者shell技巧。是的,我能记住一些命令但是我不能说只在特定的任务上使用一次。那么我就开始在我的Dropbox账号里用文本文件写下这些Linux shell的贴士,现在我决定共享它。这个表我以后还会更新。记住,这里的一些贴士需要在你的Linux发行版上安装额外的软件。 + +在bash中检查远程端口是否打开: + + echo >/dev/tcp/8.8.8.8/53 && echo "open" + +终止进程: + + Ctrl + z + +将进程移到前台: + + fg + +生成随机16进制数字,n是字符的数量: + + openssl rand -hex n + +在当前shell中从一个文件中执行命令: + + source /home/user/file.name + +提取前5个字符的字串: + + ${variable:0:5} + +SSH调试模式: + + ssh -vvv user@ip_address + +带pem key的SSH + + ssh user@ip_address -i key.pem + +用wget获取完整目录列表到本地目录: + + wget -r --no-parent --reject "index.html*" http://hostname/ -P /home/user/dirs + +创建多个目录: + + mkdir -p /home/user/{test,test1,test2} + +列出带子进程的进程树: + + ps axwef + +创建war文件: + + jar -cvf name.war file + +测试磁盘写速度: + + dd if=/dev/zero of=/tmp/output.img bs=8k count=256k conv=fdatasync; rm -rf /tmp/output.img + +测试磁盘读速度: + + hdparm -Tt /dev/sda + +从文本中获取md5值: + + echo -n "text" | md5sum + +检测xml语法: + + xmllint --noout file.xml + +在新的目录中提取tar.gz文件: + + tar zxvf package.tar.gz -C new_dir + +用curl获取HTTP头: + + curl -I http://www.example.com + +修改一些文件或目录的时间戳 (YYMMDDhhmm): + + touch -t 0712250000 file + +使用wget从ftp下载: + + wget -m ftp://username:password@hostname + +生成随机密码 (本例中16位字符长): + + LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo; + +快速创建一个文件的备份: + + cp some_file_name{,.bkp} + +访问Windows共享: + + smbclient -U "DOMAIN\user" //dc.domain.com/share/test/dir + +在历史中运行命令 (这里在第100行): + + !100 + +unzip到目录中: + + unzip package_name.zip -d dir_name + +多行文字 (按 CTRL + d 退出): + + cat > test.txt + +创建空白的文件或者已存在的文件: + + > test.txt + +从Ubuntu NTP服务器上更新日期: + + ntpdate ntp.ubuntu.com + +netstat 显示所有tcp4监听的端口: + + netstat -lnt4 | awk '{print $4}' | cut -f2 -d: | grep -o '[0-9]*' + +将qcow2图像转化成raw: + + qemu-img convert -f qcow2 -O raw precise-server-cloudimg-amd64-disk1.img \ + precise-server-cloudimg-amd64-disk1.raw + +重复运行命令,显示它的输出 (默认2s刷新): + + watch ps -ef + +显示所有用户: + + getent passwd + +以读写模式挂载root: + + mount -o remount,rw / + +挂在目录 (适合于符号链接不成功的情况下): + + mount --bind /source /destination + +发送动态更新给DNS: + + nsupdate < 1048576) print $7/1048576 "MB "$9 }' | sort -n -u | tail + +以MB显示空余内存: + + free -m | grep cache | awk '/[0-9]/{ print $4" MB" }' + +打开vim并跳转到文件最后: + + vim + some_file_name + +git clone特定branch (master): + + git clone git@github.com:name/app.git -b master + +git切换到另外一个branch (develop): + + git checkout develop + +git删除一个branch(myfeature): + + git branch -d myfeature + +Git删除一个远程branch: + + git push origin :branchName + +Git push 新的branch到远程: + + git push -u origin mynewfeature + +打印history中最后的cat命令 + + !cat:p + +运行history中的最后的cat命令: + + !cat + +找出在/home/user中的所有空子目录: + + find /home/user -maxdepth 1 -type d -empty + +得到test.txt中50到60行的文本: + + < test.txt sed -n '50,60p' + +运行最后的命令 (如果是: mkdir /root/test, 下面会运行: sudo mkdir /root/test): + + sudo !! + +创建临时RAM文件系统 - ramdisk (首先创建在 /tmpram 目录): + + mount -t tmpfs tmpfs /tmpram -o size=512m + +Grep完整单词: + + grep -w "name" test.txt + +需要特权模式在一个文件后追加文本: + + echo "some text" | sudo tee -a /path/file + +列出所有的kill信号: + + kill -l + +生成随机密码 (本例中16个字符长): + + openssl rand -base64 16 + +在bash历史中不记录最后的会话: + + kill -9 $$ + +扫描网络找出打开的端口: + + nmap -p 8081 172.20.0.0/16 + +设置git email: + + git config --global user.email "me@example.com" + +如果你有未提交的commit,与master同步: + + git pull --rebase origin master + +将文件中含有txt的所有文件移动到/home/user: + + find -iname "*txt*" -exec mv -v {} /home/user \; + +一行行合并文件: + + paste test.txt test1.txt + +shell中的进度条: + + pv data.log + +用netcat发送数据给服务器: + + echo "hosts.sampleHost 10 `date +%s`" | nc 192.168.200.2 3000 + +转换tab到空格: + + expand test.txt > test1.txt + +跳过bash历史: + + < >cmd + +回到先前的工作目录: + + cd - + +切割大的tar.gz文件 (每个 100MB) 并还原: + + split –b 100m /path/to/large/archive /path/to/output/files + cat files* > archive + +用curl获取HTTP状态值: + + curl -sL -w "%{http_code}\\n" www.example.com -o /dev/null + +当 Ctrl + c 没用时: + + Ctrl + \ + +获取文件所有者: + + stat -c %U file.txt + +列出块设备: + + lsblk -f + +找出末尾空格的文件: + + find . -type f -exec egrep -l " +$" "{}" \; + +找出用tab缩进的文件: + + find . -type f -exec egrep -l $'\t' "{}" \; + +用"="打印水平行 + + printf '%100s\n' | tr ' ' = + +**更新: 2013年11月25日** + +-------------------------------------------------------------------------------- + +via: http://www.techbar.me/linux-shell-tips/ + +译者:[geekpi](https://github.com/geekpi) 校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出 \ No newline at end of file