Difference between revisions of "John's Linux page"

From ProgClub
Jump to: navigation, search
Line 271: Line 271:
  
 
  $ ln /path/to/target file-name
 
  $ ln /path/to/target file-name
 +
 +
== Changing the owner of a file ==
 +
 +
$ chown user:group <files>
 +
 +
E.g.
 +
 +
$ chown jj5:staff README
 +
$ chown root:root *
 +
 +
To apply recursively into sub-directories use -R,
 +
 +
$ chown -R root:root /etc/*
 +
 +
== Changing file permissions ==
 +
 +
{|class="wikitable"
 +
|+ Numeric codes
 +
! Read !! Write !! Exectue
 +
|-
 +
| r    || w    || x
 +
| 4    || 2    || 1
 +
|}
 +
 +
{|class="wikitable"
 +
|+ Object codes
 +
! User !! Group !! Other
 +
|-
 +
| u    || g    || o
 +
|}
 +
 +
{|class="wikitable"
 +
|+ Numeric values
 +
! 0
 +
| None
 +
|-
 +
! 1
 +
| Execute
 +
|-
 +
! 2
 +
| Write
 +
|-
 +
! 3
 +
| Write, Execute
 +
|-
 +
! 4
 +
| Read
 +
|-
 +
! 5
 +
| Read, Execute
 +
|-
 +
! 6
 +
| Read, Write
 +
|-
 +
! 7
 +
| Read, Write, Execute
 +
|}
 +
 +
See [http://catcode.com/teachmod/numeric2.html Numeric Mode in Action].
 +
 +
$ chmod <numeric code> <files>
  
 
= File searching =
 
= File searching =

Revision as of 22:10, 30 July 2011

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

Changing the owner of a file

$ chown user:group <files>

E.g.

$ chown jj5:staff README
$ chown root:root *

To apply recursively into sub-directories use -R,

$ chown -R root:root /etc/*

Changing file permissions

Numeric codes
Read Write Exectue
r w x 4 2 1
Object codes
User Group Other
u g o
Numeric values
0 None
1 Execute
2 Write
3 Write, Execute
4 Read
5 Read, Execute
6 Read, Write
7 Read, Write, Execute

See Numeric Mode in Action.

$ chmod <numeric code> <files>

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.