This is not a post from the series of those describing the cd command. It's just a list of commands and tricks I'm using (almost) every day.
Port forwarding
Sometimes I have to connect to database and of course I prefer to use my GUI manager (JetBrains DataGrip).
So, if security policy exist in your company and your database's port is not exposed you can execute
ssh -L{port on your PC}:localhost:{database's port} root@{server IP}
The command below will open port 3308 on your laptop and everything will be forwarded to 192.168.1.2:3306
ssh -L3308:localhost:3306 root@192.168.1.2
localhost means that database is listening on 192.168.1.2. You can type for example 192.168.3.77 and everything will be forwarded to .3.77 server via .1.2.
Edit file in VIM without sudo, but save with sudo
Have you ever edited some configs file and forgot to sudo? Me too... There is a trick to save the file anyway, just type in VIM:
:w !sudo tee %
Go to beggining/end of line in terminal
If you wrote a very long command in the terminal it may take a long time before you return to the begging of the line to add missing sudo. And back to the end to add some parameters.
Press crtl + a to move to the begging and crtl + e to the end of the line in terminal.
ll
Save few days in a year by typing ll instead of ls -la. Works on most Linux servers.
Execute command you executed in the past
Last command
To execute last command over again you can of course press ↑ (arrow up) key. But you can also type !!. So executing last command as a root is very easy
sudo !!
To run the last command that started with apt type !apt
Search history
To find the command that contains /tmp you have executed in the past press ctrl + r and type /tmp. Press ctrl + r again for next result.
To show all commands or to search using regular expression use
history | grep "/tmp"
Agree for everything
To say yes for each question you can use application called yes
yes | yum install curl
use yes no to say no and discard.
WARNING
As @patricnox
notices in the comment - using yes may do unexpected things. You can accidentally install 10 GB of dependencies or other things you don't want to do.
Run a long-lasting process in the background and close the terminal
If you run a script that will end in 3 days, you don't have to wait with the terminal window open to end. You can run it using nohup command
nohup wget http://large-files.com/10gb-super-movie.avi &
wget works in the background, output is saved to nohup.out file in working directory.
Checking who has stolen your favourite port
It's really annoying when you are trying to run nginx but you can't because there is already apache running and port 443 is busy.
So, how to determinate which process is listening on port 80:
$ netstat -tulpn | grep 80
tcp6 0 0 :::80 :::* LISTEN 10177/java
10177 is a pid you are looking for. Now execute
ps aux | grep 10177
for more details.
Reading logs
Everyone knows that less is a very good way to read a logs files. But you can also read gziped logs without extracting!
less /var/log/my-app/my-app.log.2015.12.14.gz
Live reading
tail -f /var/log/my-app/my-app.log | grep ERROR
The command above will show only new lines that contains ERROR.
Sort process
Show top 3 processes sorted by CPU usage
ps aux --sort=-pcpu | head -n 4
Show top 3 processes sorted by memory usage
ps aux --sort=-rss | head -n 4
Executing command every X seconds
To print command's output every X seconds you can use watch command. For example to create clock run
watch -n 1 date
Quiet mode
A lot of standards commands has quiet or silent mode. Very useful when you are creating some bash script. In most of the cases just add -q or -s (read --help or man or check on StackOverflow)
zip -q archive.zip big-file.jpg
But sometimes (practically always with in-house scripts) you have to ignore the output (send to /dev/null)
./very-verbose.sh 1>/dev/null
Create log files for scripts executed by crontab
0 22 * * 1-5 /opt/scripts/send-report.sh 2>/var/log/scripts/report-error.log
So next time when your script will fail you won't lose the reason
Oldest comments (44)
Working with drush, the last one is very neat!
I have a concern regarding "Yes". I find it a bad idea to use this since what if you encounter a new tool? Maybe you install something and Yes makes it install, or maybe skip, dependencies that's crucial to have/not have in the project
(Vague example scenario, but you get the point!)
Yup, you are right.
yesprogram may do unexpected thing, but sometimes you do know the script very well and you know all the questions.Maybe I should change the example and add some warning
Thanks, PatricNox! I've added little warning in the post
A lot of commands take a
-yflag too.If you're particularly concerned about it doing something you don't want, you can use an
expectscript instead. It's kind of like selenium for the command line.Yep! I tend to use the y flag.
Magic, right in your command line! ✨
Thanks for sharing these.
Omfg the yes command. Love that one
If you're using port forwarding for DayaGrip, you can use the connection settings dialog to set it directly (through the ssh tab).
Lol, you're right, I've missed that feature. Anyway it's still useful for Kibana or other services that are not exposed publicly.
You have a typo:
"jut type in VIM" should say "just type in VIM" :)
Fixed, thanks!
I'm a huge fan of one-liners and simple hacks, these are great! I'm going to start using the vim and sudo one immediately.
If you've a common SSH login with sudo (shouldn't be the case mostly), do be careful with !! as you could end up running a potentially dangerous command in a hurry.
You could use
sudo lsof -i :80to identify which app is taking up a port instead ofnetstat&psAlso
zlessto view gzipped logs without extraction &wget -c URLto retry downloads in case of issues.If you have to telecommute, and your company's vpn connection is sh*tty, and they don't allow you to ssh in, reverse ssh tunneling is your friend:
thegeekstuff.com/2013/11/reverse-s...
Also a good way to get your security team grumpy with you ;) Outbound SSH from prod sets off about a dozen alarm bells for us. Talking to your manager or DevOps team member is another option for addressing rough inbound access :)
If you're editing config files with vim and need to use that sudo tee hack, stop.
You should be using
sudoedit. It safely copies the config to /tmp and runs$EDITORas your regular user with your user config, and only overwrites the file you're editing if you actually save. This is far more desirable than running your editor as root.Very good point, I think that we should never use sudo vim.
Those are great tips.
In the terminal, one trick I like is going back to previous folder with
(that is a minus sign)
Say, you are in
/var/logsand youcd /data/dev/myproject, then you can go back to logs withcd -.Useful in some situations only, but quite handy nonetheless.