# File:NixCheatSheet.sh v.1.4.0 docs at the end
# how-to get a nice prompt on HP-UX
clear;export PS1=$USER'@'`hostname`:$PWD:`echo ``date +%Y.%m.%d-%H:%M:%S`` `:`echo "\n" $ " "`; clear;
# who , where and when
uname -a ;
id;
date +%Y.%m.%d-%H:%M:%S;
# all env vars starting with _
env | grep -e "^_"
ls -lt --time-style=long-iso
ls -alt --time-style=long-iso
# http://www.gnu.org/software/findutils/manual/html_mono/find.html
# The ultimate "find in files"
find /etc/httpd/ -type f -print0 | xargs --null grep -nHP 'StartServers\s+\d' | less
find / -name '*bash*' -exec grep -nHP '*APerlRegex*' {} \;
# or even faster , be aware of funny file names xargs -0
find / -name '*bak' -print0 | xargs --null grep -nPH 'curl'
# find and replace recursively
find . -name '*.html' -print0 | xargs -0 perl -pi -e 's/foo/bar/g'
# find all the files greather than 100 MB , sort them by the size and print their sizes
find / -type f -size +100M -exec du -B M {} \; | sort -r | less
# disk usage of users under the /home directory in MB
clear;du -all -m --max-depth=3 /home | sort -n -r | less
# where I have been lately ?
history | grep cd
# what I have opening recently
history | grep vi
#send my history
history | mailx -s "my history" $MyEmail
tcpdump dst 10.168.28.22 and tcp port 22
tcpdump dst 172.21.212.212
# record the current session via script
mkdir ~/scriptlogs
script -a ~/scriptlogs/`date +%Y%m%d%H%M%S`_script.log
#/usr/bin is for normal user executables, /usr/sbin is for superuser executables, /usr/sfw is for external software (like gnu one), but provided with bundle of OS, /usr/ccs is for development utilities, usually not need for daily tasks like make, lex, yacc, sccs
# take the last 5 commands for faster execution to the temp execution script
tail -n 5 /root/.bash_history >> /var/run.sh
# I saw the command cd /to/some/suching/dir/which/was/very/long/to/type
echo so I redid it and saved my fingers
!345
history | mail -s "test file sending" -c mail1@com yordan.georgiev(boom)gmail.com
# remove all trealing spaces from the history file works for TextPad
^([ ]*)([0-9]*)(.*)$
\3 --- replace with the pure commands
history | gawk -F1 'BEGIN {FS=" "};{print $2 , $3}' | less
# display the history oldest commands first withouth the line numbers ...
history | sort -nr | perl -i -pe 's/^([ ]*)([0-9]*)(.*)$/$3/gi'
vi fileName anotherFile
# how to deal with command outputs
command | filtercommand > command_output.txt 2>errors_from_command.txt
# Hint after the less filter pressing s will prompt you for saving the
output to a file ...
# find the files having os somewhere in their names and only those having linux
find . -name '*os*' | grep linux | less
# find all xml type of files and display only the rows having wordToFindInRow
find . -name '*.xml' -exec cat {} \;| grep wordToFindInRow | less
# putty , bash shortcuts
Ctrl + A --- Go to the beginning of the line you are currently typing on
Ctrl + E --- Go to the end of the line you are currently typing on
# how-to mount an usb stick
# remember to change the path other wise you will get the device is busy errror
mkdir /mnt/usbflash
mount /dev/sdb1 -t vfat /mnt/usbflash
umount /mnt/usbflash
head -n 20 tooLongFile -- display the first 20 lines of the file
# get a nice prompt
PS1="\u@\h \t \w\n\\$ "
# how to restart a process initiated at startup
/etc/rc.d/init.d/sendmail start | stop | status | restart
# see all the rules associated with the firewall
iptables -L -v
gunzip *file.zip
To access the server download winscp.exe:
# start winscp with a stored session from Win box
cmd /c start /max winscp oracle@192.168.255.12
# To start remote session click on the putty screen , configure putty
settings to pull full screen with alt + Enter
# right click on the title bar , settings , change the font , copy
paste from and to the terminal window text
# how to ensure the sshd daemon is running
ps -ef | grep sshd
# User and group management
useradd -p winscppass -r winscp -d /home/winscp --- to add a user with
specifig home directory name and pass
luserdel winscp --- delete the user
gpasswd: administer the /etc/group file
groupadd: Create a new group
groupmod: Modify a group
groupdel: Delete a new group
#useradd: Create a new user or update default new user information
#usermod: Modify a user account
#userdel: Delete a user account and related files
# how to kill process interactively
killall -v -i sshd
# the most efficent way to search your history is to hit Ctrl R and
type the start of the command. It will autocomplete as soon as there’s
a match to a history entry, then you just hit enter. If you want to
complete the command (add to it ) use the right arrow to
escape from the quick search box ...
#How to install Perl modules
gzip -dc yourmodule.tar.gz | tar -xof -
# create the make file
perl Makefile.PL
# test
make test
# install
make install
#How to see better which file were opened , which directories were visited
type always the fullpath after the vi - use the $PWD env variable to
open files in the current directory , thus after opening the file
after:
vi /$PWD , press tab to complete the name of the current directory ,
type the name of the file
thus after
history | grep vi
the full list of opened files is viwed .
of course the same could be seen from the /home/username/.viinfo file /files
#where to set the colors for the terminal (if you are lucky to have one
with colors ; )
/etc/DIR_COLORS
open a file containing "sh" in its name bellow the "/usr/lib" directory
:r !find /usr/lib -name *sh*
go over the file and gf
uname -a --- which version of Linux I am using
rmp -dev --- show all installed packages
passwd [username] --- change the password for the specified user (own password)
How to copy paste text in the putty window from client to server -
click the right button of your pointing device
How to copy paste text from the putty window from server to client -
right-click the window title and select copy all to Clipboard.
#To restart a service
service sshd restart
#
service --status-all --- show the status of all services
# change the owneership of the directory
chown -R userName:GroupName DirPath
# perform action recursively on a set of files
find . -name '*.pl' -exec perl -wc {} \;
for file in `find . -type f`;do echo cp $file ../backups/; done;
# make Bash append rather than overwrite the history on disk:
shopt -s histappend
# henever displaying the prompt, write the previous line to disk:
PROMPT_COMMMOR='history -a'
gpm -- general "cut and paste" server
sh ScriptWithALotOfErrorMessages.sh | tee -a whereToSaveIt.log
# run first the following command
script -a The_Log_File_To_Append_as_well_as_display_diagnostig_messages.log
# than run the script
sh ScriptWithALotOfErrorMessages.sh
#how-to replace single char in file
tr '\t' ',' < FileWithTabs > fileWithCommas
df -k --- disk usage
# Allow access to the box from only one ip address
IPTables=/sbin/iptables
$ IPTables -A INPUT -s <Insert other Origin ip here> -p tcp
--source-port xxx -j ACCEPT
$ IPTables -A OUTPUT -d < Insert other Origin ip here > -p tcp
--destination-port xxx-j ACCEPT
# has the root logged in over an unencrypted network ?
# next_line_is_templatized
# last | grep “^root “ | egrep –v “reboot|console” | morphus
# start command in the background
command1 &
# start another one
command2 &
# bring the command in the foreground
fg %1
# create a backup file based on the timestamp on bash
cp fileName.ext fileName.ext.`date +%Y%m%d%H%M%S`.bak
Unix commands:
FIX broken lines:
$ cat output.txt
a:b:c:1:2:3:2.3:henry
s:d:e:2:1:4:
54:user5
d:q:w:5:6:
3:5.2:alex
y:m:n:3:4:1:5.6:eiam
Output Required:
----------------
a:b:c:1:2:3:2.3:henry
s:d:e:2:1:4:54:user5
d:q:w:5:6:3:5.2:alex
y:m:n:3:4:1:5.6:eiam
$ awk '
BEGIN {
FS=":";
maxFLD=8;
}
{
while (NF < maxFLD || $0 ~ /\:$/ ) {
getline record;
$0 = $0 record
}
print $0
}
' file_name
Live example:
2009-07-10 13:51:31.939439|2009-07-10|2|1.1.6401.0.614513|0570817|1|-3||production|2.0.0|Series60|V 11.0.021|11.0.021.01.01|11.0.021.C01.01|244|05|862e-d2ac-4f03-9cbb|xmldatabinding 5.0|Xmldatabinding 5.0 for N-Gage
|x-epoc/x-sisx-app|0|4|1|3|0x101f978e|1.0.6|Company|N97|Country_variants_of_UK_Ireland
--------------------------------------------------------------------------------------------------------------------------------------
$ awk 'BEGIN {FS="|";maxFLD=30;}{while (NF < maxFLD || $0 ~ /\:$/ ) {getline record;$0 = $0 record} print $0}' file_name
---------------------------------------------------------------------------------------------------------------------------------------
Display lines which starts with “|”:
- $ Grep ‘^|’ file_name
Paste = shift + insert
Copy = ctrl + insert
df -h ***
id -u
ls –lrt
ps -ef
#unpack a file
tar xvf “filename”
#on hp-ux
gzip -cd FileName.tar.gz | tar -xvf -
fg (can be used to return to stopped window/process)
w (logged in users, idle or not?)
who (logged on users, from where)
who -r (show runlevel)
wc filename (lines, words, characters)
# print line number 52
sed -n '52p' # method 1
sed '52!d' # method 2
sed '52q;d' # method 3, efficient on large files
Remove/replace hex values from a file:
perl -i.bak -pe 's/(\xEF)(\xBF)(\xBD)/???/g' music_player_track.txt
Add user: useradd –u uid (esim. 2600) –c ‘description’ –d /homedir/ -g group –m –s /bin/bash username
Change passwd: passwd username
Example:
useradd -u 10302011 -c "FirstName LastName, DeparmentName, firstname.lastname@company.com" -m -d /export/home/firstlast -s /bin/bash firstlast
passwd -f login = forces to change password when logging in for the first time
#Ei saa näyttää yhtään vastausta:
passwd -s -a | grep NP (=No Password)
#/var/adm/loginlog sisältää kaikki epäonnistuneet loginyritykset…
#Alustus:
#!/bin/sh
log=/var/adm/loginlog
test -f "$log" && {
# "Good, $log exists already."
exit 0
}
touch $log || exit 1
chown root $log || exit 1
chgrp sys $log || exit 1
chmod 600 $log || exit 1
# "Initialized $log."
Use SVCCFG:
bash-3.00# svccfg
svc:> select cde-login
svc:/application/graphical-login/cde-login>
svc:/application/graphical-login/cde-login> setprop dtlogin/args=astring: "-udpPort 0"
svc:/application/graphical-login/cde-login> quit
bash-3.00# svcadm cde-login restart
Display lines that contain A or B
/usr/bin/egrep - i “A|B”
Ex. # ps -ef | /usr/bin/egrep - i “PID1|PID2”
START/ STOP scripts ( /etc/init.d/rc.script)
- create symbolic links from /etc/rc(0,1,2).d/K99sas --> /etc/init.d/rc.script
- create symbolic link from /etc/rc3.d/S99sas --> /etc/init.d/rc.script
Startscripts are executed in order where smallest number is executed first on each runlevel
ln –s source target
Normal Case
Put SXX in rc3.d
Put KXX in rc0.d, rc1.d, rc2.d, rcS.d
cd /etc/rc3.d
ln –s /etc/init.d/rc.script S99rcscript
cd /etc/rc0.d
ln -s /etc/init.d/rc.script K99rcscript
cd /etc/rc1.d
ln -s /etc/init.d/rc.script K99rcscript
cd /etc/rc2.d
ln -s /etc/init.d/rc.script K99rcscript
cd /etc/rcS.d
ln -s /etc/init.d/rc.script K99rcscript
RC scripts & Run Levels
Rc scripts performs the following functions :
a) They check and mount the file systems
b) Start and stop the various processes like network , nfs etc.
c) Perform some of the house keeping jobs.
System goes in to one of the following run level after booting depending on default run level and the commands issued for changing the run level to some other one.
0 Boot prom level ok> or > prompt in Sun.
1 Administrative run level . Single user mode
2 Multiuser mode with no resource sharing .
3 Multiuser level with nfs resource sharing
4 Not used
5 Shutdown & power off (Sun 4m and 4u architecture )
6 Reboot to default run level
S s Single user mode user logins are disabled.
Broadly speaking the running system can be in any of the folloing state
Single user – Minimum processes running , user logins disabled and root password is required to gain access to the shell .
Multiuser - All system processes are running and user logins are permitted
Run level of a desired state is achieved by a number of scripts executed by the rc program the rc scripts are located in /etc/rc0.d , /etc/rc1.d , /etc/rc2.d , /etc/rc3.d & /etc/rcS.d directories . All the files of a particular run level are executed in the alphanumeric order .Those files beginning with letter S starts the processes and those beginning with K stops the processes.
These files are hard linked to the files in /etc/init.d in order to provide a central location for all these files and eliminating the need to change the run level in case these scripts needs to be run separately . The files in /etc/init.d directory are without any S , K and numeric prefix instead a stop / start argument has to be supplied whenever these scripts are to be executed .
By default system has a number of rc scripts needed for run level transition but sometimes it becomes necessary to start some custom scripts at the booting time and turn them off at the shutdown . Custom scripts can be put in any of the required rc directory but following major considerations has to be kept in mind :
• The sequence number of the file should not conflict with other files.
• The sevices needed should be available by previously executed scripts.
• File should be hard linked to the /etc/init.d directory .
• The system looks for only those files beginning with letter K & S , any thing else is ignored , therefore, to make a file inactive simply changing uppercase K or S to lower case will cause system to ignore it .
The scripts that begin with a K are used to kill processes when exiting a specific runlevel. In the listing above, the K scripts would be used when terminating runlevel 3. The scripts that start with an S are used when starting runlevel 3. None of the items in rc3.d, however, is really a startup script. They are logical links to the real scripts, which are located in the /etc/rc.d/init.d directory. For example, S80sendmail is linked to init.d/sendmail. This raises the question of why the scripts are executed from the directory rc3.d instead of directly from init.d where they actually reside. The reasons are simple. The same scripts are needed for several different runlevels. Using logical links, the scripts can be stored in one place and still be accessed by every runlevel from the directory used by that runlevel.
Scripts are executed in alphabetical order. Thus S10network is executed before S80sendmail. This allows the system to control the order in which scripts are executed through simple naming conventions. Different runlevels can execute the scripts in different orders while still allowing the real scripts in init.d to have simple, descriptive names. A listing of the init.d directory shows these descriptive names:
VI COMMMORS
Move with cursor: h,j,k,l
Beginning of line: 0
Corrections during INSERT:
- CTRL+H delete last character
Append after cursor: a
Append at the end of line: A
Yanked: y
Put: p – puts back yanked or deletet text after cursor
#Undo last change:
u
#Restore curren line:
U
#Repeat last change:
.
#Repeat last command
: n
#Replace (sed):
:%s/old value/new value/
#Copy: CTRL+INSERT
#PASTe: SHIFT+INSERT
#EXTRACT *.tar.gz on HP-UX:
gzip -dc some.tar.gz | tar xvf –
Single file:
gzip -dc fileName.tar.gz | tar -xvf - filename
find . -name '*.log' -print | zip cipdq`date +%Y%m%d%H%M%S` -@
find / -type f | xargs grep -nH 'curl'
find . -type f -name '*.sh' -print -exec grep -n gpg {} \;
#where am I
uname -a ;
#who am I
id ;
# when this is happening
date "+%Y.%m.%d %H:%M:%S" ;
useradd -u 12202211 -c "First Name , LastName, Teamp , firstName.LastName@company.com" -m -d /export/home/userName -s /bin/bash userName
#obsolete
skill -STOP -u userToKick
pkill -STOP -u userToKick
# reboot ... !!! BOOM BOOM BOOM !!!
shutdown -r now
# check all available commands on my system
echo -n $PATH | xargs -d : -I {} find {} -maxdepth 1 -type f -printf '%P\n' | sort -u | less
#how-to kill a process
ps aux | grep omniture
pidof omniture
kill -9 omniture
#what cpu am a running
less /proc/cpuinfo
# which processes are listening on my system
netstat --tcp --listening --programs
netstat --tcp
netstat --route
#source: http://www.yolinux.com/TUTORIALS/LinuxTutorialSysAdmin.html#MONITOR
#monitoring commands
# show the top processes
top
# running processes status
ps -auxw | less
ps -ef | less
#List all currently loaded kernel modules
lsmod | less
#Displays the system's current runlevel.
/sbin/runlevel
# get the Processes attached to open files or open network ports:
lsoff | less
# monitor the virtual memory
vmstat
#Display/examine memory map and libraries (so). Usage: pmap pid
ps -aux | grep <<MyProcToPMap>>
pmap <<MyprocToPMapPID>>
history | gawk -F1 'BEGIN {FS=" "};{print $2 , $3}'
pmap -x 4041 | gawk -F1 'BEGIN {FS=" "};{print $2 ,"\t" , $5 , "\t" , $6 , "\t", $7 , $8}' | sort -nr
#how-to sort output by a delimited by single delimiter column
# in this example the - char is used for delimiter , the output is
# by their sending sequence , use proper file naming convention files
# ls -1 gives us:
# fileBeginningTillFirstDelimiter-TheColumnToSortBy-TheRestFromTheFileNameDelimiter
ls -1 | awk -F1 'BEGIN {FS="-"};{print $2 "¤" $1 "-" $2 "-" $3 }' | sort -nr | cut -d ¤ -f 2,5
# the same approach with perl
ls -1 | perl -p -i -e 's/^([^\-]*)(\-)([^\-]*)(\-)([^\-]*)/$3¤$1$2$3$4$5/g' | sort -nr | cut -d ¤ -f 2,5
# how-to use sftp with remoteUserName having publicIdentity of PublicIdentityUserName
sftp -v -o "IdentityFile /var/www/.ssh-id/PublicIdentityUserName" -o "UserKnownHostsFile /var/www/.ssh-id/known_hosts" remoteUserName@ServerHostNameOrIpd
# ==================================================================
# START Jobs control
# start some very long lasting command
find / -name '*.crt' | less
# now press Ctrl + Z
# the terminal says "Jobs stopped"
# now check the open jobs
jobs
# you should see something like
# [1]+ Stopped find / -name '*.crt' | less
# now put the job in the background and start working on something else by Ctrl + Z
bg 1
# run the next command
# how-to copy file via scp by using specificy identity
scp -v -o "IdentityFile /home/userName/.ssh/id_rsa" /data/path/dir/* userName@ServerHostName.Domain.com:/Server/Target/Dir/
# now again stop the job first by Ctrl + Z
# check again the running jobs
jobs
# use should see the both of the jobs started
# now put the first on in the forground
fg 1
# Repeat that several times untill you get it ; ) !!!
# END Jobs control
# ==================================================================
nicedate=`date +%Z-%Y%m%d%H%M%S`
# kill a process by name
ProcNameToKill=sftp
# ps -ef | grep wget | perl -ne 'split /\s+/;print "kill $_[7] with PID $_[1] \n";`kill -9 $_[1];`'
ps -ef | grep $ProcNameToKill | perl -ne 'split /\s+/;print "kill $_[7] with PID $_[1] \n";`kill -9 $_[1];`'
# how-to display human readable file sizes on systems with stupid du
# of course you would have to have perl next_line_is_templatized
find `pwd` -type f -exec du -k {} \; | perl -ne 'split /\s+/;my $SizesInMegs=$_[0]/1024;printf ( "%10d %10s \n" , "$SizesInMegs" , "MB $_[1]")' | sort -nr | morphus
export dir=/opt/path/to/dir
echo sizes in MB
find $dir -type f -exec du -k {} \; | perl -ne 'split /\s+/;my $SizesInMegs=$_[0]/1024;printf ( "%10d %-100s \n" , "$SizesInMegs" , "$_[1]")' | sort -nr | more
#who has been accessing via ssh
for file in `find /var/log/secure* | sort -rn` ; do grep -nHP 'mfe' $file ; done; | less
#print files recursively
dir=/opt/path/to/dir
clear;find $dir -type f -exec ls -alt --time-style=long-iso --color=tty {} \; | perl -ne 'split(/\s+/);printf ( "%10s %2s %-20s \n" , "$_[5]", "$_[6]", "$_[7]") ; ' | sort -nr
#how-to print relative file paths to /some/DirName with perl one liner
find /some/DirName -type f | perl -ne 'split/DirName\//;print "$_[1]" '
# see nice dir recursively listing newest first
dir=/tmp
find $dir -name '*.tmp' -exec ls -alt --time-style=long-iso --color=tty {} \; | perl -ne 'split/\s+/;print "$_[5] $_[6] $_[7] \n" ;' | sort -nr | less
# how-to sort files based on a number sequence in their file names
# list dir files , grap a number from their names , print with NumberFileName, sort , print finally the names without the Number but sorted
ls -1 | perl -ne 'm/(\d{8})/; print $1 . $_ ;' | sort -nr | perl -ne 's/(\d{8})//;print $_'
#how-to create relative file paths tar package recursively fromm a dir
cd <<RootDirToStartRelativePathsFrom>>
tar -cvzpf <<PackageToCreate>>.tar <<DirToPackRecursively>>
# exctract tar file into cd
tar -xvf <<PackageToExctractInCurrentDir>>.tar
#source:http://mywiki.wooledge.org/BashFAQ/002
# get the STDERR and STDOUTPUT
output=$(command 2>&1)
# create pub priv keys on server
ssh-keygen -t rsa
# add pub key from client to authorized_keys files on server
cat id_rsa.pub >> ~/.ssh/authorized_keys
# VersionHistory
# 1.5.0 --- Added tar and ssh-keygen
# 1.4.0 --- Added kill proc by name and du -BM for HP-UX
# 1.3.0 --- Added jobs control
# 1.2.0 --- Added system monitoring commands
# 1.1.6 --- refined du , replaced echo's with #'s
# 1.0.0 --- Initial creation