Too often I figure out how to do this or that on Linux systems and in my haste to complete whatever task I've been assigned this "How To" knowledge gets lost. So here, I will begin posting little odds and ends in hopes of not needing to re-research past efforts for Linux tips, tricks, hacks, and other good to know things. If you find yourself here and know of smaller, faster, better ways of doing any of this please let me know - only through cooperation can we all get better.
Monday, August 25, 2014
Updating the default system editor - Debian
Friday, August 8, 2014
Change Directory and list contents in single command.
Using an editor of your choosing open your .bashrc or .bash_profile and add the following lines:
# User defined functionsNote: In the above I have aliased `ll` as -> alias ll='ls -ASlh'
function cdl { cd $1 && echo $PWD && ll; }
Note: You can name this whatever you choose, I just think `cdl` made sense.
Note: You can omit the echo $PWD if you don't care to see the directory path in the output. So you could do something as simple as:
# User defined functionsSave and close and then
function cdl { cd $1 && ls; }
bkarels@rev0:~$ source ~/.bashrcNow you can use cdl (or whatever you've named it to change directory and immediately ls the contents.
Example:
bkarels@rev0:~$ cdl foo/
/home/bkarels/fooThe above example was done on Debian 7 (Wheezy) but should work on all flavors of *nix and OSX.
total 328K
-rw------- 1 bkarels bkarels 156K Aug 8 09:39 sample0
-rw------- 1 bkarels bkarels 6.9K Aug 8 08:47 someFile27
-rw-r--r-- 1 bkarels bkarels 4.1K Aug 7 12:07 sayWhat
drwx------ 6 bkarels bkarels 4.0K Aug 8 07:37 killWindows.exe
FIN
Wednesday, March 5, 2014
Connect to SMB share with terminal - Fedora20
The non-gui way to connect to your SMB share. There is likely 1000 small variations of how to do this, but this is a very simple method to get you on to the path to bigger, better, cooler...
From a terminal:
[user@localhost user] $ cd /mnt
[user@localhost mnt] $ sudo mkdir shareExample
[user@localhost mnt] $ sudo mount -o username=user //theShareLocation/shareName /mnt/shareExample/
You will likely be prompted for your passwd...
[user@localhost mnt] $ cd /mnt/shareExample
[user@localhost shareExample] $ look around, do stuff...
NOTE: If you're accessing a SMB share on windows you will like need to connect using:
[user@localhost mnt]$ sudo mount -t smbfs -o username=username //theShareLocation/shareName /mnt/shareExample/
...and when you're done:
[user@localhost mnt]$ sudo umount /mnt/shareExample
This should work on all flavors of *nix, done here on Fedora20 as that is what I'm using at the moment.
FIN
Wednesday, January 16, 2013
Generate SHA hash - OSX
At it's most basic:
computer:directory user$ shasum <filename>In the case below I needed a SHA256 hash so the -a arg was necessary:
<some_hash> <filename>
computer:directory user$ shasum -a256 <filename>
<some_256_hash> <filename>
So, here is what I did - some content removed for brevity(...):
berlin:tmp bkarels$ cat Fedora-18-x86_64-Spins-CHECKSUMChecking the hash against a provided list was not as clear from the man pages. In brief you need to use the output of a shasum as input to shasum -c. Here you need only find 'OK' vs. relying on your human ability to visually compare hashes on a terminal.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
...
95a75c...29dd6e *Fedora-18-x86_64-Live-XFCE.iso
berlin:tmp bkarels$ shasum -a256 Fedora-18-x86_64-Live-XFCE.iso
95a75c...29dd6e Fedora-18-x86_64-Live-XFCE.iso
Basic:
computer:directory user$ shasum -a 256 <filename> | shasum -c <CHECKSUM_FILE>Example:
blah blah blah output: OK
berlin:tmp bkarels$ shasum -a 256 Fedora-18-x86_64-Live-XFCE.iso | shasum -c Fedora-18-x86_64-Spins-CHECKSUMFin.
...
shasum: Fedora-18-x86_64-Live-Scientific-KDE.iso: No such file or directory
Fedora-18-x86_64-Live-Scientific-KDE.iso: FAILED open or read
shasum: Fedora-18-x86_64-Live-Security.iso: No such file or directory
Fedora-18-x86_64-Live-Security.iso: FAILED open or read
shasum: Fedora-18-x86_64-Live-SoaS.iso: No such file or directory
Fedora-18-x86_64-Live-SoaS.iso: FAILED open or read
Fedora-18-x86_64-Live-XFCE.iso: OKshasum: WARNING: 7 of 8 listed files could not be read
NOTE: For clarity, here is the entire contents of the example file Fedora-18-x86_64-Spins-CHECKSUM:
berlin:tmp bkarels$ cat Fedora-18-x86_64-Spins-CHECKSUM
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
3684ae2814c7e54b4f66f0411a385846533e40f107d7fff4e331c2f547951ec2 *Fedora-18-x86_64-Live-Design-suite.iso
b11da64d527e333e2160cbf5fde49f89205f932d48fa7c01690232fc1b0cacfa *Fedora-18-x86_64-Live-Electronic-Lab.iso
ea34f626488623a1f84b2041df9c65468357bfdb878f034392da16f6c9d05264 *Fedora-18-x86_64-Live-LXDE.iso
8700aa64a6485e338b3d9aa419ecadc0c87884c77203a35c6e1847147a4dca06 *Fedora-18-x86_64-Live-Robotics.iso
3bb90d115daf6f0d2279cd5a669fb265c090cb6e88125424ae960a980f9ba50d *Fedora-18-x86_64-Live-Scientific-KDE.iso
7802a1c024f9471fba90724f53c0d95045acd76c3c4346b467cb53f5608248a9 *Fedora-18-x86_64-Live-Security.iso
736e8dd36de4207fe899648299abb6b3220fd1d1bcb48b8bf712d01d2ec02bf5 *Fedora-18-x86_64-Live-SoaS.iso
95a75c334ce82b33f1a5d81eab196600e40c7933fd5f7bfa8e6ed9534529dd6e *Fedora-18-x86_64-Live-XFCE.iso
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
iQIcBAEBCAAGBQJQ8FZnAAoJEP8BElzefzi9BdUQALd1dlX39NVq/GWuoR7iCrxo
+ZS5gFzp5ObdPp2+MFdKszMEI7HQnkv5Xvj7qTrUS41LwrLSAX7BN5wiuzYbD0wv
f10U7K907inViXWUbANCx/fqVDLXtC/lkRYMh0JEOyRP6VYCOjcTzby+pxfOhG3u
naAtUApx/WbydwOheyT1GJCV8e15/oXqYxDoJmQuAX7AliDyysVdtcsgDP9GEiJ+
jApOywZHdxVYzUJQlXkoYEAn9LzeOh69MEL8wP30GHGI4GBo0CMUouhXlvcnoNyj
Ov9Px/8xFSSQ6vs7rapayyaue4vCxa13Y79KKQzh+/f0G2KXgInW59Y70Q0lYkLS
SCYwNUxACSlguetDfzqTtXTAFbYUcHTcc6YLuCQGRUZbDNev/dq5pnIMLSQiDnKq
YXQd1a8qH0ZpRQCMHhRwYq6satKz1ui0PgRpAn4ScPdye8Fda9+tC5VI07SDEduX
lDvzgNgOIWA3dMgSPkcaW/jcanAB3ubgPxiyAitU12TzEPwE8RuMFlYhoIczr5pu
g1aQrw/kOng6OJGjlJWd5Sb3Qabsm3OW3hfJ7wER9TRWdDT2zwo3A+j6hYsE5og+
oLbVJhQFyqpIr9o5rhtoU3bVIyOqjl5WY+4PlTrQ+1gt1qjrY9Z0tzoSGk3ESaMi
txw7WyBRjomA/D+4jzMR
=/hTc
-----END PGP SIGNATURE-----
Thursday, June 21, 2012
Set tabstop in VI - Mac OSX
From within VI
(Assuming you would like to use four spaces for your tabs)
:set tabstop=4
To make this behaviour the default:
user@machine:~$ cd ~
(if ~/.exrc does not exist, create it. Otherwise skip to next cmd.)
user@machine:~$ touch .exrc
user@machiner:~$ vi .exrc
Add the following line to the file:
set tabstop=4
Save and close .exrc
user@machine:~$ . .exrc
user@machine:~$ vi someTextFile.txt
Basically, if the file .exrc does not exist in your home directory create it.
Open .exrc for editing.
Add the line (w/o quotes) "set tabstop=4"
Save .exrc
Source .exrc
Test to verify function.
This should also work in most flavors of *nix.
~Fin
Wednesday, May 25, 2011
mkdir and cd to created directory with a single command - 11.04 Natty
user@machine:~$ mkdir -p /dir/needed/to/cd/to/immediately
user@machine:~$ cd /dir/needed/to/cd/to/immediately
user@machine:~$ pwd
/home/user/dir/needed/to/cd/to/immediately
Quick functional solution: Open ~/.bashrc (or .bash_profile) and add the following line:
function mkdircd () { mkdir -p "$@" && eval cd "\"\$$#\""; }
NOTE: You can name this function whatever you like, mkdircd just makes sense to me...
Source ~/.bashrc and now let's do this the easy way:
user@machine:~$ mkdircd dir/needed/to/go/to/immediately
user@machine:~/dir/needed/to/go/to/immediately$ pwd
/home/user/dir/needed/to/go/to/immediately
~Fin
Monday, April 11, 2011
"Remote" administration of Linux VirtualBox® Guest Virtual Machines
Here we will go over the process of setting up your virtual machine in such a way that you can "remote" administer it and connect to it like any server on your network. For this example I will be running and OS X host with a Ubuntu Server 10.10 guest.
1. Download and install Oracle VirtualBox® here.
2. With VirtualBox® installed, let's take a look at our network settings on the host machine with `ifconfig`. Here you will want to take note of the vboxnet0 address:

3. Add a new virtual machine using the Oracle VM VirtualBox Manager. Once the initial setup is complete select the new virtual machine can click on the network adapter to add a second:

4. Adapter #1 will be configured by default and does not need to be altered. Click on the tab for `Adapter 2`, enable, and configure as follows:

5. Click the green arrow in the VM Manger to start the new virtual machine and install the new guest. (the rest of this example assumes a guest of type Ubuntu Server 10.10 but should be very similar for all flavors of *nix.)
6. During the guest install be sure to select eth0 as the primary network adapter.

7. Also, to save the need to set up the OpenSSH Server later, you can elect to do so as part of the OS install.

8. Start up the new guest and login.
9. Configure eth1 by modifying /etc/network/interfaces Add the following lines:
(NOTE: The address below is made up from the VBoxnet0 address noted in Step 2 above. Since mine defaulted to 192.168.56.1 I was free to use any value beyond that as below.)
# Secondary network interface for VBox0
auto eth1
iface eth1 inet static
address 192.168.56.102
netmask 255.255.255.0
10. Save and close /etc/network/interfaces and bring up eth1 using:
sudo ifup eth1
Your terminal might look like this when done:

11. Open a terminal on your host machine and connect to your guest using SSH:

If all went well you should be connected via SSH to your guest system and be able to interact with it as you would any server on your network. So, let's fire up a remote MongoDB server on our guest and verify that we can reach the Http Interface for the instance.
Starting up mongod on port 27000 on mongo2 (Http Interface defaults to [port] + 1000 or 28000 in this case):

...and voilĂ ! We are connected to our "remote" instance.

Fin
Thursday, March 31, 2011
Using custom shell scripts on Linux & OSX
1. Create a `bin` directory to store your script.
machine:~ user$ mkdir ~/bin
For Linux users this will create /home/[user]/bin, for OSX you'll have /Users/[user]/bin. You could name this directory whatever you'd like, but bin seems fitting.
2. Modify .bashrc or .bash_profile to put `bin` on your path.
If you're comfortable with vi you can: (Alternatively use any text editor you are comfortable with)
machine:~ user$ vi ~/.bash_profile [OSX]
user@machine:~$ vi ~/.bashrc [Linux]
Either way, add the following line:
PATH=$PATH:$HOME/bin
3. Save and exit.
4. Source your file for it to take effect:
machine:~ user$ . ~/.bash_profile [OSX]
user@machine:~$ . ~/.bashrc [Linux]
5. Now you can drop a shell script into your bin directory and have executable from anywhere on your filesystem (don't forget to make it executable!)
Example:
Last login: Thu Mar 31 11:07:30 on ttys004
machine:~ user$ pwd
/Users/user
machine:~ user$ touch example
machine:~ user$ vi example
...
#!/bin/sh
echo "Somewhere in Russia a little girl is warming up with your max."
...
machine:~ user$ mv example ~/bin/
machine:~ user$ chmod +x ~/bin/example
machine:~ user$ ls -l ~/bin | grep example
-rwxr-xr-x 1 user staff 80 Mar 31 14:25 example
machine:~ user$ cd /tmp/
machine:tmp user$ example
Somewhere in Russia a little girl is warming up with your max.
machine:tmp user$
Fin
Lift weights - Lift spirits
Monday, March 14, 2011
Simple command line encryption
(NOTE: With OS X Lion breaking TrueCrypt - this is simple replacement that, in a way, simplifies things.)
To encrypt the file:
openssl des3 -salt -in infile.txt -out encryptedfile.txtTo decrypt the file:
openssl des3 -d -salt -in encryptedfile.txt -out normalfile.txtThe -a option, stores the encrypted file in base64 instead of binary.
To encrypt the file stored in base64:
openssl des3 -a -salt -in infile.txt -out encryptedfile.txtTo decrypt the file stored in base64:
openssl des3 -d -a -salt -in encryptedfile.txt -out normalfile.txtTo see a list of all available ciphers and other command information:
openssl -h
Other examples(notes to self...):
openssl des3 -salt -in rev27_*****_2010.zip -out rev27_*****_2010.zip.des3
openssl des3 -salt -in pf_*****_2010.zip -out pf_*****_2010.zip.des3
Monday, August 2, 2010
View output in console and write to file using tee - Mac OS X 10.6.4
machine:dir user$ ./some_program | tee output_file.txt
Executing the above command will display the output of some_program immediately in the console and write the same contents to output_file.txt.
I use this command mostly for diffs against svn, saves a step. Also, though I'm posting this as a Mac OS X terminal option, I first discovered this on Ubuntu 8.04 though I sure the history or this command is much older. I recall from the documentation to think of this in plumbing terms: Send your output down a pipe to a "T" essentially sending the same stream/flow to two different places.
~Fin
Friday, January 15, 2010
Recursive SVN Directory Removal - Ubuntu 9.10 Karmic
user@machine:~/dev/sample1$ rm -rf `find . -type d -name .svn`
(Please note those are grave accent quotes - below the tilde on the key left of the one(1) key.)
This command should work for all flavours of Unix.
~Fin
Tuesday, January 12, 2010
Create a symbolic link - Ubuntu 9.10 Karmic
So you could do like:
user@machine:~/devtools/jdk$ ll
drwxr-xr-x 10 root root 4096 2010-01-12 11:11 jdk-1.6.0
user@machine:~/devtools/jdk$ ln -s jdk-1.6.0/ current
user@machine:~/devtools/jdk$ ll
lrwxrwxrwx 1 brad brad 10 2010-01-12 11:25 current -> jdk-1.6.0/
drwxr-xr-x 10 root root 4096 2010-01-12 11:11 jdk-1.6.0
user@machine:~/devtools/jdk$
~Fin
Wednesday, October 28, 2009
Start, stop, restart MySql - Ubuntu 9.04 Jaunty
~Fin
Thursday, October 22, 2009
Using Tabs in the terminal - Ubuntu 9.04 Jaunty
Open a terminal and create a new tab using:
<shift> + <ctrl> + T
To switch between tabs using the keyboard:
<ctrl> + <page down>
(Moves one tab right - will loop through all tabs from left to right.)
<ctrl> + <page up>
(Moves one tab left - will loop through all tabs from right to left.)
~Fin
shred a File - Ubuntu 9.04 Jaunty
The following command will shred a file, "zero" it (to hide shredding) and then remove it.
user@machine:~$ shred -zuv sensative.file
~Fin
Monday, October 19, 2009
Find files larger than a given size in Linux - Ubuntu 9.04 Jaunty
user@machine:~$ find /path/to/directory -type f -size +1024k
This will search for files larger than 1MB (1024k). Obviously you can adjust this number to suite your search requirements.
~Fin
Wednesday, October 14, 2009
How to Create & Extract tar.gz and tar.bz2 Files in Linux - Ubuntu 9.04 Jaunty
In order to create a compressed tar.gz archive from a folder/file we need to run the following tar command:
tar czf new-tar-file-name.tar.gz file-or-folder-to-archive
Here is the command explanation:
* tar - the tar command.
* c - create new archive.
* z - compress the archive using gzip.
* f - use archive file.
* new-tar-file-name.tar.gz - the name of the tar.gz to create.
* file-or-folder-to-archive - the name of the folder we want to archive.
How to create a compressed tar.gz file from multiple files and folders in Linux?
In order to create a compressed tar.gz file from multiple files or/and folders we need to run the same tar command we used when we archived a single file/folder and to append the rest of the files/folders' names to it.
tar -czf new-tar-file-name.tar.gz file1 file2 folder1 folder2
How to extract a compressed tar.gz file in Linux?
tar -xzf tar-file-name.tar.gz
Here is the command explanation:
* tar - the tar command.
* x - extract the archive.
* z - uncompress the archive using gzip.
* f - use archive file.
* tar-file-name.tar.gz - the name of the tar.gz to extract.
The tar command will extract all the files/folders in the archive to the current directory.
How to extract a compressed tar.bz2 file in Linux?
Extracting tar.bz2 (bzip2 file) is very similar to the way you extract tar.gz file. Instead of using the -z flag you need to use the -j flag for the bzip2 format
tar -xjf tar-file-name.tar.gz
Here is the command explanation:
* tar - the tar command.
* x - extract the archive.
* j - filter the archive through bzip2
* f - use archive file.
* tar-file-name.tar.gz - the name of the tar.gz to create.
The tar command will extract all the files/folders in the archive to the current directory.
~Fin
Monday, October 12, 2009
Recursive grep on directory - Ubuntu Linux 9.04 Jaunty
Doing some work on Solaris where the "-r" flag is not an option. To do this on Solaris:
/usr/bin/find . | /usr/bin/xargs /usr/bin/grep "patternToSearchFor"
or if your paths are defined simply:
find . | xargs grep "patternToSearchFor"
~Fin
Thursday, October 8, 2009
How to execute a .bin file - Ubuntu Linux 9.04 Jaunty
-rw-r--r-- 1 brad brad 108008954 2009-10-08 08:15 fileToBeExecuted.bin
user@machine:~$ chmod +x fileToBeExecuted.bin
user@machine:~$ ll
-rwxr-xr-x 1 brad brad 108008954 2009-10-08 08:15 fileToBeExecuted.bin
user@machine:~$ sudo ./fileToBeExecuted.bin
[sudo] password for user:
user@machine:~$
~Fin