User Tools

Site Tools


wiki:linux-unix

Table of Contents


Wiki

Linux/Unix

Typical commands and tasks helpfull using Linux/Unix systems.

Ab

To test a website's performances:

ab -t 30 -c 5 %WEBSITE%

Apache

Check Config Files

apachectl configtest

Redirect

<VirtualHost %IP%:80>
ServerName %YOUR.HOSTNAME.COM%
Redirect permanent / http://%DESTINATIONDOMAIN%/%DESTINATIONPAGE%
</VirtualHost>

%IP% can be * for any IP addresses.

Reverse Proxy

<VirtualHost %IP%:80>
ServerName %YOUR.HOSTNAME.COM%
ProxyRequests Off
DocumentRoot /var/www
<Proxy *>
   Order deny,allow
   Allow from all
</Proxy>

ProxyPass / http://%DESTINATIONIP%/
ProxyPassReverse / http://%DESTINATIONIP%/
</VirtualHost>

%IP% can be * for any IP addresses.

Bash

Delete Certain Files In Sub-Folders

To delete all .lck files in sub-folders:

for i in `find . -name '*.lck'`; do rm -f $i; done

Delete All Files Except Pattern Match

rm !(%PATTER%)

Bash Scripts

For Loop

for i in {1..254}; do echo $i; done

Input From Prompt

echo " "
echo -n " Do that? y/n: "
read ok
echo " "
if [ $ok = "y" ]
then
  echo "OK!"
fi
if [ $ok = "n" ]
then
  echo "NOK!"
fi

Maths

$((%VARIABLE1%+%VARIABLE2%))

Base number conversion

Convert hexadecimal number 2F to decimal 47:

echo $((0x2F))

or

echo $((16#2F))

Convert sexatrigesimal (base 36) to decimal:

echo $((36#XY))

Variables - Right concatenation

${variable1}${bariable2} 

Wait

Wait some time before go ahead:

wait %SECONDS%

While Loop

cat /root/file.txt|
while read g
do
         
        echo "$g is the content of the line...."

done

Cron

Don't email cron output

Append to the crontab line:

2>&1 > /dev/null

Or disable globally inserting this line at the beginning of crontab:

MAILTO=""

Date - deltas

date -d "-2 days" +'%Y-%m-%d' 

Disk Management

Create partitions & format disk

fdisk /dev/sdX
mkfs -t FSTYPE /dev/sdXY 

Disk UUID

ls -l /dev/disk/by-uuid/
vol_id /dev/sdXY 

Detect SCSI Devices

apt-get install scsitools

or

wget http://rescan-scsi-bus.sh/

and then

rescan-scsi-bus.sh

Disable Spin-Off

hdparm -B 254 /dev/sdX

Get Folder And File Size

du %FOLDERROOT% | sort -rn

Get SubFolders Size sorted

du -sh * | sort -h

Get Total Size

du -scb

Monitor Disk I/O Stats

iostat -d -x 1 10

Find

All files search:

find %PATH% -name '%FILNAME%*'
locate %FILE%

Locate a binary, source, and manual page files for a command:

whereis %PATTERN%
wich %PATTERN%

Get public IP

Get the public IP from ssh session:

curl ipconfig.me

Grep

Exclude lines containing pattern:

grep -v %PATTERN%

Gzip

Unzip

gzip -d FILE.gz

Zip And Remove Original File

gzip file.tar 

Zip And Leave Original File

gzip -c FILE > FILE.gz

Install VMWareTools

Before installing VMWareTools from .tar.gz file, install the following packages:

sudo apt-get install build-essential
sudo apt-get install linux-headers-`uname -r`

For debian OS, do the following command:

export CC=/usr/bin/gcc-4.1

LVM

Install Procedure

Install on ubuntu:

apt-get install lvm2 dmsetup mdadm reiserfsprogs xfsprogs

Format disks and create a new partition with file-system “8e - Linux LVM”:

fdisk /dev/sdX

Initialize disks for LVM:

pvcreate /dev/sdXY [/dev/sdWZ]

Create a new volume group:

vgcreate %VGNAME% /dev/sdXY [/dev/sdWZ]

Create a new logical volume that use all the free space:

lvcreate -n %LVNAME% -l 100%FREE %VGNAME%

The disk is now see as device under /dev/%VGNAME%/%LVNAME%

Logical Volume Management

Create:

lvcreate -n %LVNAME% -l 100%FREE %VGNAME%

Extend:

lvextend -L%SIZE% /dev/%VGNAME%/%LVNAME%
lvextend -l +100%FREE /dev/%VGNAME%/%LVNAME%

Shrink [Warning]:

lvreduce -L%SIZE% /dev/%VGNAME%/%LVNAME%

Mail Services

Send Email

Send an email from command line or script:

echo "This is the first line of the body\n and this the second" | mail -s "The subject" recipient1[,recipient2,...] -- -f senderaddress

In some versions -e switch need to be specified if \X characters are used.

On linux systems, mail command is in mail-utils package (debian and ubuntu)

Network

ARP Debugging

arping -I %IF% -c %#OFRETRIES% %IPADDRESS%

MTR

Do traceroute and ping:

mtr www.google.com

NetCat

Simple check:

nc -z %HOST% %PORT%

Network IP scan

Scan a class C subnet and detect hosts:

for i in {1..254}; do ping -c 1 -W 1 %SUBNET%.$i | grep 'from' | cut -d' ' -f 4 | tr -d ':'; done

Nload

Get a bar-graph of network usage per interface (right or left key to change interface)

nload

Public IP Address

To retrieve the public IP address:

curl ip.appspot.com

To retrieve the public IP address, the location and the ISP name:

curl -s "http://www.geody.com/geoip.php?ip=$(curl -s icanhazip.com)" | sed '/^IP:/!d;s/<[^>][^>]*>//g'

OpenSSL

Check certreq content

openssl req -verify -text -in cert.req

Check certificate content

openssl x509 -text -in cert.req

Generate Random Password

openssl rand -base64 12

Export Public and Private Key to a pfx File

openssl pkcs12 -export -out %OUTPUTFILENAME%.pfx -inkey %PRIVATEKEY.KEY% -in %PUBLICKEY.CRT% -certfile %INTERMEDIATECERT.CRT%

Export Public and Private Key from a pfx file

To export the private key:

openssl pkcs12 -in %PFXFILE%.pfx  -nocerts -out %PRIVATEKEY%.pem

To remove password for private key:

openssl rsa -in %PRIVATEKEY%.pem -out %PRIVATEKEY-NOPWD%.pem

To extract the certificate (public key), run the OpenSSL command:

openssl pkcs12 -in %PFXFILE%.pfx -clcerts -nokeys -out %PUBLICCERT%.pem

Remove The Passphrase for an SSL Key

openssl rsa -in www.key -out new.key

Ramfs

installer xfsdump, xfsprogs
ajouter   ramdisk_size=2621440 dans les options de chargement du kernel (GRUB)
mkfs -t xfs -q /dev/ram1 2621440
mount -t ramfs /dev/ram1 /path -o defaults,rw

Package management

Install and upgrade software in old unsupported ubuntu releases

sed -i -e 's/archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list

List all installed packages for dpkg

dpkg --get-selections

Processes Management

Check running process:

pgrep %PROCNAME%

Rename

rename %EXPRESSION% %REPLACETEXT% %FILES%
rename -v .doc .txt *.doc

Rsync

rsync -ave ssh --exclude="System Volume Information" --exclude="RECYCLER" . root@10.0.0.5:/var/path/ 

Sed

Delete a matching line with special characters

sed -e 's#LINE##g' sourcefile  > destinationfile 

Delete empty lines

sed '/^$/d' sourcefile > destinationfile

Isolate date in a string

sed -e 's/^.*\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\).*/\1/g' 

Last word of a line

sed -e 'y/\t/ /;s/ *$//;s/^.* //' file

Print the Nth line of FILE:

sed -n 'N'p FILE

Print every Nth line starting from line M:

sed -n ‘M~N’p FILE

Print odd lines:

sed -n ‘2~1’p FILE

Print Mth line to Nth line:

sed -n ‘M,N’p FILE

Print the last line:

sed -n ‘$’p FILE

Print line corresponding the PATTERN (can be regex expression):

sed -n /PATTERN/p FILE

Print lines beetween PATTERN and Nth line:

sed -n ‘/PATTERN/,Np’ FILE

Print lines beetween Nth line and PATTERN:

sed -n ‘N,/PATTERN/p’ FILE

Print the lines which matches the pattern and next N lines following the matched line:

sed -n ‘/PATTERN/,+Np’ FILE

Delete Operations

Delete the Nth line of FILE:

sed -n 'N'd FILE

Delete Mth line to Nth line:

sed -n ‘M,N’d FILE

Write Operations

Find-Replace Operations

Replace the first occurrence of ABC with DEF:

sed 's/ABC/DEF/' FILE

Replace all occurrences of ABC with DEF:

sed 's/ABC/DEF/g' FILE

Replace the 3th occurrence of ABC with DEF:

sed 's/ABC/DEF/3' FILE

Replace all occurrences of ABC with DEF and write output to stdout and OUTFILE:

sed -n 's/ABC/DEF/gpw OUTFILE' FILE

Replace ABC with DEF in lines containing GHI pattern:

sed '/GHI/s/ABC/DEF/g' FILE

Replace the last 4 characters of all lines with ABC:

sed 's/....$/ABC/'

Delete characters after # symbol and delete empty lines:

sed -e 's/#.*//;/^$/d' FILE

Convert DOS newlines (CR/LF) to Unix format:

sed 's/.$//' FILE

In-File Operations

To modify/replace direct in a file:

sed -i -e 's/new/archive/g' FILE

Shell

Command Aliases

Uncomment or add aliases in ~/.bashrc file

Command History

Execute the line N of the history record:

!%N%

Execute the command N lines back:

!-%N%

Execute the last command:

!!

Get the Nth argument of the last command.

!!:%N%

Get the last argument of the last command.

!!:$

or

!$

Reexecute the most recent COMMAND command, string from the start:

!%COMMAND%

Reexecute the most recent COMMAND command, string appearing anywhere in the command:

!?%COMMAND%
Keybinding | Description
 Control-a | Position cursor at the start of the line
 Control-e | Position the cursor after the last character of the line
 Control-k | Delete all text after (and including) cursor
 Control-u | Delete all text before (not including) cursor
 Control-w | Delete immediate WORD before cursor
 Control-d | When text exist => delete char under cursor (think delete). When no text => exit shell
 Control-r | Reverse index search, Control-r to search again
 Control-l | Clear display
 Control-c | Cancel current command, return empty prompt

Remove console output

... 2>&1 > /dev/null

SNMP

Command line queries

snmpwalk -v 1 -c %COMMUNITY% %AGENTIP%

Sort

Sort on first numerical field:

sort -n

Sort on first numerical field from higest to smallest:

sort -rn

SSH

Keys Login

Connect on client server and do the following:

ssh-keygen
scp .ssh/id_dsa.pub %USER%@%REMOTEHOST%:./id_dsa.pub
ssh %USER%@%REMOTEHOST%
mkdir .ssh
chmod 700 .ssh
cd .ssh
touch authorized_keys
chmod 600 authorized_keys
cat ../id_dsa.pub >> authorized_keys
rm ../id_dsa.pub
quit

Tunnel

ssh -N -f %USER%@%PROXYHOST% -L[%BINDLOCALADDRESS%:]%LOCALLISTENINGPORT%:%REMOTEHOST%:%REMOTEHOSTPORT%

Sudo

Allow user to do sudo

sudo adduser existing_username_to_add_to_admin_group admin

Switch statements

Exit script on condition

if [ "$1" = "ABC" ]
then
echo abort
exit
fi

System Management

Get Dell Service Tag

dmidecode 

Get Hardware Serial Number

dmidecode -s system-serial-number 

Kill all processes with a defined patter

for i in `ps aux | awk '/%PATTERN%/ {print $2;}'`; do kill $i; done

List all samba shares:

smbclient -L %SAMBASERVER%

List deleted files but not flushed files

lsof | grep deleted

Locale Management

locale-gen fr_CH.UTF-8

Verify that the locale is present:

locale -a

Monitor memory usage

watch vmstat -sSM

Rename system name

Update

/etc/hostname
/etc/hosts

and execute

/etc/init.d/hostname.sh

Ubuntu version

lsb_release -a
uname -a 

System settings

Default text editor

select-editor

Change keyboard layout

apt-get install console-data
dpkg-reconfigure console-setup

Remove colors in shell

Comment the following line in ~/.bashrc file:

alias ls='ls --color...

or replace with:

alias ls=ls

Tar

Tar

tar -cvf file.tar filestotar 

Tar & Gzip

tar -czvf file.tar.gz filestotar 

Tar from a remote host

Create a local compressed tarball from remote host directory:

ssh %USER%@%HOST% “tar -cf - %/PATH/TO/TAR%” | gzip %FILENAME%.tar.gz

Untar multiple files

untar multiple files: for i in *.tar.gz; do tar -xvzf $i; done

Tcpdump

Filters

Filter on one port:

tcpdump port %PORT%

Filter on more ports:

tcpdump port %PORT% and port %PORT2%

Filter to exclude port:

tcpdump port not %PORT%

Filter on host:

tcpdump host %HOST%

Filter on interface:

tcpdump -i %INTERFACE%

Payload

tcpdump -x -s 1500

Write/Read File

To write results to file:

tcpdump -w %FILENAME%

To read the results from file:

tcpdump -r %FILENAME%

Uniq

Read the standard input comparing adjacent lines and write a copy of each unique input line to the standard output:

... | uniq

To delete all repeated lines, need to sort before:

... | sort | uniq

Users And Groups Management

Add user to a group

usermod -a -G %GROUP% %USER%

Vi

Remove syntax colours

Add

syntax off

in file ~/.vimrc

Wc

Count Words

wc -w FILE

Count Lines

wc -l FILE

Count Characters

wc -m FILE

Count Lines, Words and Characters

wc FILE

Wget

Recursively retrieve a website:

wget -r %URL%

ToDo

The command /usr/sbin/sendmail -q forces the queue to be sent. Use the command mailq to tell what's stacked up in the queue

By default, sed prints every line. If it makes a substitution, the new text is printed instead of the old one. If you use an optional argument to sed, “sed -n,” it will not, by default, print any new lines. I'll cover this and other options later. When the “-n” option is used, the “p” flag will cause the modified line to be printed. Here is one way to duplicate the function of grep with sed:

 <code> sed -n 's/pattern/&/p' file </code>

at (atrm atq)
wall

[ parameter FILE ] OR test parameter FILE

Where parameter can be any one of the following:

  • -e: Returns true value if file exists
  • -f: Return true value if file exists and regular file
  • -r: Return true value if file exists and is readable
  • -w: Return true value if file exists and is writable
  • -x: Return true value if file exists and is executable
  • -d: Return true value if exists and is a directory

Examples Find out if file /etc/passwd file exists or not

Type the following commands: $ [ -f /etc/passwd ] && echo “File exists” || echo “File does not exists” $ [ -f /tmp/fileonetwo ] && echo “File exists” || echo “File does not exists” Find out if directory /var/logs exists or not

Type the following commands: $ [ -d /var/logs ] && echo “Directory exists” || echo “Directory does not exists” $ [ -d /dumper/fack ] && echo “Directory exists” || echo “Directory does not exists” You can use conditional expressions in a shell script:

#!/bin/bash FILE=$1

if [ -f $FILE ]; then

 echo "File $FILE exists"

else

 echo "File $FILE does not exists"

fi

-eq

  is equal to
  if [ "$a" -eq "$b" ]

-ne

  is not equal to
  if [ "$a" -ne "$b" ]

-gt

  is greater than
  if [ "$a" -gt "$b" ]

-ge

  is greater than or equal to
  if [ "$a" -ge "$b" ]

-lt

  is less than
  if [ "$a" -lt "$b" ]

-le

  is less than or equal to
  if [ "$a" -le "$b" ]

<

  is less than (within double parentheses)
  (("$a" < "$b"))

  is less than or equal to (within double parentheses)
  (("$a" <= "$b"))

>

  is greater than (within double parentheses)
  (("$a" > "$b"))

>=

  is greater than or equal to (within double parentheses)
  (("$a" >= "$b"))

count links: ls -ld

while true; do date; ssh <YOUR HOST HERE> "echo" && echo "HOST UP" && break; sleep 60; done
seq 1 255 | parallel -j+0 'nc -w 1 -z -v 192.168.1.{} 80'
 echo "- - -" > /sys/class/scsi_host/host%ID%/scan

echo 1 > /sys/block/sda/device/rescan

#echo “1” > /sys/class/scsi_device/%DEVICE%/device/rescan
use fdisk to resize the partition by deleting the existing partion and creating a new, larger partition at the same starting cylinder 'pvresize -v' (the output of pvresize is not immediately clear; use the -v flag and compare vgdisplay's output of usable disk space for confirmation) If you're uncomfortable resizing the disk partition or the space is not contiguous, simply create a new partition, 'pvcreate' and then vgextend. The space is now available inside lvm, consume as normal.

find . -type f -newermt "2010-01-01" ! -newermt "2010-06-01"

split screen to multiple command lines: tmux

RDP through SSH

ssh -f -L3389:<RDP_HOST>:3389 <SSH_PROXY> "sleep 10" && rdesktop -T'<WINDOW_TITLE>' -uAdministrator -g800x600 -a8 -rsound:off -rclipboard:PRIMARYCLIPBOARD -5 localhost

Get server version:

curl -Is http://%HOST% | grep -E '^Server'
update-rc.d autorun.sh defaults
shuf -n4 /usr/share/dict/words | tr -d '\n'

Sort by column:

ps aux | sort -nk 6

Bckp file:

cp httpd.conf{,.bk}

save command output to image by unixmonkey21861

ifconfig | convert label:@- ip.png

Find out how much data is waiting to be written to disk

grep ^Dirty /proc/meminfo

Display line number: cat -n file.txt nl file.txt > file_numbered.txt

Create iso from cd (package wodim)

readom dev=/dev/scd0 f=/path/to/image.iso

Similarly, if you want to burn your newly creating ISO, stay away from 'dd', and use:

wodim -v -eject /path/to/image.iso
lower() { echo ${@,,}; }
upper() { echo ${@^^}; }

Echo a command, then execute it from All commands by hfs $ v () { echo “$@”; “$@”; }

You can use this in shell scripts to show which commands are actually run. Just prepend every “critical line” with “v˽”.

$TMP=/tmp

echo “Let me create a directory for you”

v mkdir $TMP/new

In scripts this can be more useful than “set -x”, because that can be very verbose with variable assignments etc.

Another nice use is if you prepend every “critical” command with “v”, then you can test your script by commenting out the actual execution.

Expand shortened URLs by atoponce (http://pthree.org) $ expandurl() { curl -sIL $1 | grep ^Location; } expandurl() { wget -S $1 2>&1 | grep ^Location; }

Clear filesystem memory cache by mariusbutuc (http://mariusbutuc.com) $ sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

Run a command when a file is changed by anhpht $ while inotifywait -e modify /tmp/myfile; do firefox; done

Empty Bind9 cache by ironmarc $ rndc flush

/etc/init.d/nscd restart

openssl req -new -x509 -nodes -out server.crt -keyout server.key

Create a file server, listening in port 7000 by anhpht $ while true; do nc -l 7000 | tar -xvf -; done

At client side: tar c myfile | nc localhost 7000 ##Send file myfile to server tar c mydir | nc localhost 7000 ## Send directory mydir to server

Create a local compressed tarball from remote host directory ssh user@host “tar -cf - /path/to/dir” | gzip dir.tar.gz

find all symlinks to a file

find / -lname path/to/foo.txt

Exclude lines with patter:

grep -v %PATTERN%

rescan-scsi-bus.sh: wget http://rescan-scsi-bus.sh/

iSCSI: iscsiadm -m iface -I iface0 –op=new iscsiadm -m iface -I iface1 –op=new iscsiadm -m iface -I iface0 –op=update -n iface.hwaddress -v\ 00:16:3E:XX:XX:XX iscsiadm -m iface -I iface1 –op=update -n iface.hwaddress -v\ 00:16:3E:XX:XX:XX

The above example sets up two interfaces. You get the hardware address for the NICs you want to use by checking the output of the “ifconfig” command. The interfaces must each be configured with an IP address that can reach the iSCSI target. Update: If you want to script the process, you can source the ifcfg-ethX files for the interfaces you want to use. Then you can refer to the HWADDR variable, e.g. . /etc/sysconfig/network-scripts/ifcfg-eth1 iscsiadm -m iface -I iface1 –op=update -n iface.hwaddress -v $HWADDR

Now you're ready to do your iSCSI discovery and login. Ping the iSCSI group IP address from each NIC to make sure it's reachable, and then:

iscsiadm -m discovery -t st -p 10.X.X.X
iscsiadm -m node --loginall=all
iscsiadm -m session

Mount on reboot:

iscsiadm -m discovery -t st -p %TARGETIP%
iscsiadm -m node --targetname "%TARGETLUNIQN%" --portal %TARGETIP% --login
mount -t cifs //server-name/share-name /mnt/cifs -o username=shareuser,password=sharepassword,domain=nixcraft

Change system language: /etc/default/locale:

LANG="en_US.UTF-8"
LANGUAGE="en_US:en"

If need, edit ~/.pam_environment:

LANG=en_US
Language=en_US

When I say broken “sudo dpkg-reconfigure locales” does not yield an interface that allows you to select and deselect locales. It simply generates the locales mentioned in “/var/lib/locales/supported.d/local” file. Therefore if you want to generate a bunch of locales you will need to add them to this file and re-run “dpkg-reconfigure locales”. NOTE: One locale per line. For a list of valid locales you can search through “/usr/share/i18n/SUPPORTED”.

echo 3 | tee /proc/sys/vm/drop_caches
free -m

To make sure you always have X amount of Ram available (in kilobytes), run: sysctl -w vm.min_free_kbytes=X To empty the page cache and the dirty write buffers with all committed transactions, run: sync && sysctl -w vm.drop_caches=3


get year-month-day from date

DATE=`date +%Y-%m-%d`

get year-month-day hour:minute:second from date

DATE=`date +%Y-%m-%d:%H:%M:%S`


let “arithmetic expression”

wiki/linux-unix.txt · Last modified: 2024/02/18 22:25 by ach