@@anneonyme6819 I have noticed something with Tmux, if you use clear : you cannot scroll back when in copy mode of tmux, But if you use Ctrl + L: you can scroll back. both 'clear' and 'Ctrl + L' clear the screen, but there is difference in scrolling behaviour.
I love these kind of videos. I did not know the !! One but for the most part I just use the up arrow key to traverse the history and make edits as needed. And I use ctrl+r even more
Another way to keep track of previous directories is to use "pushd" and "popd". For example, if you're in directoryA and you want to go to directoryB, but you need to remember directoryA, use "pushd directoryB" To go back to directoryA, simply use "popd"
That's pretty clever. Apparently, and I've only just found out by searching around for this, but you can use "dirs -l to show the directories you've added to your pushd stack. And that's a clever way to mark directories you're in like ```pushd .``` then move to your new directory, and say you want to copy something to the old directory, you can do it like this: ```cp ./ded.jpg "$(dirs -l +0)"``` (assuming the directory you had put into the pushd stack was the only one and therefore entry/index 0). Definitely doing to take me some time to get used to, but might be very powerful indeed. EDIT: Instead of something as bulky as "$(dirs -l +0)" one can just use the simple ~0 in the given example, as that refers to index 0 of the directory stack. Much easier to do ```cp ./file ~0```.
cd - is a great trick. Thanks man! . Another time saver is to use reverse-i-search to cycle through commands' history. Ctrl + r, then type any keyword from your command. Ctrl + r to continue the cycle backward, and Ctrl + b to exit.
hijacking ur comment to say he should do video of reasonable depth/thoroughness on reverse shells ("accessing remote devices through NAT or other obstacle") using the applications nc, socat, stty, python/ruby/perl/php/bash, openssh or dropbear, and payload tools or execution methods like buffer overflow or library injection in programs that already happen to be running that can sometime s streamline this when you don't have time to install a bunch of extra crap just to manage remotely
Damn, the ^text^correction thing is great, I'm a Linux noob and been using Manjaro for 3 months now and was totally unaware of that. Also recently found the !! thingy but didn't know it can cycle through the history like that. Thanks!
To see all your commands, don't need to open a file, just type 'history' and if you look for a command in particular: 'history | grep commmand'. To navigate inside a long line of command, bash knows emacs' short cuts.
As I still didn't get around to focusing enough on vi(m) or emacs to memorize their commands, that's not super helpful. But MOST terminals allow me to navigate between words by just pressing shift while using the arrow keys, which gets me most of the way there.
7:18 This kind of cleverness can get dangerous, though. What if it substitutes the wrong thing? Beyond a certain point, you would really like the option of confirming what it is going to do, before doing it. Found a fix: do “shopt -s histverify”, then instead of immediately executing the substitution, it presents it to you in the readline buffer, so you can edit it before pressing Enter to execute the result.
It would really suck if some hacker guy modified you history to have sudo rm -rf /* exactly where the command you need is, so that would be helpful in that case
5:53 There is also a generalization of this. Whereas !«str» selects the last command beginning with «str», you can use !?«str»? to match the last command containing «str» somewhere in it. You can put spaces in «str», too.
Just found out that typing out "clear" actually clears the screen, while doing Ctrl+L just moves the prompt down and you can still scroll up to see what happened last. Could be useful, but I usually hate doing keyboard shortcuts with both of my hands (idk why lol), so I prefer to actually type out "clear" instead.
I've been trying to get as much info on linux as i can since I plan in getting a computer and installing Linux to it and your videos have been a godsend with how much I've learned
It's pretty amazing how painful it is to go back to GUIs sometimes. Having to figure out a complicated user interface to do something that you could easily do in the shell is infuriating. Very common with installers. Installing a lot of distributions just made me wish I could use the shell like in Arch or Gentoo or anything else like that.
Your videos are awesome Kenny, always quality videos. I wonder how you even manage to upload that good of videos in such a small time intervals. I just wanted to thank you for what you are doing and have been doing, and for being in YT like a crown jewel.
About the history I prefer to use arrow keys and then CTRL+A to prepend sudo, if I need to change an old command I search it with CTRL+R, and that is it. I use almost everything on this video and a little more
a great trick that i love also is to use !$ for the last string of the last command, you can either recicle arguments from the last command with !:2 example: $ touch meme mental outlaw youtube $ vim !:3 vim !:3 = vim outlaw (and is also a kawaii face)
I've been using this ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4 for cutting downloaded videos. It saved me literal hours, rendering would take a lot of time Also you can use ` (not ') in order to run a command on the result of `command`. For example, ls `pwd` will be executed as ls /home/user CTRL+R is sometimes useful, too - it brings up the search in previous executed commands
I did learn some of those tricks not too long ago. like ```history | grep -i vim``` for example, and if the command you were looking for had the number 504 then do like ```!504:p``` (or run it without the :p) to print it, and using Kenny's trick there you could do ```^updoot^date``` to correct a command so it fit with what you need. It has become a handy tool. A function I personally like, growing up with DOS is ```list(){ ls -hAvog --color --group-directories-first $*|less -FRi;}``` (not able to make it an alias because of the $*) - less of a cool trick, just felt like sharing since I'm discovering how powerful the CLI is.
6:29 The default in readline is to use Emacs key bindings. So rather than switching to Vim key bindings, you can use Alt-B to move back a word, or Alt-F to move forward a word. Unfortunately this doesn’t work so well with GNOME terminal, because Alt-F there brings up the File menu. Other terminal apps don’t seem to have this problem.
With vim mappings in your command line (`set -o vi`), you can hit ‘v’ in “normal” mode to edit what you've typed so far in actual Vim. Saving and quitting from Vim (`ZZ`) executes.
Really useful video, thanks! I really enjoy using the utility called The Fuck to fix misspelled commands, but now I know the straightforward way of doing this
u should do video of reasonable depth/thoroughness on reverse shells ("accessing remote devices through NAT or other obstacle") using the applications nc, socat, stty, python/ruby/perl/php/bash, openssh or dropbear, and payload tools or execution methods like buffer overflow or library injection in programs that already happen to be running that can sometime s streamline this when you don't have time to install a bunch of extra crap just to manage remotely
Ctrl+r opens reverse search is better than !! actually shows you want commands you're running. I see problems with using !word because if you had a more recent one which you don't want. That is why I prefer ctrl+r
Ctrl+A: Move cursor to beginning of line. Ctrl+U: Delete all text to left of cursor. Even my boss didn't know that one haha. Particularly useful when entering a password in terminal and you know you fudged a character, just ctrl+u and start over.
Apparently, the default mappings are emacs-style. I'm a Vim user though, so I use the Vim mappings (set -o vi). The (exact) equivalents (composed from how Vi's composable commands work) are `I` and `c0`, respectively.
Also, !$ is a godsend. Ex. > chmod +x file.sh > sh $! (runs "sh file.sh) It takes the last word of the previous command. > touch file1 file2 > rm !$ (file2 removed)
$_ will give you whatever the last argument of the previous command was, i find it really useful for going into a directory i just moved or copied to or going back and forth mv some/file other/dir cd $_ puts you at dir
@ali b Ah, that sounds pretty handy actually but it unfortunately doesn't seem to work with zsh's vi mode enabled since alt plus any key runs that key in vi's normal mode
One of the biggest things that I dislike about the command line is that when selecting all text with CTRL+A and then hitting the left arrow key, it doesn't actually bring you to the beginning, just one letter to the left of the end of whatever you typed in there. I have a muscle memory built up for this for other things, but unfortunately it doesn't transfer over to the terminal, otherwise I'd be able to add in sudo to an already typed command pretty fast without having to learn anything new. Oh well.
Same here dual booted windows, using windows majorly for the Adobe Suite, MASM(Its the part of our assembley course) rest everything can be done smoothly and efficiently on linux
WSl2 (Windows Subsystem for Linux) might help you cope on Windows. You can get lesser known distros running without issues in addition to the popular ones, and systemd support can be enabled with a few tweaks. GPU support still needs an 'insider'/preview build IIRC. VcXsrv and PulseAudio server on Windows can route GUI apps, desktop environments and audio if needed. Also, what exactly is so appealing about Gentoo specifically? What makes it 'more' configurable/extensible than other minimalist distros like say... Arch, Void, etc. I was planning to install NixOS on my next machine since it handles package & dependency management in a better way than most distros for me. Not being rhetorical since I'm only vaguely familiar with Gentoo. I got put off by the idea of having to wait for compilation as part of the default package installation method. Would build times be an issue on a modern 32 GB/hexa-core machine?
Ctrl+R can basically replace all those ! bash history tricks. I'd avoid any ! tricks because the command is not printed out in front of you. Imagine rm -rf . was one of them and you just forgot.
I've customized my prompt to show the current command's (future) history number, e.g. `[!23] >`. I've done the same thing in powershell, which uses the alias ‘r’ instead of a bang, e.g. `[r 23] >`.
Interestingly I never used any of these. To be fair as far as time saves go, instead of typing "sudo !!" you can just arrow up > home and type "sudo " which on US keyboard layout requires less keystrokes. As for moving between words, you can also use ctrl+arrow left /right, this works pretty much everywhere outside of vim. I use it a lot in general from typing youtube comments to shell.
4 am and watching shell tricks to save time is literal mood
0:30 here and I definitely need this
3am here :(
3am for me...
4 am 😎
It's 3:44 😢
Another time saver: Ctrl+L instead of typing clear every time.
and Ctrl+d instead ot "exit"
that only scrools down up to the point you dont see last commands
@@fred-2.7182 it is possible to use Ctrl+L in Bash vi-mode by pressing Esc first
Too late, it is now faster to type clear rather than Ctrl+L in my case
@@anneonyme6819 I have noticed something with Tmux, if you use clear : you cannot scroll back when in copy mode of tmux, But if you use Ctrl + L: you can scroll back.
both 'clear' and 'Ctrl + L' clear the screen, but there is difference in scrolling behaviour.
Ah yes, it's 3;20 AM and I'm listening to this to fall asleep.
glad im not the only one
@@boytherius lol same here
07;06AM no sleep, only the cli and me
..lol ..Learning ..On the toilet..,. . 🤔 but maybe that's too much sharing...🙄....
Oh well...
@@pear7828 why are you this way
"touch cat"
I would personally alias this to "pet cat"
aww
man touch > balls
It scares me that I knew all of these already.
>cd .. to go back a folder
I knew that
>sudo !! to do the last command as sudo
WAIT WHAT
I just ctrl+a
I just use arrows
Or when you forget -rf on the rm command you just !! -rf
cd without anything will take you to your home folder.
Is !! zsh specific or something? Bash can't do anything with it. Or is there a alias to set?
I love these kind of videos.
I did not know the !! One but for the most part I just use the up arrow key to traverse the history and make edits as needed.
And I use ctrl+r even more
Another way to keep track of previous directories is to use "pushd" and "popd".
For example, if you're in directoryA and you want to go to directoryB, but you need to remember directoryA, use "pushd directoryB"
To go back to directoryA, simply use "popd"
That's pretty clever. Apparently, and I've only just found out by searching around for this, but you can use "dirs -l to show the directories you've added to your pushd stack. And that's a clever way to mark directories you're in like ```pushd .``` then move to your new directory, and say you want to copy something to the old directory, you can do it like this: ```cp ./ded.jpg "$(dirs -l +0)"``` (assuming the directory you had put into the pushd stack was the only one and therefore entry/index 0).
Definitely doing to take me some time to get used to, but might be very powerful indeed.
EDIT: Instead of something as bulky as "$(dirs -l +0)" one can just use the simple ~0 in the given example, as that refers to index 0 of the directory stack. Much easier to do ```cp ./file ~0```.
cd - is a great trick. Thanks man!
.
Another time saver is to use reverse-i-search to cycle through commands' history. Ctrl + r, then type any keyword from your command. Ctrl + r to continue the cycle backward, and Ctrl + b to exit.
this is a very cool Christmas gift
appreciated
hijacking ur comment to say he should do video of reasonable depth/thoroughness on reverse shells ("accessing remote devices through NAT or other obstacle") using the applications nc, socat, stty, python/ruby/perl/php/bash, openssh or dropbear, and payload tools or execution methods like buffer overflow or library injection in programs that already happen to be running that can sometime s streamline this when you don't have time to install a bunch of extra crap just to manage remotely
Damn, the ^text^correction thing is great, I'm a Linux noob and been using Manjaro for 3 months now and was totally unaware of that. Also recently found the !! thingy but didn't know it can cycle through the history like that. Thanks!
To see all your commands, don't need to open a file, just type 'history' and if you look for a command in particular: 'history | grep commmand'.
To navigate inside a long line of command, bash knows emacs' short cuts.
And Ctrl+r to search the history
Or vi mode
As I still didn't get around to focusing enough on vi(m) or emacs to memorize their commands, that's not super helpful.
But MOST terminals allow me to navigate between words by just pressing shift while using the arrow keys, which gets me most of the way there.
7:18 This kind of cleverness can get dangerous, though. What if it substitutes the wrong thing? Beyond a certain point, you would really like the option of confirming what it is going to do, before doing it.
Found a fix: do “shopt -s histverify”, then instead of immediately executing the substitution, it presents it to you in the readline buffer, so you can edit it before pressing Enter to execute the result.
It would really suck if some hacker guy modified you history to have sudo rm -rf /* exactly where the command you need is, so that would be helpful in that case
5:53 There is also a generalization of this. Whereas
!«str»
selects the last command beginning with «str», you can use
!?«str»?
to match the last command containing «str» somewhere in it. You can put spaces in «str», too.
You can also use Ctrl + l to clear the terminal instead of the clear command
Just found out that typing out "clear" actually clears the screen, while doing Ctrl+L just moves the prompt down and you can still scroll up to see what happened last. Could be useful, but I usually hate doing keyboard shortcuts with both of my hands (idk why lol), so I prefer to actually type out "clear" instead.
UA-camrs type clear so viewers know what's happening. Others display the keyboard shortcuts.
9:24 _and look, we got a nice little Stallman there_ Xd
I've been trying to get as much info on linux as i can since I plan in getting a computer and installing Linux to it and your videos have been a godsend with how much I've learned
It's pretty amazing how painful it is to go back to GUIs sometimes. Having to figure out a complicated user interface to do something that you could easily do in the shell is infuriating. Very common with installers. Installing a lot of distributions just made me wish I could use the shell like in Arch or Gentoo or anything else like that.
Your videos are awesome Kenny, always quality videos. I wonder how you even manage to upload that good of videos in such a small time intervals. I just wanted to thank you for what you are doing and have been doing, and for being in YT like a crown jewel.
i think chaining and automation is more like a reason to use cli, instead of gui, rather than stability and consistency across distros.
About the history I prefer to use arrow keys and then CTRL+A to prepend sudo, if I need to change an old command I search it with CTRL+R, and that is it. I use almost everything on this video and a little more
I watched this in MPV originally, but that ! trick has already come in useful so commenting for the algorithm.
a great trick that i love also is to use !$ for the last string of the last command, you can either recicle arguments from the last command with !:2
example:
$ touch meme mental outlaw youtube
$ vim !:3
vim !:3 = vim outlaw (and is also a kawaii face)
Learned lots of things. I used to do Ctrl+a for adding sudo before.
I've been using this ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
for cutting downloaded videos. It saved me literal hours, rendering would take a lot of time
Also you can use ` (not ') in order to run a command on the result of `command`. For example, ls `pwd` will be executed as ls /home/user
CTRL+R is sometimes useful, too - it brings up the search in previous executed commands
Okay, there was a response about using $(...) instead of `...`, but I can't see it now. Thank you, stranger. You live, you learn
Another tip: To exit vim: instead of :wq, use Shift+ZZ
I did learn some of those tricks not too long ago. like ```history | grep -i vim``` for example, and if the command you were looking for had the number 504 then do like ```!504:p``` (or run it without the :p) to print it, and using Kenny's trick there you could do ```^updoot^date``` to correct a command so it fit with what you need.
It has become a handy tool. A function I personally like, growing up with DOS is ```list(){ ls -hAvog --color --group-directories-first $*|less -FRi;}``` (not able to make it an alias because of the $*) - less of a cool trick, just felt like sharing since I'm discovering how powerful the CLI is.
Thank you for the viable info on bash tricks that gets me more stuck to linux. I'm one year old xubuntu user on a daily basis. Merry Christmas.
6:29 The default in readline is to use Emacs key bindings. So rather than switching to Vim key bindings, you can use Alt-B to move back a word, or Alt-F to move forward a word.
Unfortunately this doesn’t work so well with GNOME terminal, because Alt-F there brings up the File menu. Other terminal apps don’t seem to have this problem.
same with vim, alt key is basically escape key combine with motion you want to perform
Oh yeah. It's Christmas today. I was wandering why youtube is lacking new content today.
one of my favorite is "fc" allows you to edit last command in editor and then run it.
Ctrl+x, ctrl+e
With vim mappings in your command line (`set -o vi`), you can hit ‘v’ in “normal” mode to edit what you've typed so far in actual Vim. Saving and quitting from Vim (`ZZ`) executes.
First actually helpful bash tricks video!
10:10 you can also use `popd` and `pushd`!
I found out that `pushd` with no argument cycles through your built-up stack. Powershell actually has named stacks.
I leaned a couple of tricks (the caret and thr last visited dir). Great content, thanks!
arrows are also useful for scrolling up and down previous commands
Really useful video, thanks! I really enjoy using the utility called The Fuck to fix misspelled commands, but now I know the straightforward way of doing this
This video is pure gold
This is pretty dope. Marry Christmas brother.
Some really nice tips, thanks!
This video will save me literally hours. Thank you!
Merry christmas Kenny!
Whoa, I had no idea about these.
! is amazing , as well as ^^. Thanks!
Greetings from Serbia. :)
u should do video of reasonable depth/thoroughness on reverse shells ("accessing remote devices through NAT or other obstacle") using the applications nc, socat, stty, python/ruby/perl/php/bash, openssh or dropbear, and payload tools or execution methods like buffer overflow or library injection in programs that already happen to be running that can sometime s streamline this when you don't have time to install a bunch of extra crap just to manage remotely
Ctrl+r opens reverse search is better than !! actually shows you want commands you're running. I see problems with using !word because if you had a more recent one which you don't want. That is why I prefer ctrl+r
Another common but useful tip : making aliases
I had no idea about "cd -", pretty cool stuff
Ctrl+A: Move cursor to beginning of line.
Ctrl+U: Delete all text to left of cursor. Even my boss didn't know that one haha. Particularly useful when entering a password in terminal and you know you fudged a character, just ctrl+u and start over.
Apparently, the default mappings are emacs-style. I'm a Vim user though, so I use the Vim mappings (set -o vi). The (exact) equivalents (composed from how Vi's composable commands work) are `I` and `c0`, respectively.
Merry Christmas man
Thanks those were some helpful tips. Merry Christmas btw :D
why do i love this thumbnail
"Let's take a look at my bash history" words never to be heard spoken by anyone.
The whole ^ thing is new to me, good thing to know. Now I'll just have to remember to actually make use of these time savers :p
Please do a full pacman guide. I've only used Debian and Ubuntu based distros and only know apt-get, but I'm switching to Manjaro.
Luckily, ArchWiki already have a page for the pacman, so maybe he won't need to make a video about it!
2:20: Don't use ^Z to abort, use ^C.
Or if you must use ^Z (to suspend), run fg (to resume) when you're done.
ctrl+l (thats lowercase L) clears the screen like the clear command
instead of !v you can do ctrl+r then v
instead of cd ~ you can just do cd
Hey! I posted a suggestion on how to become a bash wizard! This is it! Thank you!
!! is slower than which does the same thing, but it's useful if you dont have the Up-Enter combo available
or ctrl-p ctrl+j if you don't wanna move your right hand
sure i will, this tricks actually are heavy useful
Damn, that's awesome, didn't know these. Thanks!
Also, !$ is a godsend. Ex.
> chmod +x file.sh
> sh $!
(runs "sh file.sh)
It takes the last word of the previous command.
> touch file1 file2
> rm !$
(file2 removed)
This is why I do a regex tutorial weekly, just so I don't forget for powerful it is
$_ will give you whatever the last argument of the previous command was, i find it really useful for going into a directory i just moved or copied to or going back and forth
mv some/file other/dir
cd $_
puts you at dir
@ali b Ah, that sounds pretty handy actually but it unfortunately doesn't seem to work with zsh's vi mode enabled since alt plus any key runs that key in vi's normal mode
Thank you man, very cool!
In vim, we use the . (dot) to run the last command, I was looking for a bash equivalent. Where have you found these gems?
Thanks, Useful video!
*neofetch shows pacman packages on gentoo*
me: wait
He made a vid abt installing pacman on gentoo
You forgot Ctrl-R. It's even bigger superpower ;)
Ctrl-L is a shortcut to clear the terminal. No need to type clear every time
Depends on the terminal but yes by default URXVT that will work.
Thanks man, Great Stuff
Merry Christmas 🎄
using ssh configs in ~/.ssh/config is one of the best timesavers
I k n o w.
Not using ssh config + publickey authenication is just dumb
One of the biggest things that I dislike about the command line is that when selecting all text with CTRL+A and then hitting the left arrow key, it doesn't actually bring you to the beginning, just one letter to the left of the end of whatever you typed in there. I have a muscle memory built up for this for other things, but unfortunately it doesn't transfer over to the terminal, otherwise I'd be able to add in sudo to an already typed command pretty fast without having to learn anything new. Oh well.
another trick: if you want to put the last argument of you last command, use !$.
Example:
mkdir test
cd !$
Merry Christmas fren
Ctrl+a Ctrl+k if you want to delete the command in terminal. Saves me lots of time.
I miss linux so fucking much but I need windows for university! I honestly think Gentoo is the best operating system ever made.
Same here dual booted windows, using windows majorly for the Adobe Suite, MASM(Its the part of our assembley course) rest everything can be done smoothly and efficiently on linux
WSl2 (Windows Subsystem for Linux) might help you cope on Windows. You can get lesser known distros running without issues in addition to the popular ones, and systemd support can be enabled with a few tweaks. GPU support still needs an 'insider'/preview build IIRC. VcXsrv and PulseAudio server on Windows can route GUI apps, desktop environments and audio if needed.
Also, what exactly is so appealing about Gentoo specifically? What makes it 'more' configurable/extensible than other minimalist distros like say... Arch, Void, etc. I was planning to install NixOS on my next machine since it handles package & dependency management in a better way than most distros for me.
Not being rhetorical since I'm only vaguely familiar with Gentoo. I got put off by the idea of having to wait for compilation as part of the default package installation method. Would build times be an issue on a modern 32 GB/hexa-core machine?
@@DefinitelyNotAMachineCultist no they probably wouldnt
Also ALT + . types for you the last argument of previous command! (Do it n times to go back n times)
alias goodbye="sudo rm -rf /*"
is my favourite
You forgot the "--no-preserve-root"
@@Jupiter__001_ yeah i know
liked for stallman meme
More channels like this
Ctrl+R can basically replace all those ! bash history tricks. I'd avoid any ! tricks because the command is not printed out in front of you. Imagine rm -rf . was one of them and you just forgot.
--updoot
I never knew I need this flag. Now I know.
I've customized my prompt to show the current command's (future) history number, e.g. `[!23] >`. I've done the same thing in powershell, which uses the alias ‘r’ instead of a bang, e.g. `[r 23] >`.
Amazing video
thanks a lot kenny!!! :)
Enable vim keys in terminal: add *set -o vi* to .bashrc
thanks for the tips
From your thumbnail I first read, how to save lime while using linux
Here's a time saving command. poweroff
Watching this at 1 AM, what can you do with linux on?
Do you just rice and install packages all day?
sudo !! = 7keypresses
[up][pos1]sudo = 7 keypresses (which is what i do usually)
acutally it's more on US because ! is typed Shift+1
@@qlum same on eu(de/German) so it's actually 9 keypresses #unexpected and didn't calculate that in; ngl
Hey Outlaw, I have a question for you but it is unrelated to programming, at least not directly. Do you have contact info you're willing to share?
Interestingly I never used any of these.
To be fair as far as time saves go, instead of typing "sudo !!" you can just arrow up > home and type "sudo " which on US keyboard layout requires less keystrokes.
As for moving between words, you can also use ctrl+arrow left /right, this works pretty much everywhere outside of vim. I use it a lot in general from typing youtube comments to shell.
Thank you
did you miss 'Ctrl + R' : history search
Sometimes I sleep to mental outlaw asmr like videos
Mamamia good content
Is there a way to expand a command when referencing it with `!` ?
'!'
@@gurdeepgss literally amazing, thanks
Sweet mother of God. Thats nice
What the command to open a pdf? Is it the same with jpg using the sxiv command?
finally good shit
Instead of doing:
touch somefile
^touch^file
You can just as well:
touch somefile
file !$
Because !$ expands to the arguments of the last command