# get a nice prompt export PS1="\u@\h \t \w\n\\$ " # who , where and when uname -a ; id; date +%Y.%m.%d-%H:%M:%S; # start putty with preloaded session on windowz cmd /c start /max putty -load username@hostname # aliases # show dirs with nice time newest modified on top alias ll='ls -alt --time-style=long-iso' # find the only the uniq file names of specific file type find `pwd` -name '*.xml' | perl -pe 's/(.*)(\\|\/)(.*)/$3/;' | sort | uniq -u # find in files find / -name '*bash*' -exec grep -nHP '*APerlRegex*' {} \; # The ultimate "find in files" find /etc/httpd/ -type f -print0 | xargs --null grep -nHP 'StartServers\s+\d' | less # 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 1.2.41.2.4.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' # how to deal with command outputs command | filtercommand > command_output.txt 2>errors_from_command.txt # 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 #display the first 20 lines of the file head -n 20 tooLongFile # 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 # start winscp with a stored session from Win box cmd /c start /max winscp oracle@1.2.468.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 RUNNING 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 # change the password for the specified user (own password) passwd [username] #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; for file in `ls *.docx -1`;do echo cp $file ./backups/$file.`date +%Y%m%d%H%M%S`.docx;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.4: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.4: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|0x1.2.478e|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 # get running processes ps -ef # how-to kill misbehaving process ... you will need to adjust the -f 2 part # depending on the output of the ps -ef command above for pid in $(ps -ef | grep procToFind | perl -ne 's/\s+/ /g;print $_ . "\n";' | cut -d ' ' -f 2) ; do echo kill -9 $pid ; done ; for pid in $(ps -ef | grep chrome | perl -ne 's/\s+/ /g;print $_ . "\n";' | cut -d ' ' -f 2) ; do echo kill -9 $pid ; done ; #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 #how-to create an archieve tar cvf archive_name.tar dirname/ #unpack a file tar xvf “filename” #unpack 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 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' # print the word to find + the next 3 lines grep -A 3 -i "theWordToFind" demo_text 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 1.2.4211 -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 # shutdown the whole system shutdown -f -s 00 # 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 procName pidof procName kill -9 procName #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.4$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=listener-nat_filter_caller.sh # ps -ef | grep wget | perl -ne 'split /\s+/;print "kill $_[7] with PID $_[1] \n";`kill -9 $_[1];`' ps -ef | grep $ProcNameToKill | grep -v "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=/ 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 $_' # 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 # show me a nice calendar cal -m -3 # Start a tunnel from here (where we write the command) on port 10001, then go to server.com as user username and end the tunnel at a host called localhost on port 3689 over there ssh -L 10001:localhost:3689 username@server.com ssh -L 1573:localhost:1573 UnixUserName@infprod1.cc.elisa.fi # Purpose: # to provide a simple cheat sheet for most of the Linux related commands # VersionHistory # 1.8.1 --- 2012-07-19 23:15:48 --- ysg --- tar examples , refactor # 1.8.0 --- 2012-06-30 21:31:23 --- ysg --- tunnel one liner # 1.7.1 --- ysg --- calendar # 1.7.0 --- ysg --- removing HP-UX stuff # 1.6.0 --- ysg --- HP-UX check file sizes # 1.5.0 --- ysg --- Added tar and ssh-keygen # 1.4.0 --- ysg --- Added kill proc by name and du -BM for HP-UX # 1.3.0 --- ysg --- Added jobs control # 1.2.4 --- ysg --- Added system monitoring commands # 1.1.6 --- ysg --- refined du , replaced echo's with #'s # 1.0.0 --- ysg --- Initial creation
syntax highlighted by Code2HTML, v. 0.9.1