Useful unix tricks
My current project uses macs for development and linux boxes for build and deployment. I also run linux on my personal computers, so I have learned the value of command line proficiency. Here are a few tricks that I think are worth sharing. I learned some of these on my own, and I picked up others while on this project.
Ctrl+r searches through history
Are you tired of using the up arrow to try to find old commands? Ctrl+r lets you search the history. Type Ctrl+r and start typing part of the old command. Pressing Ctrl+r again finds the next match. Once you find the one you like, just press enter to run it or the left or right arrows to modify it.
Use the history command plus !# to run old commands
Searching the history with Ctrl+r shows you old commands one at a time. Use the history command to see a list of them instead.
% history
1 cd /tmp
2 scp user@host:~/my_file .
Now, if you want to run one of those old commands, use !#. For example, to run the scp command again, type:
!2
Source command runs file in current shell
The source command is especially useful when shell config files have changed. For example:
% echo alias ls="ls -F" >> .zshrc % source .zshrc
This will run the .zshrc file in the current shell. There is no need to open a new terminal to see the changes.
Launch a shell with sudo to run multiple commands
Update (2/16/08): Use “sudo -s” instead of “sudo bash” to start a shell as root.
If you have to run multiple commands with sudo, consider just running “sudo zsh” or “sudo bash” to start a shell as root. If you have sudo rights, but cannot sudo a shell, try this: Run “sudo vi” and then type :shell to open a shell within vi.
Shell expansion using {}
% echo a{a,b,c}
aa ab ac
The {} contain a comma separated list of expansions. One common use is to back up a file. For example, the command:
cp foo.sh foo.sh.old
can be rewritten as:
cp foo.sh{,.old}
zsh is a great shell
zsh is my favorite shell, and I don’t think most people understand how great it is. Here are a few things that it can do:
Tab completion is application specific. For example, type svn and then press tab:
% svn add cleanup diff info merge propedit resolved unlock blame commit export list mkdir propget revert update cat copy help lock move proplist status checkout delete import log propdel propset switch
zsh also tab completes options. For example, type mkdir – and then press tab:
% mkdir - --context -Z -- set SELinux context --help -- display help information --mode -m -- set permission mode --parents -p -- make parent directories as needed --verbose -v -- print message for each created directory --version -- display version information
These both work for many common programs. Just remember to put the following in your ~/.zshrc file:
autoload -U compinit compinit
I also like changing my prompt to something that looks like
host:~/my/current/directory%using the following lines in my .zshrc file:
export PS1="%m:%~%# "
zsh adds a -D option to history to display how long each command took. This is helpful since I don’t have to remember to time my commands up front:
% history -D
1 0:00 cd myproject
2 0:07 rake test
The filename completion is also a little better than bash. Repeatedly pressing TAB will cycle through all completions.
Tab competion even works across scp/rsync/etc. For example, typing the first line and pressing tab will show all of the files that I can scp:
% scp paul@host:/etc/apache2/ README envvars mods-enabled/ ssl/ apache2.conf httpd.conf ports.conf svn-auth-file apache2.conf.dpkg-old magic sites-available/ webdav-auth-file conf.d/ mods-available/ sites-enabled/
However, set up ssh keys before trying this trick unless you want zsh prompting for a password on each completion attempt.
Comments
-
sudo bash sounds interesting, gonna try that.. thank you, Rakesh Gupta
-
try sudo -s instead of sudo bash
-
Unfortunately there is no audit trail or even history if you sudo bash or sudo -s. Only the sudo audit that says the user changed to bash.
-
Thanks for your site that is promising to be learning ground for me. I have currently started learning Web page Design with simple HTML and CSS. I have tried to load my files to the internet but I could not. Pls All I need is to show me how to use the scp command in uploading webpages to the net. Thanks and God bless you Ps I know this is not the purpose for creating this comment space, but i haighly need your assistance.
-
Noah, take a look at http://acs.ucsd.edu/info/scp.shtml.