Top 10 bash skills to improve Linux Efficiency
I like to delve into the bash environment. Many times, in bash programming, some problems are repeated over and over again. Every time I have to rethink how to solve these problems. One day I couldn't bear it, so I sat down and wrote a general function, put it into my. bashrc file, and deployed it on my computer.
I hope that my efforts to maximize the efficiency of the command line can also help other friends who like to use bash. My larger expectation is that this kind of behavior can lead to interaction among other friends-provide me with suggestions and better bash skills. Please leave a message to discuss it later, or leave a message in @ programmer's field of view.
Let's not talk about anything more. The following is my summary.
Tip 1: Use the command line to add text to the top of the file
Every time I search for the command again. The following describes how to use sed to add a row to the top of a file:
sed -i '1s/^/line to insert\n/' path/to/file/you/want/to/change.txt
Tip 2: Use command lines to insert multiple lines of text into the configuration file
This method is very simple and many people know how to insert multiple lines of text into a file using command lines (>. Here we use the "here document" syntax, which allows you to insert a paragraph into a File using a block text symbol. Generally, we use an EOF (meaning "End Of File "):
cat >> path/to/file/to/append-to.txt << "EOF"export PATH=$HOME/jdk1.8.0_31/bin:$PATHexport JAVA_HOME=$HOME/jdk1.8.0_31/EOF
All content between two "EOF" is added to the file.
Tip 3: Use command line recursion to search for and replace directory files globally
If you use Eclipse, ItelliJ, or other IDE, the powerful refactoring capabilities of these tools may make it easy to implement many things. However, I guess many times you do not have such integrated tools in your development environment.
How can I use the command line to Recursively search and replace a directory? Don't think about the Perl language. You can use find and sed. Thanks to the guidance provided by Stack Overflow:
# OSX versionfind . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +
After using it for a while, I wrote out a function and added it to. bashrc, as shown below:
function sr { find . -type f -exec sed -i '' s/$1/$2/g {} +}
You can use it like this:
sr wrong_word correct_word
Tip 4: Use the command line to open a temporary file in vim and Dropbox
I used to like to use scratch facility in Emacs. Vim is often used to quickly create temporary files. The following two functions generate a random string using openssl as the file name:
function sc { gvim ~/Dropbox/$(openssl rand -base64 10 | tr -dc 'a-zA-Z').txt}function scratch { gvim ~/Dropbox/$(openssl rand -base64 10 | tr -dc 'a-zA-Z').txt}
In the command line window, entersc
Orscratch
A new gvim or macvim window will pop up, and a temporary file with a random file name will be loaded.
Tip 5: Use command lines to download files, including link redirection, HTTPS, and secure encryption.
Download a page and output it to the terminal. Follow the link to redirect and ignore security exceptions:
curl -Lks <some-url>
Download a link and follow the link to ignore security exceptions:
curl -OLks <some-url/to/a/file.tar.gz>
Many parameters are used here. You can read this simple curl document to learn about them.
Tip 6: Bashmarks
Haven't you used bashmarks in. bashrc? What are you waiting? It is really useful. It helps you maintain historical operations and jump back to your frequently used directory. The following is a script in my configuration file, but I think the above link provides you with more tips:
# USAGE:# s bookmarkname - saves the curr dir as bookmarkname# g bookmarkname - jumps to the that bookmark# g b[TAB] - tab completion is available# l - list all bookmarks# save current directory to bookmarkstouch ~/.sdirsfunction s { cat ~/.sdirs | grep -v "export DIR_$1=" > ~/.sdirs1 mv ~/.sdirs1 ~/.sdirs echo "export DIR_$1=$PWD" >> ~/.sdirs}# jump to bookmarkfunction g { source ~/.sdirs cd $(eval $(echo echo $(echo \$DIR_$1)))}# list bookmarks with dirnamfunction l { source ~/.sdirs env | grep "^DIR_" | cut -c5- | grep "^.*="}# list bookmarks without dirnamefunction _l { source ~/.sdirs env | grep "^DIR_" | cut -c5- | grep "^.*=" | cut -f1 -d "="}# completion command for gfunction _gcomp { local curw COMPREPLY=() curw=${COMP_WORDS[COMP_CWORD]} COMPREPLY=($(compgen -W '`_l`' -- $curw)) return 0}# bind completion command for g to _gcompcomplete -F _gcomp g
Tip 7: extract a column from formatted output (the most frequently used awk Technique)
I use it almost every day. True. There are often some outputs. I only need the second or third columns. The following command can do this:
#Sample output of git status -s command:$ git status -sM .bashrc?? .vim/bundle/extempore/# Remove status code from git status and just get the file names$ git status -s | awk '{print $2}'.bashrc.vim/bundle/extempore/
Why don't we write a function that we can use at any time?
function col { awk -v col=$1 '{print $col}'}
This makes it very easy to extract columns. For example, you don't want the first column? Simple:
$ git status -s | col 2.bashrc.vim/bundle/extempore/
Tip 8: Ignore the first x words
I'm fascinated by xargs, and I feel like a knife. However, sometimes you need to adjust the result obtained by using it, and you may need to obtain some values. For example, you want to remove some information in the following file image:
function skip { n=$(($1 + 1)) cut -d' ' -f$n-}
Here is how to use it:
- Use docker images to get the following output:
$ docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE<none> <none> 65a9e3ef7171 3 weeks ago 1.592 GB<none> <none> 7c01ca6c30f2 3 weeks ago 11.1 MB<none> <none> 9518620e6a0e 3 weeks ago 7.426 MB<none> <none> 430707ee7fe8 3 weeks ago 7.426 MBboot2docker/boot2docker latest 1dbd7ebffe31 3 weeks ago 1.592 GBspaceghost/tinycore-x86_64 5.4 f47686df00df 7 weeks ago 11.1 MBdurdn/bithub latest df1e39df8dbf 8 weeks ago 100.9 MB<none> <none> c5e6cf38d985 8 weeks ago 100.9 MBnginx latest e426f6ef897e 12 weeks ago 100.2 MBzoobab/tinycore-x64 latest 8cdd417ec611 8 months ago 7.426 MBscratch latest 511136ea3c5a 20 months ago 0 B
- Using the above function, you can obtain all IDs:
$ docker images | col 3IMAGE65a9e3ef71717c01ca6c30f29518620e6a0e430707ee7fe81dbd7ebffe31f47686df00dfdf1e39df8dbfc5e6cf38d985e426f6ef897e8cdd417ec611511136ea3c5a
docker images | col 3 | xargsIMAGE 65a9e3ef7171 7c01ca6c30f2 9518620e6a0e 430707ee7fe8 1dbd7ebffe31 f47686df00df df1e39df8dbf c5e6cf38d985 e426f6ef897e 8cdd417ec611 511136ea3c5a
- However, I also want to remove the preceding "IMAGE" character:
docker images | col 3 | xargs | skip 165a9e3ef7171 7c01ca6c30f2 9518620e6a0e 430707ee7fe8 1dbd7ebffe31 f47686df00df df1e39df8dbf c5e6cf38d985 e426f6ef897e 8cdd417ec611 511136ea3c5a
- The complete writing is as follows:
docker rmi $(docker images | col 3 | xargs | skip 1)
Tip 9: Create your own command package
In bash, you can easily create your own command components. You can see what I wrote in bash:
function dur { case $1 in clone|cl) git clone git@bitbucket.org:nicolapaolucci/$2.git ;; move|mv) git remote add bitbucket git@bitbucket.org:nicolapaolucci/$(basename $(pwd)).git git push --all bitbucket ;; trackall|tr) #track all remote branches of a project for remote in $(git branch -r | grep -v master ); do git checkout --track $remote ; done ;; key|k) #track all remote branches of a project ssh $2 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub ;; fun|f) #list all custom bash functions defined typeset -F | col 3 | grep -v _ | xargs | fold -sw 60 ;; def|d) #show definition of function $1 typeset -f $2 ;; help|h|*) echo "[dur]dn shell automation tools" echo "commands available:" echo " [cl]one, [mv|move]" echo " [f]fun lists all bash functions defined in .bashrc" echo " [def] <fun> lists definition of function defined in .bashrc" echo " [k]ey
Through the above script, I can copy the ssh key to any website server-just type the dur key
User @ somehost.
Summary
You can try my. bashrc file, or you can write one by yourself. Do you have more skills? Please write in the following comments or send a private message to @ programmer's field of view. We look forward to hearing from you.
Bash logon and welcome information:/etc/issue,/etc/motd
Several common configuration files in Bash
Bash script 15-minute advanced tutorial
Job control instances of Bash and KSH shell in 10 Linux/Unix
Abnormal shell script running in Ubuntu: difference between Bash and dash
Bash script for statement if statement and various test statements
What is the Bash Shell build in command?
Share useful bash aliases and functions
This article permanently updates the link address: