8 ms·
Run last command as root
- deleted 16y ago[deleted]
- jrockway 16y agoWindmills do not work that way. Goodnight.
- chopsueyar 16y agosudo !! runs the previous line as root, in case you forgot to type sudo
- jrockway 16y agoMore like "sudo !!" prepends sudo to the last history entry and executes the result. It may not run as root, depending on the complexity of the shell handiwork you did, and depending on /etc/sudoers. I really, really, really hope that the author doesn't think "sudo !!" is some special kind of magic, and that he knows "echo !!" works the same way. Also, there are keyboards with a "Home" key? Most people just press C-a.
- joevandyk 16y agoI'd hope that most people just hit "<esc> I sudo !!<CR>".
- chopsueyar 16y agoYou said Esc-0, first.
- chopsueyar 16y agoYeah, I first tried... grep ".jpg" ^C ls | !! ...that worked too. Cool command to learn. Thanks for the clarification, though. Original article was lacking.
- hardik988 16y agoHi, I'm the author (admittedly still quite new to Unix). I did play around with the !! and realized it does a lot more. Thanks for clarifying though! Edit: Typos
- humblest_ever 16y agoIt's very powerful. There's more than just the !! for history, also. Check out http://www.catonmat.net/blog/the-definitive-guide-to-bash-command-line-history/ http://www.catonmat.net/blog/the-definitive-guide-to-bash-co... .
- xenophanes 16y agoDo you know where I can find a list of hotkeys along the lines of C-a? I personally created my own hotkey (shift left arrow) but learning standard ones would probably be good.
- jrockway 16y agoIf you use bash, read the "Command Line Editing" section of "info readline".
- telemachos 16y agoYou can also tweak the behavior of readline (for Bash and other applications) and custom make your own key combinations by editing your ~/.inputrc file. A random example from mine: # Insert double quotes & set cursor between them "\C-x\"": "\"\"\eb" # # Insert single quotes & set cursor between them "\C-x'": "''\eb" See also the Bash manual: http://www.gnu.org/software/bash/manual/bashref.html#Command-Line-Editing http://www.gnu.org/software/bash/manual/bashref.html#Command...
- pyre 16y agoMost shells default to emacs keybindings: C-a beginning of line C-k kill text from cursor to end of line C-e end of line M-b move cursor backwards by a word M-f move cursor forwards by a word C-w delete backwards by a word C-h backspace (great when real backspace doesn't work) C-r reverse search through command history (C-w works in Vim(insert mode) and Emacs, but kills me when I try to type it in a browser window to delete a word... Good-bye window and/or tab) In zsh I actually have M-w bound to the normal backspace-by-a-word and C-w bound to the vim version which will do things like count '/' as a word separator so that I can easily backspace through sections of a path rather than be required to delete the whole thing (or nothing).
- xenophanes 16y agoHmm, FYI most of those work in the safari reply box. I think Apple put them for all Cocoa text fields not just terminal :-)
- EGreg 16y agoI am just curious, what determines the front page of Hacker News? Because this post has 17 points and the one below it has 130 at this time
- jsdalton 16y agoHere's an excellent, detailed, and fairly recent explanation of the Hacker News ranking algorithm: http://amix.dk/blog/post/19574 http://amix.dk/blog/post/19574
- hardik988 16y agoFrom what I've seen (and I may be wrong here), I think the post that enters the front page stays on the top just for a short amount of time, before gradually settling down on a position determined by the time it's been there, the votes it's got and flags. The post will keep sliding down with time. Edited: Clarifying.
- joshuacc 16y agoIt is function of time, votes, and flags.
- J3L2404 16y agoI can't find the post but it is essentially: Ranking = (votes)^(1/time) with some other bells an whistles.
- rodh 16y agoOn a related note, when you want to insert something at the start of a line in a shell, rather than hitting home, I find ctrl-a to be very useful. Especially on a macbook, where cmd-left doesn't work in a shell (for some reason) and there is no home key. This often works in unexpected places. For example: testing it right now, I can click the address bar on google chrome, hit ctrl-a (not cmd-a) and the caret is at the start of the url.
- hardik988 16y agoThanks (to jrockway too), that's something new I learned today!
- js2 16y agoctrl-a (beginning of line), ctrl-e (end of line), ctrl-k (kill/copy line), ctrl-y (yank/paste line) are standard emacs keybindings. On OS X, they work in any standard NS text field as well. More at http://www.hcs.harvard.edu/~jrus/site/cocoa-text.html http://www.hcs.harvard.edu/~jrus/site/cocoa-text.html BTW, when using screen, ctrl-a is its default action key, so use ctrl-a ctrl-a to send a real ctrl-a, or change the default screen action key in your .screenrc.
- rosser 16y agoCtrl-a ctrl-a toggles between screens; ctrl-a a sends a ctrl-a sequence to the terminal.
- deleted 16y ago[deleted]
- Bootvis 16y agoIt's my understanding that these keycombo's are originally from the readline library. Other programs that have these combo's available are irrsi and bash but I love to know more!
- BrandonM 16y ago> BTW, when using screen, ctrl-a is its default action key This ends up annoying me on a regular basis. Let's say I want to make a directory and then go to it. I would type: mkdir foo<Ctrl-p><Ctrl-a><Alt-d>cd<Enter> Except when using screen, <Ctrl-a><Alt-d> (really just <Ctrl-a>d) detaches the session. It's solved easily enough ("screen -r"), but it always yanks me out of my groove.
- codejoust 16y agoSomething else really useful: mkdir stuff cd !$ !$ takes the last argument from the previous command, instead of the whole thing. chmod 664 site/* - changes the permissions for all the files in the site directory. * is a wildcard in bash for specifying directories. Another useful feature of bash is brace expansion: mv site{,-old} => mv site site-old The brace expansion expands the argument with the values in a comma separated list: college pic_00{1,4,3}.jpeg college.jpeg yields pic_001 pic_004, pic_003
- olalonde 16y ago<ALT>-. does the same thing except it prints it before you hit enter.
- metabrew 16y agoor <ESC>-. if you recently got a macbook and can't figure out how to remap the silly keyboard defaults and make alt work properly in a terminal..
- nayanshah 16y ago* is a wildcard for everything in the directory including files and directories. so the chmod will remove the execute permission from directories also.
- pyre 16y ago* will not match hidden files: > ls -a tmp file1 file2 .file3 > ls tmp/* file1 file2 > ls tmp/.* .file3
- BrandonM 16y ago* is a wildcard in general. Its behavior is identical to the .* in a regular expression.
- mrud 16y agoI have a function for it which is quite useful: mcd () { mkdir "$@" cd "$@" } Just run mcd foobar and you (try) to create the directory and enter it. IMO a nice shortcut.
- delano 16y agoThe biggest shell-related revelation for me recently was that ~ is a special character in SSH. If you have an SSH session that's hanging and ctrl-C / ctrl-D isn't responding, try typing "~." (without the quotes). man ssh | grep -A 30 tilde
- pyre 16y agoThe ~ needs to follow a newline. So I usually make sure to hit <Enter> explicitly before hitting "~." so that I don't have to repeat the sequence if it doesn't work. It would still work without hitting <Enter> explicitly if the last thing that you typed to the console was <Enter> though.
- jodrellblank 16y agoIf you have an SSH session that's hanging It's usually because I've accidentally fumbled ctrl-s which means 'play dead'. Why that's important enough to take a two-key home row shortcut, I don't know. The cure is to press ctrl-q. Same wonder about the cure.
- drewp 16y agoI can't argue for it taking such a prime spot on the keyboard, but I used c-s/c-q every day to freeze scrolling output that I want to look at. Your terminal scrollback will still work during the pause.
- hardik988 16y agoHi HN! I'm the post author, and if I would've known someone was submitting this to HN, I would've researched a bit more! This was more for my reference. Thanks for all the tips though, got to learn a lot from this thread..
- iclelland 16y agoI've always pronounced this command as "sudo make me a sandwich"
- iclelland 16y agoSeriously, though, "!!" is just a special case of Bash's history expansion man bash, and search for "^HISTORY EXPANSION" for all the details. I often find myself running commands like cp !:2 !:1 # reverses the order of the last two args cd /somedir && !! # run the last command in a better directory
- zacharypinter 16y agoI prefer Ctrl-P, Ctrl-A, "sudo ", enter It's pretty much the same number of keystrokes aside from having to hold down the Ctrl key. However, I can now go back in my history and run the command again. Also, if I mistyped something, I can easily hit Ctrl-P and fix it without having to retype sudo.
- jonhohle 16y ago!! (bang-bang) is expanded by the shell before its committed to your history (at least in bash), so if you hit ctrl+p, you'll get the full sudo command for running/modifying later.
- tjarratt 16y agoIn zsh, !! is expanded by the shell, but leaves the expanded command at the terminal, waiting for you to execute it. Most of the time this means I have to hit enter twice to run the command, but it's convenient when I want to explain to someone what !! is useful for.
- vsync 16y agoI don't have that enabled but zsh also expands bang constructs with tab. So any commands I want to double check, or if I am demonstrating to someone, I just hit tab. Also handy for expressions like !-2:3 where if I messed up I can just hit "undo" and then retry.
- zacharypinter 16y agoAh. Good to know.
- tjarratt 16y agoI've really enjoyed Ctrl+a and Ctrl+e recently to move between the beginning and end of the command prompt - it's really a lot more useful than I initially thought.
- yelkeew 16y agoI got this from a former co-worker and am now completely reliant: alias r='sudo ' Note the space after sudo in the quotes. Cuts down on keystrokes when you have to spend a lot of time sudo-ing.
- switch007 16y agoThe space isn't required with Bash :)
- wazoox 16y agoSimilarly, I always rehearse dangerous removals with ls : ls ./t* # looks good... rm !$
- mrud 16y agoHave a look at zsh, you can execute your current command as root quite easy. Put sudo-command-line() { [[ -z $BUFFER ]] && zle up-history [[ $BUFFER != sudo\ * ]] && BUFFER="sudo $BUFFER" } zle -N sudo-command-line bindkey "^Os" sudo-command-line into your zshrc, enter the command and press ctrl+o s et voila ;0 For more cool stuff regarding zsh have a look at http://grml.org/zsh/ http://grml.org/zsh/ or for other nice keybindings http://grml.org/zsh/grmlzshrc.html http://grml.org/zsh/grmlzshrc.html
- pyre 16y agozle = zsh line editor (I doesn't use read-line it has it's own line editor)
- shubber 16y agoOne of my favorite, under-known Bash tricks: Ctrl-O. "Enter current command, put next history item on command line." It works like this: You're doing 3 things over and over again, but you need to see each step finished before you want to go on. Something like: >wget buildserver/artifact.jar >java -j artifact.jar > result.txt >grep "Stupid bug" result.txt >vi config.xml >git commit -a; git push Something like that. Having done it once, up-arrow into your history to the wget, hit "Ctrl-O" and it'll execute the wget, and now the java command is ready. You can just keep cycling through with Ctrl-O, since executing the command puts it in the end of your history. If you need to update the command, the fix is available for later. One of those "use it so that you remember, 'cause boy-howdy it's handy"
- Nick_C 16y agoI never do this, I prefer to recall the actual command to see if it is correct, especially for sudo. The reason is that you might not execute the command you were thinking of. The HISTIGNORE variable contains a quasi-regex of commands that are not stored in history. If the previous command matched that regex, you will end up executing the previous command to that one, not what you wanted at all. Why use HISTIGNORE?. So that things like 'exit' or common commands like 'ls' don't pollute your history file.