John's Linux page
Hi there, I'm John. I just wanted a page where I could document various Linux things that I bump into. This is that page. Thank you ProgClub. :)
Environment
Configuring vim as your editor
Sometimes all you need is:
$ export EDITOR=/usr/bin/vim
Which works for svn, for example.
Other times you need to run
$ update-alternatives --config editor
And then select vim from the list. This is what you do to configure your visudo editor.
Configuring your locale
$ sudo /usr/sbin/locale-gen en_AU.UTF-8 $ sudo /usr/sbin/update-locale LANG=en_AU.UTF-8
User and group management
Adding a user
To add a new user on a linux system:
# useradd username # passwd username
To have the home directory created from '/etc/skel' use the 'adduser' script instead:
# adduser username
Adding a user to a group
To add an existing user to an existing group:
# gpasswd -a username group
e.g. to add user 'jj5' to the 'sudo' group:
# gpasswd -a jj5 sudo
Which user am I?
To determine which user you are running as enter the command:
$ whoami
Which groups am I in?
To find which groups you are a member of:
$ groups
or
$ groups username
Where 'username' is the username of the user you are querying, e.g.:
$ groups jj5
SSH
Configuring SSH Key login
On the client machine generate a key-pair (if necessary, check for existing ~/.ssh/id_rsa.pub):
$ ssh-keygen -t rsa
Copy the public key from the client to the server:
$ scp ~/.ssh/id_rsa.pub user@example.org:
Configure the authorized keys on the server:
$ ssh user@example.org $ mkdir ~/.ssh $ chmod go-w .ssh $ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys $ rm ~/id_rsa.pub
MySQL
Dumping a MySQL database
You can dump the database into a file using:
$ mysqldump -h hostname -u user --password=password databasename > filename
Loading a MySQL database from a dump file
You can create a database using:
$ echo create database databasename | mysql -h hostname -u user -p
You can restore a database using:
$ mysql -h hostname -u user --password=password databasename < filename
Creating a MySQL user
# mysql -h localhost -u root --password=<password> mysql> create user 'username'@'localhost' identified by '<password>';
Granting all MySQL user permissions
# mysql -h localhost -u root --password=<password> mysql> grant all privileges on dbname.* to user@host;
IPTables
Applying firewall rules
For configuration info see this article.
$ sudo vim /etc/iptables.test.rules $ sudo /sbin/iptables -F $ sudo /sbin/iptables-restore < /etc/iptables.test.rules $ sudo iptables -L $ sudo -s # iptables-save > /etc/iptables.up.rules # exit
IPSec
Disabling IPSec
# setkey -FP
Networking
Ping with particular packet size
$ ping -M do -s <packet size in bytes> <host>
E.g.
$ ping -M do -s 1400 charity.progclub.org
Setting MSS for a particular IP address on a particular interface
# ip route add <host> dev <interface> advmss <packet size>
E.g.
# ip route add 10.0.0.1 dev eth0 advmss 1400
Dropping configured MMS for a particular IP address
# ip route flush <host>
E.g.
# ip route flush 10.0.0.1
Apache
Maintaining .htaccess passwords
To add or modify the password for a user:
$ htpasswd /etc/apache2/passwd username
Configuring PHP session timeout in .htaccess
For a session timeout of 9 hours:
php_value session.cookie_lifetime 32400 php_value session.gc_maxlifetime 32400
Disabling PHP magic quotes in .htaccess
php_flag magic_quotes_gpc Off
Requiring HTTP Auth in .htaccess
AuthType Basic AuthName "Speak Friend And Enter" AuthUserFile /home/jj5/.htpasswd Require valid-user
Restarting Apache
The hard way
$ sudo /etc/init.d/apache2 restart
The graceful way (avoids dropping active connections)
$ sudo apache2ctl graceful
PHP
Including a file relative to the including file
require_once( dirname( __FILE__ ) . '/relative/path/to.php' );
Enabling error reporting
error_reporting( E_ALL | E_STRICT ); ini_set( 'display_errors', 'On' );
Setting an error handler
set_error_handler( "error_handler", E_ALL | E_STRICT );
function error_handler( $error_code, $error_message, $error_file, $error_line, $error_context ) { // ... }
BASH scripting
For a primer on bash scripting see TFM: Erotic Fantasy: /bin/sh Programming.
Telling a script to run in bash
The first line of the file should be:
#!/bin/bash
Checking if a command-line argument was not passed in
if [ "$1" = "" ]; then echo "Missing parameter 1."; exit 1; fi
Checking command exit status
cd /my/path if [ "$?" -ne "0" ]; then echo "Cannot change dir."; exit 1; fi
Checking if a directory doesn't exist
if [ ! -d "/my/dir" ]; then mkdir /my/dir fi
Deleting old backups
To keep only the latest five backups:
rm `ls -t | awk 'NR>5'` 2> /dev/null
To change into the script's directory
cd `dirname $0`
Disk management
Checking available disk space
$ df -h
File management
Creating a symbolic link
$ ln -s /path/to/target link-name
Creating a hard-link
$ ln /path/to/target file-name
File searching
Finding a file with a particular name
$ find -iname "*some-part-of-the-file-name*"
Will start searching from the current directory, so maybe
$ cd /
first. For a case-sensitive search:
$ find -name "*eXaCT CaSE*"
Finding a file with particular content
To search in /etc/ for a file with particular content:
$ grep -R "search-string" /etc/*
Job control
Stopping a running process
Press Ctrl+Z to stop a running process.
Resuming a stopped job in the backgroud
To resume a stopped process in the background
$ bg %1
where '1' is the job number reported by bash when you pressed Ctrl+Z.
Resuming a stopped job in the foreground
To resume a stopped process in the foreground
$ fg %1
where '1' is the job number reported by bash when you pressed Ctrl+Z.
List current jobs and their status
$ jobs
Debian/Ubuntu package management
Show list of installed packages
# dpkg --get-selections
Searching for installed package
# dpkg --get-selections | grep package-name
or
# aptitude search package-name
Showing which files are installed as part of a package
# dpkg -L package-name
Installing a package
# apt-get install package-name
Uninstalling a package
# apt-get remove package-name
Write
write is a unix command for talking to other users on the system. To use write:
1. SSH to <username>@<hostname> and login with your username and password.
2. Issue the following command to find out who is logged onto the system:
$ who
3. Issue the following command to talk to a specific user:
$ write <username>
4. Enter the message you'd like to send the user, followed by Ctrl+C to send.