Linux and Unix Commands

Posted on Apr 22, 2017 (last modified Feb 14, 2023)

My collection of handy Linux, Unix, and Mac OS terminal commands.

Change file permissions

CommandUsage
chmod +x filename.extGive execute access to a file.
sudo chmod -R 777 workspace-R means RECURSIVE
sudo chown -R basejump workspaceTake ownership of a file. basejump (the user) and workspace (the directory)

Compress or extract files

CommandUsage
tar -zxvf file.tar.gzTo extract one or more members from an archive:
tar -czvf name-of-archive.tar.gz /path/to/directory-or-file

Compress an entire directory or single file.

Note: Be sure to add the .tar.gz in the archive file name yourself; the command doesn't do it for you.

Here's what the switches mean: -c: Create an archive. -z: Compress the archive with gzip. -v: Display progress in the terminal
while creating the archive, also known as "verbose" mode. The v is always optional in these commands, but
it's helpful. -f: Allows you to specify the filename of the archive.

gzip -9 /path/to/file
Example: gzip -9 ./data/*.ldif

Compress files with -9 signifying highest level of compression.

The original files will be removed, leaving only the archives (.gz) that replace them.

Copy File Between Local Machine and Remote Server

CommandUsage
scp /local/path/to/file user@server:/path/to/destinationscp stands for 'secure copy.' It copies files over a secure, encrypted network connection. This command copies a file from your local machine to the given server.
scp user@remote_host:/path/to/remote/file /path/to/local_fileThis command downloads the specified file from the specified remote server to your local machine.

Create an alias for a common command

CommandUsage
alias p="<command>"

Create shortcut aliases to common commands.

For example:

alias p="open /x/yx/z" to open a particular directory in Finder

Directory commands

CommandUsage
pwdPrint working directory (the directory you're currently in).
mv <oldDirName> <newDirName>Rename a directory. Be aware: this is actually a move command. So, you’re just moving
the directory from one name to another in the same path.
rmdirRemove an empty directory
rm -rf <dirName>Forcefully remove a directory recursively.

Remove the f switch to be prompted for each sub-directory and file inside.

cp -rf present/directory /desire/directoryCopy an entire directory, its subdirectories, and files.

Remove the f switch to be prompted for each sub-directory and file inside.

Execute command as root user

CommandUsage
sudo <command>Execute command as the root user.
sudo !!Execute the last command as root user. (!!) represents the last command
you just tried to run, but couldn't because of permission issues.

Execute task in background

CommandUsage
./startTest.sh &Start the execution in the background, which will allow you to kill your SSH terminal
without killing the process itself.

Find large files

CommandUsage
cd / find . -size +10000000c -printPrints out the names of all files with size > 10mb.
cd / sudo du -sm *Examine the size of the directories under /. You can then navigate into
any given subdirectory and execute du -sm * again to see which subdirectories are the largest.

Inspect disk space and usage

CommandUsage
df -hInspect disk space and usage (in MB or GB)

Work with environment variables

CommandUsage
printenvPrints all currently set environment variables and values.

Remove a file

CommandUsage
mvRename a file
rmRemove a file
rm -fForcefully remove a file
rm -iInteractively remove a file

If you are not certain about removing files that match a pattern you supply, it is always good to run rm interactively (rm –i) to prompt before every removal.

Switch user

CommandUsage
su – <username>Switch to the given user, loading their profile. You may have to use sudo su – <username>.
suWithout a username means to just switch to root user.
whoami"Who Am I?" Prints the current user.

View a file

CommandUsage
catUsed for viewing files that are not very long; it does not provide any scroll-back.
tacUsed to look at a file backwards, starting with the last line.
lessUsed to view larger files because it is a paging program; it pauses at each screenful of text, provides scroll-back capabilities, and lets you search and navigate within the file. Note: Use / to search for a pattern in the forward direction and ? for a pattern in the backward direction. Press Q to quit.
tailUsed to print the last 10 lines of a file by default. You can change the
number of lines by doing -n 15 or just -15 if you wanted to look at the last 15 lines instead of the default.
headThe opposite of tail; by default it prints the first 10 lines of a file.

Update the OS packages

sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade sudo reboot

Use pipes

The UNIX/Linux philosophy is to have many simple and short programs (or commands) cooperate together to produce quite complex results, rather than have one complex program with many possible options and modes of operation. In order to accomplish this, extensive use of pipes is made; you can pipe the output of one command or program into another as its input. In order to do this we use the vertical-bar, |, (pipe symbol) between commands as in: $ command1 | command2 | command3 This represents what we often call a pipeline and allows Linux to combine the actions of several commands into one. This is extraordinarily efficient because command2 and command3 do not have to wait for the previous pipeline commands to complete before they can begin hacking at the data in their input streams; on multiple CPU or core systems the available computing power is much better utilized and things get done quicker. In addition there is no need to save output in (temporary) files between the stages in the pipeline, which saves disk space and reduces reading and writing from disk, which is often the slowest bottleneck in getting something done.

Split a large text file into smaller parts

The Linux split command can help you break up really large text files into smaller, more manageable parts.

split -l <line-numbers> <source-file> <destination-file-prefix>

For example:

split -l 5000000 data3.trig segment

Fast string replace using stream editor (sed)

If you need to replace strings in a very large file or many files, you can use sed, the streaming editor. It's very fast because it uses streaming. This sure beats opening individual files in some editor and then using a find and replace function. The string positions expect regex, so be careful for special characters.

sed 's/<original-string>/<revised-string>/' <source-file> > <new-file>

For example:

sed 's/dev.acme.com:48083/ldp.demo:8083/' segment-aa > segmentaa

Change default shell (on Mac OS X)

You can change the default shell through the command line chsh command, which is shorthand for ‘change shell’. You’ll need to authenticate each change as well, the command will ask directly or you can prefix it with sudo. Here’s how to set the default user shell to zsh, bash, tcsh, ksh, sh, or any other shell for that matter.

  • zsh: chsh -s /bin/zsh
  • ksh: chsh -s /bin/ksh
  • tcsh: chsh -s /bin/tcsh
  • bash (default): chsh -s /bin/bash
  • sh: chsh -s /bin/sh
  • other shells: chsh -s /path/to/alternate/shell
Related Web Resources