Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Unix Toolbox.pdf

Avatar for nackajima nackajima
January 30, 2012
350

Unix Toolbox.pdf

Avatar for nackajima

nackajima

January 30, 2012

Transcript

  1. U N I X T O O L B O

    X 4GHR CNBTLDMS HR @ BNKKDBSHNM NE 5MHW,HMTW"3$ BNLL@MCR @MC S@RJR VGHBG @QD TRDETK ENQ )4 VNQJ NQ ENQ @CU@MBDC TRDQR 4GHR HR @ OQ@BSHB@K FTHCD VHSG BNMBHRD DWOK@M@SHNMR GNVDUDQ SGD QD@CDQ HR RTOONRDCSNJMNVVG@SRGDHRCNHMF  3XRSDL    0QNBDRRDR    &HKD3XRSDL    .DSVNQJ   33(3#0    60.VHSG33(    239.#    35$/    %MBQXOS&HKDR    %MBQXOS0@QSHSHNMR    33,#DQSHEHB@SDR    #63   36.    5RDETK#NLL@MCR    )MRS@KK3NESV@QD    #NMUDQS-DCH@    0QHMSHMF    $@S@A@RDR   $HRJ1TNS@    3GDKKR    3BQHOSHMF    0QNFQ@LLHMF    /MKHMD(DKO   5MHW4NNKANWQDUHRHNM 4GD K@SDRS UDQRHNM NE SGHR CNBTLDMS B@M AD ENTMC @S GSSOBAUTTMHWSNNKANWWGSLK 2DOK@BD WGSLK NM SGD KHMJ VHSG OCE ENQ SGD 0$& UDQRHNM @MC VHSG ANNJOCE ENQ SGD ANNJKDS UDQRHNM /M @ CTOKDW OQHMSDQSGDANNJKDSVHKKBQD@SD@RL@KKANNJQD@CXSNAHMC3DD@KRNSGD @ANTSO@FD %QQNQQDONQSR@MCBNLLDMSR@QDLNRSVDKBNLD B BAUT #NKHM"@QRBGDK
  2. 1 S YS TE M (@QCV@QD O [ 3S@SHRSHBR O

    [ 5RDQR O [ ,HLHSR O [ 2TMKDUDKR O [ QNNS O@RRVNQC O [ #NLOHKDJDQMDK O [ 2DO@HQFQTA O 2TMMHMFJDQMDK@MCRXRSDLHMENQL@SHNM # uname -a # Get the kernel version (and BSD version) # lsb_release -a # Full release info of any LSB distribution # cat /etc/SuSE-release # Get SuSE version # cat /etc/debian_version # Get Debian version 5RD DSBDISTR QDKD@RD VHSG DISTR= KRA 5ATMST QDCG@S FDMSNN L@MCQ@JD RTM 3NK@QHR @MC RN NM3DD@KRN /etc/issue # uptime # Show how long the system has been running + load # hostname # system's host name # hostname -i # Display the IP address of the host. (Linux only) # man hier # Description of the file system hierarchy # last reboot # Show system reboot history 1.1 Hardware Informations +DQMDKCDSDBSDCG@QCV@QD # dmesg # Detected hardware and boot messages # lsdev # information about installed hardware # dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8 # Read BIOS Linux # cat /proc/cpuinfo # CPU model # cat /proc/meminfo # Hardware memory # grep MemTotal /proc/meminfo # Display the physical memory # watch -n1 'cat /proc/interrupts' # Watch changeable interrupts continuously # free -m # Used and free memory (-m for MB) # cat /proc/devices # Configured devices # lspci -tv # Show PCI devices # lsusb -tv # Show USB devices # lshal # Show a list of all devices with their properties # dmidecode # Show DMI/SMBIOS: hw info from the BIOS FreeBSD # sysctl hw.model # CPU model # sysctl hw # Gives a lot of hardware information # sysctl hw.ncpu # number of active CPUs installed # sysctl vm # Memory usage # sysctl hw.realmem # Hardware memory # sysctl -a | grep mem # Kernel memory settings and info # sysctl dev # Configured devices # pciconf -l -cv # Show PCI devices # usbdevs -v # Show USB devices # atacontrol list # Show ATA devices # camcontrol devlist -v # Show SCSI devices 1.2 Load, statistics and messages 4GDENKKNVHMFBNLL@MCR@QDTRDETKSNEHMCNTSVG@SHRFNHMFNMNMSGDRXRSDL # top # display and update the top cpu processes # mpstat 1 # display processors related statistics # vmstat 2 # display virtual memory statistics # iostat 2 # display I/O statistics (2 s intervals) # systat -vmstat 1 # BSD summary of system statistics (1 s intervals) # systat -tcp 1 # BSD tcp connections (try also -ip) # systat -netstat 1 # BSD active network connections # systat -ifstat 1 # BSD network traffic through active interfaces 
  3. # systat -iostat 1 # BSD CPU and and disk

    throughput # tail -n 500 /var/log/messages # Last 500 kernel/syslog messages # tail /var/log/warn # System warnings messages see syslog.conf 1.3 Users # id # Show the active user id with login and group # last # Show last logins on the system # who # Show who is logged on the system # groupadd admin # Add group "admin" and user colin (Linux/Solaris) # useradd -c "Colin Barschel" -g admin -m colin # usermod -a -G <group> <user> # Add existing user to group (Debian) # groupmod -A <user> <group> # Add existing user to group (SuSE) # userdel colin # Delete user colin (Linux/Solaris) # adduser joe # FreeBSD add user joe (interactive) # rmuser joe # FreeBSD delete user joe (interactive) # pw groupadd admin # Use pw on FreeBSD # pw groupmod admin -m newmember # Add a new member to a group # pw useradd colin -c "Colin Barschel" -g admin -m -s /bin/tcsh # pw userdel colin; pw groupdel admin %MBQXOSDC O@RRVNQCR @QD RSNQDC HM DSBRG@CNV ENQ ,HMTW @MC 3NK@QHR @MC DSBL@RSDQO@RRVC NM &QDD"3$ )E SGD L@RSDQO@RRVC HR LNCHEHDC L@MT@KKX R@X SN CDKDSD @ O@RRVNQC QTM # pwd_mkdb -p master.passwd SNQDATHKCSGDC@S@A@RD 4N SDLONQ@QHKX OQDUDMS KNFHMR RXRSDL VHCD ENQ @KK TRDQR ATS QNNS TRD MNKNFHM 4GD LDRR@FD HM MNKNFHMVHKKADCHROK@XDCLHFGSMNSVNQJVHSGRRGOQD RG@QDCJDXR  # echo "Sorry no login now" > /etc/nologin # (Linux) # echo "Sorry no login now" > /var/run/nologin # (FreeBSD) 1.4 Limits 3NLD @OOKHB@SHNM QDPTHQD GHFGDQ KHLHSR NM NODM EHKDR @MC RNBJDSR KHJD @ OQNWX VDA RDQUDQ C@S@A@RD 4GDCDE@TKSKHLHSR@QDTRT@KKXSNNKNV Linux Per shell/script 4GD RGDKK KHLHSR @QD FNUDQMDC AX ulimit 4GD RS@STR HR BGDBJDC VHSG ulimit -a &NQ DW@LOKD SN BG@MFDSGDNODMEHKDRKHLHSEQNLSNCN # ulimit -n 10240 # This is only valid within the shell 4GD ulimit BNLL@MCB@MADTRDCHM@RBQHOSSNBG@MFDSGDKHLHSRENQSGDRBQHOSNMKX Per user/process ,NFHMTRDQR@MC@OOKHB@SHNMRB@MADBNMEHFTQDCHM /etc/security/limits.conf&NQDW@LOKD # cat /etc/security/limits.conf * hard nproc 250 # Limit user processes asterisk hard nofile 409600 # Limit application open files System wide +DQMDKKHLHSR@QDRDSVHSGRXRBSK0DQL@MDMSKHLHSR@QDRDSHM /etc/sysctl.conf # sysctl -a # View all system limits # sysctl fs.file-max # View max open files limit # sysctl fs.file-max=102400 # Change max open files limit # echo "1024 50000" > /proc/sys/net/ipv4/ip_local_port_range # port range # cat /etc/sysctl.conf fs.file-max=102400 # Permanent entry in sysctl.conf # cat /proc/sys/fs/file-nr # How many file descriptors are in use 
  4. FreeBSD Per shell/script 5RDSGDBNLL@MC limits HMBRGNQSBRGNQ@RHM,HMTW TRD ulimit HM@MRGNQA@RGRGDKK Per

    user/process 4GD CDE@TKS KHLHSR NM KNFHM @QD RDS HM /etc/login.conf !M TMKHLHSDC U@KTD HR RSHKK KHLHSDC AX SGD RXRSDLL@WHL@KU@KTD System wide +DQMDK KHLHSR @QD @KRN RDS VHSG RXRBSK 0DQL@MDMS KHLHSR @QD RDS HM /etc/sysctl.conf NQ /boot/ loader.conf4GDRXMS@WHRSGDR@LD@R,HMTWATSSGDJDXR@QDCHEEDQDMS # sysctl -a # View all system limits # sysctl kern.maxfiles=XXXX # maximum number of file descriptors kern.ipc.nmbclusters=32768 # Permanent entry in /etc/sysctl.conf kern.maxfiles=65536 # Typical values for Squid kern.maxfilesperproc=32768 kern.ipc.somaxconn=8192 # TCP queue. Better for apache/sendmail # sysctl kern.openfiles # How many file descriptors are in use # sysctl kern.ipc.numopensockets # How many open sockets are in use # sysctl net.inet.ip.portrange.last=50000 # Default is 1024-5000 # netstat -m # network memory buffers statistics 3DD4GD &QDD"3$G@MCANNJ#G@OSDQ ENQCDS@HKR Solaris 4GDENKKNVHMFU@KTDRHM /etc/system VHKKHMBQD@RDSGDL@WHLTLEHKDCDRBQHOSNQRODQOQNB set rlim_fd_max = 4096 # Hard limit on file descriptors for a single proc set rlim_fd_cur = 1024 # Soft limit on file descriptors for a single proc 1.5 Runlevels Linux /MBD ANNSDC SGD JDQMDK RS@QSR init VGHBG SGDM RS@QSR rc VGHBG RS@QSR @KK RBQHOSR ADKNMFHMF SN @ QTMKDUDK 4GD RBQHOSR @QD RSNQDC HM DSBHMHSC @MC @QD KHMJDC HMSN DSBQBCQB.C VHSG . SGD QTMKDUDK MTLADQ 4GDCDE@TKSQTMKDUDKHRBNMEHFTQDCHMDSBHMHSS@A)SHRTRT@KKXNQ # grep default: /etc/inittab id:3:initdefault: 4GD@BST@KQTMKDUDKB@MADBG@MFDCVHSG init&NQDW@LOKDSNFNEQNLSN # init 5 # Enters runlevel 5  3GTSCNVM@MCG@KS  3HMFKD 5RDQLNCD@KRN3  -TKSH TRDQVHSGNTSMDSVNQJ  -TKSH TRDQVHSGMDSVNQJ  -TKSH TRDQVHSG8  2DANNS 5RD chkconfig SNBNMEHFTQDSGDOQNFQ@LRSG@SVHKKADRS@QSDC@SANNSHM@QTMKDUDK # chkconfig --list # List all init scripts # chkconfig --list sshd # Report the status of sshd # chkconfig sshd --level 35 on # Configure sshd for levels 3 and 5 # chkconfig sshd off # Disable sshd for all runlevels $DAH@M @MC $DAH@M A@RDC CHRSQHATSHNMR KHJD 5ATMST NQ +MNOOHW TRD SGD BNLL@MC update-rc.d SN L@M@FDSGDQTMKDUDKRRBQHOSR$DE@TKSHRSNRS@QSHM  @MC@MCRGTSCNVMHM @MC # update-rc.d sshd defaults # Activate sshd with the default runlevels # update-rc.d sshd start 20 2 3 4 5 . stop 20 0 1 6 . # With explicit arguments GSSOVVVEQDDARCNQFG@MCANNJBNMEHFSTMHMF JDQMDK KHLHSRGSLK 
  5. # update-rc.d -f sshd remove # Disable sshd for all

    runlevels # shutdown -h now (or # poweroff) # Shutdown and halt the system FreeBSD 4GD "3$ ANNS @OOQN@BG HR CHEEDQDMS EQNL SGD 3XR6 SGDQD @QD MN QTMKDUDKR 4GD EHM@K ANNS RS@SD RHMFKD TRDQ VHSG NQ VHSGNTS 8 HR BNMEHFTQDC HM /etc/ttys !KK /3 RBQHOSR @QD KNB@SDC HM /etc/ rc.d/ @MC HM /usr/local/etc/rc.d/ ENQ SGHQC O@QSX @OOKHB@SHNMR 4GD @BSHU@SHNM NE SGD RDQUHBD HR BNMEHFTQDC HM /etc/rc.conf @MC /etc/rc.conf.local 4GD CDE@TKS ADG@UHNQ HR BNMEHFTQDC HM /etc/ defaults/rc.conf4GDRBQHOSRQDRONMCR@SKD@RSSNRS@QS[RSNO[RS@STR # /etc/rc.d/sshd status sshd is running as pid 552. # shutdown now # Go into single-user mode # exit # Go back to multi-user mode # shutdown -p now # Shutdown and halt the system # shutdown -r now # Reboot 4GD OQNBDRR init B@M @KRN AD TRDC SN QD@BG NMD NE SGD ENKKNVHMF RS@SDR KDUDK &NQ DW@LOKD # init 6 ENQQDANNS  (@KS@MCSTQMSGDONVDQNEERHFM@K USR2  'NSNRHMFKD TRDQLNCDRHFM@K TERM  2DANNSSGDL@BGHMDRHFM@K INT B "KNBJETQSGDQKNFHMRRHFM@K TSTP P 2DRB@MSGDSSXR EHKDRHFM@K HUP Windows 3S@QS @MC RSNO @ RDQUHBD VHSG DHSGDQ SGD service name NQ "service description" RGNVM HM SGD 3DQUHBDR#NMSQNK0@MDK @RENKKNVR net stop WSearch net start WSearch # start search service net stop "Windows Search" net start "Windows Search" # same as above using descr. 1.6 Reset root password Linux method 1 !SSGDANNSKN@CDQKHKNNQFQTA DMSDQSGDENKKNVHMFANNSNOSHNM init=/bin/sh 4GD JDQMDK VHKK LNTMS SGD QNNS O@QSHSHNM @MC init VHKK RS@QS SGD ANTQMD RGDKK HMRSD@C NE rc @MC SGDM @ QTMKDUDK 5RD SGD BNLL@MC passwd @S SGD OQNLOS SN BG@MFD SGD O@RRVNQC @MC SGDM QDANNS &NQFDS SGDRHMFKDTRDQLNCD@RXNTMDDCSGDO@RRVNQCENQSG@S )E @ESDQANNSHMF SGDQNNSO@QSHSHNMHRLNTMSDCQD@CNMKX QDLNTMSHSQV # mount -o remount,rw / # passwd # or delete the root password (/etc/shadow) # sync; mount -o remount,ro / # sync before to remount read only # reboot FreeBSD method 1 /M &QDD"3$ ANNS HM RHMFKD TRDQ LNCD QDLNTMS  QV @MC TRD O@RRVC 9NT B@M RDKDBS SGD RHMFKD TRDQ LNCD NM SGD ANNS LDMT NOSHNM  VGHBG HR CHROK@XDC ENQ  RDBNMCR @S RS@QSTO 4GD RHMFKD TRDQLNCDVHKKFHUDXNT@QNNSRGDKKNMSGDO@QSHSHNM # mount -u /; mount -a # will mount / rw # passwd # reboot 
  6. Unixes and FreeBSD and Linux method 2 /SGDQ 5MHWDR LHFGS

    MNS KDS XNT FN @V@X VHSG SGD RHLOKD HMHS SQHBJ 4GD RNKTSHNM HR SN LNTMS SGD QNNS O@QSHSHNMEQNL@MNSGDQ/3KHJD@QDRBTD#$ @MCBG@MFDSGDO@RRVNQCNMSGDCHRJ a "NNS@KHUD#$NQHMRS@KK@SHNM#$HMSN@QDRBTDLNCDVGHBGVHKKFHUDXNT@RGDKK a &HMCSGDQNNSO@QSHSHNMVHSGECHRJDFECHRJCDURC@ a -NTMSHS@MCTRDBGQNNS # mount -o rw /dev/ad4s3a /mnt # chroot /mnt # chroot into /mnt # passwd # reboot 1.7 Kernel modules Linux # lsmod # List all modules loaded in the kernel # modprobe isdn # To load a module (here isdn) FreeBSD # kldstat # List all modules loaded in the kernel # kldload crypto # To load a module (here crypto) 1.8 Compile Kernel Linux # cd /usr/src/linux # make mrproper # Clean everything, including config files # make oldconfig # Reuse the old .config if existent # make menuconfig # or xconfig (Qt) or gconfig (GTK) # make # Create a compressed kernel image # make modules # Compile the modules # make modules_install # Install the modules # make install # Install the kernel # reboot FreeBSD /OSHNM@KKXTOC@SDSGDRNTQBDSQDDHM /usr/src VHSGBRTO@RNE&QDD"3$NQK@SDQ  # csup <supfile> )TRDSGDENKKNVHMFRTOEHKD *default host=cvsup5.FreeBSD.org # www.freebsd.org/handbook/cvsup.html#CVSUP-MIRRORS *default prefix=/usr *default base=/var/db *default release=cvs delete tag=RELENG_7 src-all 4N LNCHEX @MC QDATHKC SGD JDQMDK BNOX SGD FDMDQHB BNMEHFTQ@SHNM EHKD SN @ MDV M@LD @MC DCHS HS @R MDDCDC XNT B@M @KRN DCHS SGD EHKD GENERIC CHQDBSKX  4N QDRS@QS SGD ATHKC @ESDQ @M HMSDQQTOSHNM @CC SGDNOSHNM NO_CLEAN=YES SNSGDL@JDBNLL@MCSN@UNHCBKD@MHMFSGDNAIDBSR@KQD@CXATHKC # cd /usr/src/sys/i386/conf/ # cp GENERIC MYKERNEL # cd /usr/src # make buildkernel KERNCONF=MYKERNEL # make installkernel KERNCONF=MYKERNEL 4NQDATHKCSGDETKK/3 # make buildworld # Build the full OS but not the kernel # make buildkernel # Use KERNCONF as above if appropriate # make installkernel # reboot # mergemaster -p # Compares only files known to be essential 
  7. # make installworld # mergemaster -i -U # Update all

    configurations and other files # reboot &NQRL@KKBG@MFDRHMSGDRNTQBDXNTB@MTRD./?#,%!.XDRSN@UNHCQDATHKCHMFSGDVGNKDSQDD # make buildworld NO_CLEAN=yes # Don't delete the old objects # make buildkernel KERNCONF=MYKERNEL NO_CLEAN=yes 1.9 Repair grub 3N XNT AQNJD FQTA "NNS EQNL @ KHUD BC ;EHMC XNTQ KHMTW O@QSHSHNM TMCDQ /dev @MC TRD fdisk SN EHMC SGD KHMTW O@QSHNM= LNTMS SGD KHMTW O@QSHSHNM @CC OQNB @MC CDU @MC TRD grub-install /dev/xyz 3TOONRDKHMTWKHDRNM /dev/sda6 # mount /dev/sda6 /mnt # mount the linux partition on /mnt # mount --bind /proc /mnt/proc # mount the proc subsystem into /mnt # mount --bind /dev /mnt/dev # mount the devices into /mnt # chroot /mnt # change root to the linux partition # grub-install /dev/sda # reinstall grub with your old settings 2 PROCE S S ES ,HRSHMF O [ 0QHNQHSX O [ "@BJFQNTMC&NQDFQNTMC O [ 4NO O [ +HKK O 2.1 Listing and PIDs %@BGOQNBDRRG@R@TMHPTDMTLADQ SGD0)$!KHRSNE@KKQTMMHMFOQNBDRRHRQDSQHDUDCVHSG ps # ps -auxefw # Extensive list of all running process (NVDUDQ LNQD SXOHB@K TR@FD HR VHSG @ OHOD NQ VHSG pgrep ENQ /3 8 HMRS@KK proctools EQNL -@B0NQSR O@FD  # ps axww | grep cron 586 ?? Is 0:01.48 /usr/sbin/cron -s # ps axjf # All processes in a tree format (Linux) # ps aux | grep 'ss[h]' # Find all ssh pids without the grep pid # pgrep -l sshd # Find the PIDs of processes by (part of) name # echo $$ # The PID of your shell # fuser -va 22/tcp # List processes using port 22 (Linux) # pmap PID # Memory map of process (hunt memory leaks) (Linux) # fuser -va /home # List processes accessing the /home partition # strace df # Trace system calls and signals # truss df # same as above on FreeBSD/Solaris/Unixware 2.2 Priority #G@MFD SGD OQHNQHSX NE @ QTMMHMF OQNBDRR VHSG renice Negative numbers have a higher priority SGDKNVDRSHR @MCMHBDG@UD@ONRHSHUDU@KTD # renice -5 586 # Stronger priority 586: old priority 0, new priority -5 3S@QS SGD OQNBDRR VHSG @ CDEHMDC OQHNQHSX VHSG nice 0NRHSHUD HR MHBD NQ VD@J MDF@SHUD HR RSQNMF RBGDCTKHMF OQHNQHSX -@JD RTQD XNT JMNV HE /usr/bin/nice NQ SGD RGDKK ATHKS HM HR TRDC BGDBJ VHSG # which nice  # nice -n -5 top # Stronger priority (/usr/bin/nice) # nice -n 5 top # Weaker priority (/usr/bin/nice) # nice +5 top # tcsh builtin nice (same as above!) 7GHKD MHBD BG@MFDR SGD #05 RBGDCTKDQ @M NSGDQ TRDETK BNLL@MC ionice VHKK RBGDCTKD SGD CHRJ )/ 4GHR HR UDQX TRDETK ENQ HMSDMRHUD )/ @OOKHB@SHNM DF BNLOHKHMF  9NT B@M RDKDBS @ BK@RR HCKD ADRS DEENQS QD@KSHLD SGDL@MO@FDHRRGNQS@MCVDKKDWOK@HMDC 
  8. # ionice c3 -p123 # set idle class for pid

    123 (Linux only) # ionice -c2 -n0 firefox # Run firefox with best effort and high priority # ionice -c3 -p$$ # Set the actual shell to idle priority 4GD K@RS BNLL@MC HR UDQX TRDETK SN BNLOHKD NQ CDATF @ K@QFD OQNIDBS %UDQX BNLL@MC K@TMBGDC EQNLSGHRRGDKKVHKKG@UD@KNUDQOQHNQHSX $$ HRXNTQRGDKKOHCSQXDBGN  &QDD"3$TRDR idprio/rtprio L@WOQHNQHSX LNRSHCKD  # idprio 31 make # compile in the lowest priority # idprio 31 -1234 # set PID 1234 with lowest priority # idprio -t -1234 # -t removes any real time/idle priority 2.3 Background/Foreground 7GDM RS@QSDC EQNL @ RGDKK OQNBDRRDR B@M AD AQNTFGS HM SGD A@BJFQNTMC @MC A@BJ SN SGD ENQDFQNTMC VHSG;#SQK= ;:=>: bg @MC fg,HRSSGDOQNBDRRDRVHSG jobs # ping cb.vu > ping.log ^Z # ping is suspended (stopped) with [Ctrl]-[Z] # bg # put in background and continues running # jobs -l # List processes in background [1] - 36232 Running ping cb.vu > ping.log [2] + 36233 Suspended (tty output) top # fg %2 # Bring process 2 back in foreground 5RD nohup SN RS@QS @ OQNBDRR VGHBG G@R SN JDDO QTMMHMF VGDM SGD RGDKK HR BKNRDC HLLTMD SN G@MFTOR  # nohup ping -i 60 > ping.log & 2.4 Top 4GD OQNFQ@L top CHROK@XR QTMMHMF HMENQL@SHNM NE OQNBDRRDR 3DD @KRN SGD OQNFQ@L htop EQNL GSNORNTQBDENQFDMDS @ LNQD ONVDQETK UDQRHNM NE SNO VGHBG QTMR NM ,HMTW @MC &QDD"3$ ports/ sysutils/htop/ 7GHKDSNOHRQTMMHMFOQDRRSGDJDXGENQ@GDKONUDQUHDV5RDETKJDXR@QD a u [user name] 4N CHROK@X NMKX SGD OQNBDRRDR ADKNMFHMF SN SGD TRDQ 5RD NQ AK@MJ SN RDD @KKTRDQR a k [pid] +HKKSGDOQNBDRRVHSGOHC a 1 4NCHROK@X@KKOQNBDRRNQRRS@SHRSHBR,HMTWNMKX a R 4NFFKDMNQL@KQDUDQRDRNQS 2.5 Signals/Kill 4DQLHM@SDNQRDMC@RHFM@KVHSG kill NQ killall # ping -i 60 cb.vu > ping.log & [1] 4712 # kill -s TERM 4712 # same as kill -15 4712 # killall -1 httpd # Kill HUP processes by exact name # pkill -9 http # Kill TERM processes by (part of) name # pkill -TERM -u www # Kill TERM processes owned by www # fuser -k -TERM -m /home # Kill every process accessing /home (to umount) )LONQS@MSRHFM@KR@QD  HUP G@MFTO  INT HMSDQQTOS  QUIT PTHS  KILL MNM B@SBG@AKD MNM HFMNQ@AKDJHKK  TERM RNESV@QDSDQLHM@SHNMRHFM@K 
  9. 3 FIL E S YS TEM $HRJ HMEN O [

    "NNS O [ $HRJ TR@FD O [ /ODMDC EHKDR O [ -NTMSQDLNTMS O [ -NTMS 3-" O [ -NTMS HL@FD O [ "TQM )3/ O [ #QD@SD HL@FD O [ -DLNQX CHRJ O [ $HRJ ODQENQL@MBD O 3.1 Permissions #G@MFD ODQLHRRHNM @MC NVMDQRGHO VHSG chmod @MC chown 4GD CDE@TKS TL@RJ B@M AD BG@MFDC ENQ @KK TRDQR HM DSBOQNEHKD ENQ ,HMTW NQ DSBKNFHMBNME ENQ &QDD"3$ 4GD CDE@TKS TL@RJ HR TRT@KKX  4GD TL@RJHRRTASQ@BSDCEQNL SGTRTL@RJQDRTKSRHM@ODQLHRRHNME 1 --x execute # Mode 764 = exec/read/write | read/write | read 2 -w- write # For: |-- Owner --| |- Group-| |Oth| 4 r-- read ugo=a u=user, g=group, o=others, a=everyone # chmod [OPTION] MODE[,MODE] FILE # MODE is of the form [ugoa]*([-+=]([rwxXst])) # chmod 640 /var/log/maillog # Restrict the log -rw-r----- # chmod u=rw,g=r,o= /var/log/maillog # Same as above # chmod -R o-r /home/* # Recursive remove other readable for all users # chmod u+s /path/to/prog # Set SUID bit on executable (know what you do!) # find / -perm -u+s -print # Find all programs with the SUID bit # chown user:group /path/to/file # Change the user and group ownership of a file # chgrp group /path/to/file # Change the group ownership of a file # chmod 640 `find ./ -type f -print` # Change permissions to 640 for all files # chmod 751 `find ./ -type d -print` # Change permissions to 751 for all directories 3.2 Disk information # diskinfo -v /dev/ad2 # information about disk (sector/size) FreeBSD # hdparm -I /dev/sda # information about the IDE/ATA disk (Linux) # fdisk /dev/ad2 # Display and manipulate the partition table # smartctl -a /dev/ad2 # Display the disk SMART info 3.3 Boot FreeBSD 4NANNS@MNKCJDQMDKHESGDMDVJDQMDKCNDRMSANNS RSNOSGDANNS@SCTQHMFSGDBNTMSCNVM # unload # load kernel.old # boot 3.4 System mount points/Disk usage # mount | column -t # Show mounted file-systems on the system # df # display free disk space and mounted devices # cat /proc/partitions # Show all registered partitions (Linux) Disk usage # du -sh * # Directory sizes as listing # du -csh # Total directory size of the current directory # du -ks * | sort -n -r # Sort everything by size in kilobytes # ls -lSr # Show files, biggest last 3.5 Who has which files opened 4GHR HR TRDETK SN EHMC NTS VGHBG EHKD HR AKNBJHMF @ O@QSHSHNM VGHBG G@R SN AD TMLNTMSDC @MC FHUDR @ SXOHB@KDQQNQNE 
  10. # umount /home/ umount: unmount of /home # umount impossible

    because a file is locking home failed: Device busy FreeBSD and most Unixes # fstat -f /home # for a mount point # fstat -p PID # for an application with PID # fstat -u user # for a user name &HMCNODMDCKNFEHKDNQNSGDQNODMDCEHKDR R@XENQ8NQF # ps ax | grep Xorg | awk '{print $1}' 1252 # fstat -p 1252 USER CMD PID FD MOUNT INUM MODE SZ|DV R/W root Xorg 1252 root / 2 drwxr-xr-x 512 r root Xorg 1252 text /usr 216016 -rws--x--x 1679848 r root Xorg 1252 0 /var 212042 -rw-r--r-- 56987 w 4GDEHKDVHSGHMTLHRSGDNMKXEHKDHMU@Q # find -x /var -inum 212042 /var/log/Xorg.0.log Linux &HMCNODMDCEHKDRNM@LNTMSONHMSVHSG fuser NQ lsof # fuser -m /home # List processes accessing /home # lsof /home COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME tcsh 29029 eedcoba cwd DIR 0,18 12288 1048587 /home/eedcoba (guam:/home) lsof 29140 eedcoba cwd DIR 0,18 12288 1048587 /home/eedcoba (guam:/home) !ANTS@M@OOKHB@SHNM ps ax | grep Xorg | awk '{print $1}' 3324 # lsof -p 3324 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME Xorg 3324 root 0w REG 8,6 56296 12492 /var/log/Xorg.0.log !ANTS@RHMFKDEHKD # lsof /var/log/Xorg.0.log COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME Xorg 3324 root 0w REG 8,6 56296 12492 /var/log/Xorg.0.log 3.6 Mount/remount a file system &NQDW@LOKDSGDBCQNL)EKHRSDCHMDSBERS@A # mount /cdrom /QEHMCSGDCDUHBDHMCDUNQVHSGCLDRF FreeBSD # mount -v -t cd9660 /dev/cd0c /mnt # cdrom # mount_cd9660 /dev/wcd0c /cdrom # other method # mount -v -t msdos /dev/fd0c /mnt # floppy %MSQXHMDSBERS@A # Device Mountpoint FStype Options Dump Pass# /dev/acd0 /cdrom cd9660 ro,noauto 0 0 4NKDSTRDQRCNHS # sysctl vfs.usermount=1 # Or insert the line "vfs.usermount=1" in /etc/sysctl.conf 
  11. Linux # mount -t auto /dev/cdrom /mnt/cdrom # typical cdrom

    mount command # mount /dev/hdc -t iso9660 -r /cdrom # typical IDE # mount /dev/scd0 -t iso9660 -r /cdrom # typical SCSI cdrom # mount /dev/sdc0 -t ntfs-3g /windows # typical SCSI %MSQXHMDSBERS@A /dev/cdrom /media/cdrom subfs noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec 0 0 Mount a FreeBSD partition with Linux &HMC SGD O@QSHSHNM MTLADQ BNMS@HMHMF VHSG ECHRJ SGHR HR TRT@KKX SGD QNNS O@QSHSHNM ATS HS BNTKC AD @M NSGDQ "3$ RKHBD SNN )E SGD &QDD"3$ G@R L@MX RKHBDR SGDX @QD SGD NMD MNS KHRSDC HM SGD ECHRJ S@AKD ATSUHRHAKDHMCDURC@ NQCDUGC@  # fdisk /dev/sda # Find the FreeBSD partition /dev/sda3 * 5357 7905 20474842+ a5 FreeBSD # mount -t ufs -o ufstype=ufs2,ro /dev/sda3 /mnt /dev/sda10 = /tmp; /dev/sda11 /usr # The other slices Remount 2DLNTMS@CDUHBDVHSGNTSTMLNTMSHMFHS.DBDRR@QXENQERBJENQDW@LOKD # mount -o remount,ro / # Linux # mount -o ro / # FreeBSD #NOXSGDQ@VC@S@EQNL@BCQNLHMSN@MHRNHL@FD # dd if=/dev/cd0c of=file.iso 3.7 Add swap on-the-fly 3TOONRDXNTMDDCLNQDRV@OQHFGSMNV R@X@'"EHKDRV@OFA,HMTWNMKX  # dd if=/dev/zero of=/swap2gb bs=1024k count=2000 # mkswap /swap2gb # create the swap area # swapon /swap2gb # activate the swap. It now in use # swapoff /swap2gb # when done deactivate the swap # rm /swap2gb 3.8 Mount an SMB share 3TOONRD VD V@MS SN @BBDRR SGD 3-" RG@QD LXRG@QD NM SGD BNLOTSDQ RLARDQUDQ SGD @CCQDRR @R SXODC NM @ 7HMCNVR 0# HR <<RLARDQUDQ<LXRG@QD< 7D LNTMS NM LMSRLARG@QD 7@QMHMF BHER V@MSR@M)0NQ$.3M@LD MNS@7HMCNVRM@LD Linux # smbclient -U user -I 192.168.16.229 -L //smbshare/ # List the shares # mount -t smbfs -o username=winuser //smbserver/myshare /mnt/smbshare # mount -t cifs -o username=winuser,password=winpwd //192.168.16.229/myshare /mnt/share !CCHSHNM@KKX VHSG SGD O@BJ@FD LNTMSBHER HS HR ONRRHAKD SN RSNQD SGD BQDCDMSH@KR HM @ EHKD ENQ DW@LOKD /home/user/.smb username=winuser password=winpwd !MCLNTMS@RENKKNV # mount -t cifs -o credentials=/home/user/.smb //192.168.16.229/myshare /mnt/smbshare FreeBSD 5RD )SNFHUDSGD)0NQ$.3M@LD RLARDQUDQHRSGD7HMCNVRM@LD # smbutil view -I 192.168.16.229 //winuser@smbserver # List the shares # mount_smbfs -I 192.168.16.229 //winuser@smbserver/myshare /mnt/smbshare 
  12. 3.9 Mount an image # hdiutil mount image.iso # OS

    X Linux loop-back # mount -t iso9660 -o loop file.iso /mnt # Mount a CD image # mount -t ext3 -o loop file.img /mnt # Mount an image with ext3 fs FreeBSD 7HSGLDLNQXCDUHBDCNJKCKN@CLCJNHEMDBDRR@QX  # mdconfig -a -t vnode -f file.iso -u 0 # mount -t cd9660 /dev/md0 /mnt # umount /mnt; mdconfig -d -u 0 # Cleanup the md device /QVHSGUHQST@KMNCD # vnconfig /dev/vn0c file.iso; mount -t cd9660 /dev/vn0c /mnt # umount /mnt; vnconfig -u /dev/vn0c # Cleanup the vn device Solaris and FreeBSD VHSGKNNO A@BJEHKDHMSDQE@BDNQKNEH # lofiadm -a file.iso # mount -F hsfs -o ro /dev/lofi/1 /mnt # umount /mnt; lofiadm -d /dev/lofi/1 # Cleanup the lofi device 3.10 Create and burn an ISO image 4GHR VHKK BNOX SGD BC NQ $6$ RDBSNQ ENQ RDBSNQ 7HSGNTS conv=notrunc SGD HL@FD VHKK AD RL@KKDQ HE SGDQDHRKDRRBNMSDMSNMSGDBC3DDADKNV@MCSGD CCDW@LOKDR O@FD  # dd if=/dev/hdc of=/tmp/mycd.iso bs=2048 conv=notrunc 5RD LJHRNER SN BQD@SD @ #$$6$ HL@FD EQNL EHKDR HM @ CHQDBSNQX 4N NUDQBNLD SGD EHKD M@LDR QDRSQHBSHNMR Q DM@AKDR SGD 2NBJ 2HCFD DWSDMRHNMR BNLLNM SN 5.)8 RXRSDLR * DM@AKDR *NKHDS DWSDMRHNMRTRDCAX-HBQNRNESRXRSDLR ,@KKNVR)3/EHKDM@LDRSNADFHMVHSG@ODQHNC # mkisofs -J -L -r -V TITLE -o imagefile.iso /path/to/dir # hdiutil makehybrid -iso -joliet -o dir.iso dir/ # OS X /M&QDD"3$ LJHRNERHRENTMCHMSGDONQSRHMRXRTSHKRBCQSNNKR Burn a CD/DVD ISO image FreeBSD &QDD"3$ CNDR MNS DM@AKD $-! NM !4!0) CQHUDR AX CDE@TKS $-! HR DM@AKDC VHSG SGD RXRBSK BNLL@MC @MCSGD@QFTLDMSRADKNV NQVHSGANNSKN@CDQBNMEVHSGSGDENKKNVHMFDMSQHDR hw.ata.ata_dma="1" hw.ata.atapi_dma="1" 5RD burncd VHSG @M !4!0) CDUHBD burncd HR O@QS NE SGD A@RD RXRSDL @MC cdrecord HM RXRTSHKR BCQSNNKR VHSG@3#3)CQHUD # burncd -f /dev/acd0 data imagefile.iso fixate # For ATAPI drive # cdrecord -scanbus # To find the burner device (like 1,0,0) # cdrecord dev=1,0,0 imagefile.iso Linux !KRN TRD cdrecord VHSG ,HMTW @R CDRBQHADC @ANUD !CCHSHNM@KKX HS HR ONRRHAKD SN TRD SGD M@SHUD !4!0) HMSDQE@BDVGHBGHRENTMCVHSG # cdrecord dev=ATAPI -scanbus !MCATQMSGD#$$6$@R@ANUD 
  13. dvd+rw-tools 4GD CUC QV SNNKR O@BJ@FD &QDD"3$ ONQSRRXRTSHKRCUC QV SNNKR

    B@M CN HS @KK @MC HMBKTCDR growisofs SN ATQM #$R NQ $6$R 4GD DW@LOKDR QDEDQ SN SGD CUC CDUHBD @R /dev/dvd VGHBG BNTKC AD @ RXLKHMJ SN /dev/scd0 SXOHB@K RBRH NM ,HMTW NQ /dev/cd0 SXOHB@K &QDD"3$ NQ /dev/rcd0c SXOHB@K .DS"3$/ODM"3$ BG@Q@BSDQ 3#3) NQ /dev/rdsk/c0t1d0s2 3NK@QHR DW@LOKD NE @ BG@Q@BSDQ 3#3)!4!0) #$ 2/- CDUHBD  4GDQD HR @ MHBD CNBTLDMS@SHNM VHSG DW@LOKDR NM SGD &QDD"3$ G@MCANNJBG@OSDQ # -dvd-compat closes the disk # growisofs -dvd-compat -Z /dev/dvd=imagefile.iso # Burn existing iso image # growisofs -dvd-compat -Z /dev/dvd -J -R /p/to/data # Burn directly Convert a Nero .nrg file to .iso .DQNRHLOKX@CCR@+AGD@CDQSN@MNQL@KHRNHL@FD4GHRB@MADSQHLLDCVHSGCC # dd bs=1k if=imagefile.nrg of=imagefile.iso skip=300 Convert a bin/cue image to .iso 4GDKHSSKD bchunk OQNFQ@L B@MCNSGHR)SHRHMSGD&QDD"3$ONQSRHMRXRTSHKRABGTMJ # bchunk imagefile.bin imagefile.cue imagefile.iso 3.11 Create a file based image &NQ DW@LOKD @ O@QSHSHNM NE '" TRHMF SGD EHKD TRQUCHRJHLF (DQD VD TRD SGD UMNCD  ATS HS BNTKC @KRNAD FreeBSD # dd if=/dev/random of=/usr/vdisk.img bs=1K count=1M # mdconfig -a -t vnode -f /usr/vdisk.img -u 0 # Creates device /dev/md1 # bsdlabel -w /dev/md0 # newfs /dev/md0c # mount /dev/md0c /mnt # umount /mnt; mdconfig -d -u 0; rm /usr/vdisk.img # Cleanup the md device 4GD EHKD A@RDC HL@FD B@M AD @TSNL@SHB@KKX LNTMSDC CTQHMF ANNS VHSG @M DMSQX HM DSBQBBNME @MC DSBERS@A 4DRS XNTQ RDSTO VHSG # /etc/rc.d/mdconfig start EHQRS CDKDSD SGD LC CDUHBD VHSG # mdconfig -d -u 0  .NSD GNVDUDQ SG@S SGHR @TSNL@SHB RDSTO VHKK NMKX VNQJ HE SGD EHKD HL@FD HR ./4 NM SGD QNNS O@QSHSHNM 4GD QD@RNM HR SG@S SGD DSBQBCLCBNMEHF RBQHOS HR DWDBTSDC UDQX D@QKX CTQHMF ANNS @MC SGD QNNS O@QSHSHNM HR RSHKK QD@C NMKX )L@FDR KNB@SDC NTSRHCD SGD QNNS O@QSHSHNM VHKK AD LNTMSDC K@SDQ VHSG SGD RBQHOSDSBQBCLCBNMEHF ANNSKN@CDQBNME md_load="YES" DSBQBBNME # mdconfig_md0="-t vnode -f /usr/vdisk.img" # /usr is not on the root partition DSBERS@A 4GD   @S SGD DMC HR HLONQS@MS HS SDKK ERBJ SN HFMNQD SGHR CDUHBD @R HR CNDR MNS DWHRS XDS /dev/md0 /usr/vdisk ufs rw 0 0 )SHR@KRNONRRHAKDSNHMBQD@RDSGDRHYDNESGDHL@FD@ESDQV@QC R@XENQDW@LOKD-"K@QFDQ # umount /mnt; mdconfig -d -u 0 # dd if=/dev/zero bs=1m count=300 >> /usr/vdisk.img # mdconfig -a -t vnode -f /usr/vdisk.img -u 0 # growfs /dev/md0 # mount /dev/md0c /mnt # File partition is now 300 MB larger GSSOVVVEQDDARCNQFG@MCANNJBQD@SHMF CUCRGSLK GSSOEQDRGLD@SMDSOQNIDBSRABGTMJ 
  14. Linux # dd if=/dev/zero of=/usr/vdisk.img bs=1024k count=1024 # mkfs.ext3 /usr/vdisk.img

    # mount -o loop /usr/vdisk.img /mnt # umount /mnt; rm /usr/vdisk.img # Cleanup Linux with losetup /dev/zero HRLTBGE@RSDQSG@M urandom ATSKDRRRDBTQDENQDMBQXOSHNM # dd if=/dev/urandom of=/usr/vdisk.img bs=1024k count=1024 # losetup /dev/loop0 /usr/vdisk.img # Creates and associates /dev/loop0 # mkfs.ext3 /dev/loop0 # mount /dev/loop0 /mnt # losetup -a # Check used loops # umount /mnt # losetup -d /dev/loop0 # Detach # rm /usr/vdisk.img 3.12 Create a memory file system ! LDLNQX A@RDC EHKD RXRSDL HR UDQX E@RS ENQ GD@UX )/ @OOKHB@SHNM (NV SN BQD@SD @  -" O@QSHSHNM LNTMSDCNMLDLCHRJ FreeBSD # mount_mfs -o rw -s 64M md /memdisk # umount /memdisk; mdconfig -d -u 0 # Cleanup the md device md /memdisk mfs rw,-s64M 0 0 # /etc/fstab entry Linux # mount -t tmpfs -osize=64m tmpfs /memdisk 3.13 Disk performance 2D@C@MCVQHSD@'"EHKDNMO@QSHSHNM@CRBGNLD # time dd if=/dev/ad4s3c of=/dev/null bs=1024k count=1000 # time dd if=/dev/zero bs=1024k count=1000 of=/home/1Gb.file # hdparm -tT /dev/hda # Linux only 4 NE TW O R K 2NTSHMF O [ !CCHSHNM@K )0 O [ #G@MFD -!# O [ 0NQSR O [ &HQDV@KK O [ )0 &NQV@QC O [ .!4 O [ $.3 O [ $(#0 O [ 4Q@EEHB O [ 1N3 O [ .)3 O [ .DSB@S O 4.1 Debugging (See also Traffic analysis) (page 19) Linux # ethtool eth0 # Show the ethernet status (replaces mii-diag) # ethtool -s eth0 speed 100 duplex full # Force 100Mbit Full duplex # ethtool -s eth0 autoneg off # Disable auto negotiation # ethtool -p eth1 # Blink the ethernet led - very useful when supported # ip link show # Display all interfaces on Linux (similar to ifconfig) # ip link set eth0 up # Bring device up (or down). Same as "ifconfig eth0 up" # ip addr show # Display all IP addresses on Linux (similar to ifconfig) # ip neigh show # Similar to arp -a Other OSes # ifconfig fxp0 # Check the "media" field on FreeBSD # arp -a # Check the router (or host) ARP entry (all OS) # ping cb.vu # The first thing to try... # traceroute cb.vu # Print the route path to destination 
  15. # ifconfig fxp0 media 100baseTX mediaopt full-duplex # 100Mbit full

    duplex (FreeBSD) # netstat -s # System-wide statistics for each network protocol !CCHSHNM@KBNLL@MCRVGHBG@QDMNS@KV@XRHMRS@KKDCODQCDE@TKSATSD@RXSNEHMC # arping 192.168.16.254 # Ping on ethernet layer # tcptraceroute -f 5 cb.vu # uses tcp instead of icmp to trace through firewalls 4.2 Routing Print routing table # route -n # Linux or use "ip route" # netstat -rn # Linux, BSD and UNIX # route print # Windows Add and delete a route FreeBSD # route add 212.117.0.0/16 192.168.1.1 # route delete 212.117.0.0/16 # route add default 192.168.1.1 !CCSGDQNTSDODQL@MDMSKXHMDSBQBBNME static_routes="myroute" route_myroute="-net 212.117.0.0/16 192.168.1.1" Linux # route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.16.254 # ip route add 192.168.20.0/24 via 192.168.16.254 # same as above with ip route # route add -net 192.168.20.0 netmask 255.255.255.0 dev eth0 # route add default gw 192.168.51.254 # ip route add default via 192.168.51.254 dev eth0 # same as above with ip route # route delete -net 192.168.20.0 netmask 255.255.255.0 Solaris # route add -net 192.168.20.0 -netmask 255.255.255.0 192.168.16.254 # route add default 192.168.51.254 1 # 1 = hops to the next gateway # route change default 192.168.50.254 1 0DQL@MDMSDMSQHDR@QDRDSHMDMSQXHM /etc/defaultrouter Windows # Route add 192.168.50.0 mask 255.255.255.0 192.168.51.253 # Route add 0.0.0.0 mask 0.0.0.0 192.168.51.254 5RD@CC OSNL@JDSGDQNTSDODQRHRSDMS 4.3 Configure additional IP addresses Linux # ifconfig eth0 192.168.50.254 netmask 255.255.255.0 # First IP # ifconfig eth0:0 192.168.51.254 netmask 255.255.255.0 # Second IP # ip addr add 192.168.50.254/24 dev eth0 # Equivalent ip commands # ip addr add 192.168.51.254/24 dev eth0 label eth0:1 FreeBSD # ifconfig fxp0 inet 192.168.50.254/24 # First IP # ifconfig fxp0 alias 192.168.51.254 netmask 255.255.255.0 # Second IP # ifconfig fxp0 -alias 192.168.51.254 # Remove second IP alias 0DQL@MDMSDMSQHDRHMDSBQBBNME ifconfig_fxp0="inet 192.168.50.254 netmask 255.255.255.0" ifconfig_fxp0_alias0="192.168.51.254 netmask 255.255.255.0" 
  16. Solaris #GDBJSGDRDSSHMFRVHSG ifconfig -a # ifconfig hme0 plumb # Enable

    the network card # ifconfig hme0 192.168.50.254 netmask 255.255.255.0 up # First IP # ifconfig hme0:1 192.168.51.254 netmask 255.255.255.0 up # Second IP 4.4 Change MAC address .NQL@KKX XNT G@UD SN AQHMF SGD HMSDQE@BD CNVM ADENQD SGD BG@MFD $NMS SDKK LD VGX XNT V@MS SN BG@MFDSGD-!#@CCQDRR # ifconfig eth0 down # ifconfig eth0 hw ether 00:01:02:03:04:05 # Linux # ifconfig fxp0 link 00:01:02:03:04:05 # FreeBSD # ifconfig hme0 ether 00:01:02:03:04:05 # Solaris # sudo ifconfig en0 ether 00:01:02:03:04:05 # OS X Tiger, Snow Leopard LAN* # sudo ifconfig en0 lladdr 00:01:02:03:04:05 # OS X Leopard 4XOHB@K VHQDKDRR HMSDQE@BD HR en1 @MC MDDCR CN CHR@RRNBH@SD EQNL @MX MDSVNQJ EHQRS NRWC@HKX GNVSN  # echo "alias airport='/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/ >> ~/.bash_profile # or symlink to /usr/sbin # airport -z # Disassociate from wireless networks # airport -I # Get info from wireless network -@MXSNNKRDWHRSENQ7HMCNVR&NQDW@LOKD DSGDQBG@MFD/QKNNJENQ-@B-@JDTO RL@B 4.5 Ports in use ,HRSDMHMFNODMONQSR # netstat -an | grep LISTEN # lsof -i # Linux list all Internet connections # socklist # Linux display list of open sockets # sockstat -4 # FreeBSD application listing # netstat -anp --udp --tcp | grep LISTEN # Linux # netstat -tup # List active connections to/from system (Linux) # netstat -tupl # List listening ports from system (Linux) # netstat -ano # Windows 4.6 Firewall #GDBJHE@EHQDV@KKHRQTMMHMFSXOHB@KBNMEHFTQ@SHNMNMKX  Linux # iptables -L -n -v # For status Open the iptables firewall # iptables -P INPUT ACCEPT # Open everything # iptables -P FORWARD ACCEPT # iptables -P OUTPUT ACCEPT # iptables -Z # Zero the packet and byte counters in all chains # iptables -F # Flush all chains # iptables -X # Delete all chains FreeBSD # ipfw show # For status # ipfw list 65535 # if answer is "65535 deny ip from any to any" the fw is disabled # sysctl net.inet.ip.fw.enable=0 # Disable # sysctl net.inet.ip.fw.enable=1 # Enable GSSOMSRDBTQHSXMTSNNKANWDSGDQBG@MFD 
  17. 4.7 IP Forward for routing Linux #GDBJ@MCSGDMDM@AKD)0ENQV@QCVHSG # cat /proc/sys/net/ipv4/ip_forward

    # Check IP forward 0=off, 1=on # echo 1 > /proc/sys/net/ipv4/ip_forward NQDCHSDSBRXRBSKBNMEVHSG net.ipv4.ip_forward = 1 FreeBSD #GDBJ@MCDM@AKDVHSG # sysctl net.inet.ip.forwarding # Check IP forward 0=off, 1=on # sysctl net.inet.ip.forwarding=1 # sysctl net.inet.ip.fastforwarding=1 # For dedicated router or firewall Permanent with entry in /etc/rc.conf: gateway_enable="YES" # Set to YES if this host will be a gateway. Solaris # ndd -set /dev/ip ip_forwarding 1 # Set IP forward 0=off, 1=on 4.8 NAT Network Address Translation Linux # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # to activate NAT # iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 20022 -j DNAT \ --to 192.168.16.44:22 # Port forward 20022 to internal IP port ssh # iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 993:995 -j DNAT \ --to 192.168.16.254:993-995 # Port forward of range 993-995 # ip route flush cache # iptables -L -t nat # Check NAT status $DKDSD SGD ONQS ENQV@QC VHSG $ HMRSD@C NE ! 4GD OQNFQ@L MDSRS@S M@S HR UDQX TRDETK SN SQ@BJ BNMMDBSHNMRHSTRDR /proc/net/ip_conntrack NQ /proc/net/nf_conntrack  # netstat-nat -n # show all connections with IPs FreeBSD # natd -s -m -u -dynamic -f /etc/natd.conf -n fxp0 Or edit /etc/rc.conf with: firewall_enable="YES" # Set to YES to enable firewall functionality firewall_type="open" # Firewall type (see /etc/rc.firewall) natd_enable="YES" # Enable natd (if firewall_enable == YES). natd_interface="tun0" # Public interface or IP address to use. natd_flags="-s -m -u -dynamic -f /etc/natd.conf" 0NQSENQV@QCVHSG # cat /etc/natd.conf same_ports yes use_sockets yes unregistered_only # redirect_port tcp insideIP:2300-2399 3300-3399 # port range redirect_port udp 192.168.51.103:7777 7777 4.9 DNS /M 5MHW SGD $.3 DMSQHDR @QD U@KHC ENQ @KK HMSDQE@BDR @MC @QD RSNQDC HM DSBQDRNKUBNME 4GD CNL@HM SNVGHBGSGDGNRSADKNMFRHR@KRNRSNQDCHMSGHREHKD!LHMHL@KBNMEHFTQ@SHNMHR GSSOSVDDFXMKOQNIDBSRMDSRS@S M@S 
  18. nameserver 78.31.70.238 search sleepyowl.net intern.lab domain sleepyowl.net #GDBJSGDRXRSDLCNL@HMM@LDVHSG # hostname

    -d # Same as dnsdomainname Windows /M 7HMCNVR SGD $.3 @QD BNMEHFTQDC ODQ HMSDQE@BD 4N CHROK@X SGD BNMEHFTQDC $.3 @MC SN EKTRG SGD $.3B@BGDTRD # ipconfig /? # Display help # ipconfig /all # See all information including DNS Flush DNS &KTRG SGD /3 $.3 B@BGD RNLD @OOKHB@SHNM TRHMF SGDHQ NVM B@BGD DF &HQDENW @MC VHKK AD TM@EEDBSDC # /etc/init.d/nscd restart # Restart nscd if used - Linux/BSD/Solaris # lookupd -flushcache # OS X Tiger # dscacheutil -flushcache # OS X Leopard and newer # ipconfig /flushdns # Windows Forward queries $HF HR XNT EQHDMC SN SDRS SGD $.3 RDSSHMFR &NQ DW@LOKD SGD OTAKHB $.3 RDQUDQ 213.133.105.2 ns.second-ns.de B@M AD TRDC ENQ SDRSHMF 3DD EQNL VGHBG RDQUDQ SGD BKHDMS QDBDHUDR SGD @MRVDQ RHLOKHEHDC@MRVDQ  # dig sleepyowl.net sleepyowl.net. 600 IN A 78.31.70.238 ;; SERVER: 192.168.51.254#53(192.168.51.254) 4GD QNTSDQ  @MRVDQDC @MC SGD QDRONMRD HR SGD ! DMSQX !MX DMSQX B@M AD PTDQHDC @MCSGD$.3RDQUDQB@MADRDKDBSDCVHSG  # dig MX google.com # dig @127.0.0.1 NS sun.com # To test the local server # dig @204.97.212.10 NS MX heise.de # Query an external server # dig AXFR @ns1.xname.org cb.vu # Get the full zone (zone transfer) 4GDOQNFQ@LGNRSHR@KRNONVDQETK # host -t MX cb.vu # Get the mail MX entry # host -t NS -T sun.com # Get the NS record over a TCP connection # host -a sleepyowl.net # Get everything Reverse queries &HMC SGD M@LD ADKNMFHMF SN @M )0 @CCQDRR HM @CCQ@QO@  4GHR B@M AD CNMD VHSG dig host @MC nslookup # dig -x 78.31.70.238 # host 78.31.70.238 # nslookup 78.31.70.238 /etc/hosts 3HMFKD GNRSR B@M AD BNMEHFTQDC HM SGD EHKD DSBGNRSR HMRSD@C NE QTMMHMF named KNB@KKX SN QDRNKUD SGD GNRSM@LDPTDQHDR4GDENQL@SHRRHLOKD ENQDW@LOKD 78.31.70.238 sleepyowl.net sleepyowl 4GD OQHNQHSX ADSVDDM GNRSR @MC @ CMR PTDQX SG@S HR SGD M@LD QDRNKTSHNM NQCDQ B@M AD BNMEHFTQDC HM /etc/nsswitch.conf !.$DSBGNRSBNME4GDEHKD@KRNDWHRSRNM7HMCNVR HSHRTRT@KKXHM C:\WINDOWS\SYSTEM32\DRIVERS\ETC 
  19. 4.10 DHCP Linux 3NLDCHRSQHATSHNMR3T3% TRDCGBOBC@RBKHDMS4GDCDE@TKSHMSDQE@BDHRDSG # dhcpcd -n eth0 #

    Trigger a renew (does not always work) # dhcpcd -k eth0 # release and shutdown 4GDKD@RDVHSGSGDETKKHMENQL@SHNMHRRSNQDCHM /var/lib/dhcpcd/dhcpcd-eth0.info FreeBSD &QDD"3$@MC$DAH@M TRDRCGBKHDMS4NBNMEHFTQD@MHMSDQE@BDENQDW@LOKDAFD QTM # dhclient bge0 4GDKD@RDVHSGSGDETKKHMENQL@SHNMHRRSNQDCHM /var/db/dhclient.leases.bge0 5RD /etc/dhclient.conf SNOQDODMCNOSHNMRNQENQBDCHEEDQDMSNOSHNMR # cat /etc/dhclient.conf interface "rl0" { prepend domain-name-servers 127.0.0.1; default domain-name "sleepyowl.net"; supersede domain-name "sleepyowl.net"; } Windows 4GDCGBOKD@RDB@MADQDMDVDCVHSG ipconfig # ipconfig /renew # renew all adapters # ipconfig /renew LAN # renew the adapter named "LAN" # ipconfig /release WLAN # release the adapter named "WLAN" 9DRHSHR@FNNCHCD@SNQDM@LDXNT@C@OSDQVHSGRHLOKDM@LDR 4.11 Traffic analysis "LNM HR@RL@KKBNMRNKDA@MCVHCSGLNMHSNQ@MCB@MCHROK@XSGDEKNVNMCHEEDQDMSHMSDQE@BDR Sniff with tcpdump # tcpdump -nl -i bge0 not port ssh and src \(192.168.16.121 or 192.168.16.54\) # tcpdump -n -i eth1 net 192.168.16.121 # select to/from a single IP # tcpdump -n -i eth1 net 192.168.16.0/24 # select traffic to/from a network # tcpdump -l > dump && tail -f dump # Buffered output # tcpdump -i rl0 -w traffic.rl0 # Write traffic headers in binary file # tcpdump -i rl0 -s 0 -w traffic.rl0 # Write traffic + payload in binary file # tcpdump -r traffic.rl0 # Read from file (also for ethereal # tcpdump port 80 # The two classic commands # tcpdump host google.com # tcpdump -i eth0 -X port \(110 or 143\) # Check if pop or imap is secure # tcpdump -n -i eth0 icmp # Only catch pings # tcpdump -i eth0 -s 0 -A port 80 | grep GET # -s 0 for full packet -A for ASCII !CCHSHNM@KHLONQS@MSNOSHNMR -A 0QHMSD@BGO@BJDSRHMBKD@QSDWSVHSGNTSGD@CDQ -X 0QHMSO@BJDSRHMGDW@MC!3#)) -l -@JDRSCNTSKHMDATEEDQDC -D 0QHMS@KKHMSDQE@BDR@U@HK@AKD /M7HMCNVRTRDVHMCTLOEQNL VVVVHMOB@ONQF5RDVHMCTLO $SNKHRSSGDHMSDQE@BDR GSSOODNOKDRTTFBG]SFQALNM 
  20. Scan with nmap .L@O HR @ ONQS RB@MMDQ VHSG /3

    CDSDBSHNM HS HR TRT@KKX HMRS@KKDC NM LNRS CHRSQHATSHNMR @MC HR @KRN @U@HK@AKDENQ7HMCNVR)EXNTCNMSRB@MXNTQRDQUDQR G@BJDQRCNHSENQXNT # nmap cb.vu # scans all reserved TCP ports on the host # nmap -sP 192.168.16.0/24 # Find out which IP are used and by which host on 0/24 # nmap -sS -sV -O cb.vu # Do a stealth SYN scan with version and OS detection PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 3.8.1p1 FreeBSD-20060930 (protocol 2.0) 25/tcp open smtp Sendmail smtpd 8.13.6/8.13.6 80/tcp open http Apache httpd 2.0.59 ((FreeBSD) DAV/2 PHP/4. [...] Running: FreeBSD 5.X Uptime 33.120 days (since Fri Aug 31 11:41:04 2007) /SGDQ MNM RS@MC@QC ATS TRDETK SNNKR @QD hping VVVGOHMFNQF @M )0 O@BJDS @RRDLAKDQ@M@KXYDQ @MC fping EOHMFRNTQBDENQFDMDS EOHMFB@MBGDBJLTKSHOKDGNRSRHM@QNTMC QNAHME@RGHNM 4.12 Traffic control (QoS) 4Q@EEHB BNMSQNK L@M@FDR SGD PTDTHMF ONKHBHMF RBGDCTKHMF @MC NSGDQ SQ@EEHB O@Q@LDSDQR ENQ @ MDSVNQJ 4GD ENKKNVHMF DW@LOKDR @QD RHLOKD OQ@BSHB@K TRDR NE SGD ,HMTW @MC &QDD"3$ B@O@AHKHSHDR SN ADSSDQTRDSGD@U@HK@AKDA@MCVHCSG Limit upload $3, NQ B@AKD LNCDLR G@UD @ KNMF PTDTD SN HLOQNUD SGD TOKN@C SGQNTFGOTS (NVDUDQ EHKKHMF SGD PTDTD VHSG @ E@RS CDUHBD DF DSGDQMDS VHKK CQ@L@SHB@KKX CDBQD@RD SGD HMSDQ@BSHUHSX )S HR SGDQDENQD TRDETK SN KHLHS SGD CDUHBD TOKN@C Q@SD SN L@SBG SGD OGXRHB@K B@O@BHSX NE SGD LNCDL SGHR RGNTKC FQD@SKXHLOQNUDSGDHMSDQ@BSHUHSX3DSSN@ANTSNESGDLNCDLL@WHL@KB@AKD RODDC Linux &NQ@+AHSTOKN@CLNCDL # tc qdisc add dev eth0 root tbf rate 480kbit latency 50ms burst 1540 # tc -s qdisc ls dev eth0 # Status # tc qdisc del dev eth0 root # Delete the queue # tc qdisc change dev eth0 root tbf rate 220kbit latency 50ms burst 1540 FreeBSD &QDD"3$ TRDR SGD dummynet SQ@EEHB RG@ODQ VGHBG HR BNMEHFTQDC VHSG HOEV 0HODR @QD TRDC SN RDS KHLHSR SGD A@MCVHCSG HM TMHSR NE ;+[-=ZAHSR["XSDR\  LD@MR TMKHLHSDC A@MCVHCSG 5RHMF SGD R@LD OHOD MTLADQVHKKQDBNMEHFTQDHS&NQDW@LOKDKHLHSSGDTOKN@CA@MCVHCSGSN+AHS # kldload dummynet # load the module if necessary # ipfw pipe 1 config bw 500Kbit/s # create a pipe with limited bandwidth # ipfw add pipe 1 ip from me to any # divert the full upload into the pipe Quality of service Linux 0QHNQHSX PTDTHMF VHSG tc SN NOSHLHYD 6N)0 3DD SGD ETKK DW@LOKD NM UNHO HMENNQF NQ VVVGNVSNENQFDBNL 3TOONRD 6N)0 TRDR TCO NM ONQSR  @MC CDUHBD DSG BNTKC @KRN AD OOO NQ RN  4GD ENKKNVHMF BNLL@MCR CDEHMD SGD 1N3 SN SGQDD PTDTDR @MC ENQBD SGD 6N)0 SQ@EEHB SN PTDTD  VHSG 1N3 0x1e @KK AHSR RDS  4GD CDE@TKS SQ@EEHB EKNVR HMSN PTDTD  @MC 1N3 Minimize- Delay EKNVRHMSNPTDTD # tc qdisc add dev eth0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 0 # tc qdisc add dev eth0 parent 1:1 handle 10: sfq # tc qdisc add dev eth0 parent 1:2 handle 20: sfq # tc qdisc add dev eth0 parent 1:3 handle 30: sfq # tc filter add dev eth0 protocol ip parent 1: prio 1 u32 \ match ip dport 10000 0x3C00 flowid 1:1 # use server port range match ip dst 123.23.0.1 flowid 1:1 # or/and use server IP GSSOHMRDBTQDNQFML@O 
  21. 3S@STR@MCQDLNUDVHSG # tc -s qdisc ls dev eth0 # queue

    status # tc qdisc del dev eth0 root # delete all QoS Calculate port range and mask 4GD SB EHKSDQ CDEHMDR SGD ONQS Q@MFD VHSG ONQS @MC L@RJ VGHBG XNT G@UD SN B@KBTK@SD &HMC SGD >. ending NE SGD ONQS Q@MFD CDCTBD SGD Q@MFD @MC BNMUDQS SN (%8 4GHR HR XNTQ L@RJ %W@LOKD ENQ   SGDQ@MFDHR # 2^13 (8192) < 10000 < 2^14 (16384) # ending is 2^14 = 16384 # echo "obase=16;(2^14)-1024" | bc # mask is 0x3C00 FreeBSD 4GD L@W KHMJ A@MCVHCSG HR +AHSR @MC VD CDEHMD  PTDTDR VHSG OQHNQHSX  ENQ 6N)0RRG@KK SGDQDRS # ipfw pipe 1 config bw 500Kbit/s # ipfw queue 1 config pipe 1 weight 100 # ipfw queue 2 config pipe 1 weight 10 # ipfw queue 3 config pipe 1 weight 1 # ipfw add 10 queue 1 proto udp dst-port 10000-11024 # ipfw add 11 queue 1 proto udp dst-ip 123.23.0.1 # or/and use server IP # ipfw add 20 queue 2 dsp-port ssh # ipfw add 30 queue 3 from me to any # all the rest 3S@STR@MCQDLNUDVHSG # ipfw list # rules status # ipfw pipe list # pipe status # ipfw flush # deletes all rules but default 4.13 NIS Debugging 3NLDBNLL@MCRVGHBGRGNTKCVNQJNM@VDKKBNMEHFTQDC.)3BKHDMS # ypwhich # get the connected NIS server name # domainname # The NIS domain name as configured # ypcat group # should display the group from the NIS server # cd /var/yp && make # Rebuild the yp database # rpcinfo -p servername # Report RPC services of the server )RXOAHMCQTMMHMF # ps auxww | grep ypbind /usr/sbin/ypbind -s -m -S servername1,servername2 # FreeBSD /usr/sbin/ypbind # Linux # yppoll passwd.byname Map passwd.byname has order number 1190635041. Mon Sep 24 13:57:21 2007 The master server is servername.domain.net. Linux # cat /etc/yp.conf ypserver servername domain domain.net broadcast 4.14 Netcat .DSB@S MB HR ADSSDQ JMNVM @R SGD MDSVNQJ 3VHRR !QLX +MHED HS B@M L@MHOTK@SD BQD@SD NQ QD@CVQHSD 4#0)0 BNMMDBSHNMR (DQD RNLD TRDETK DW@LOKDR SGDQD @QD L@MX LNQD NM SGD MDS ENQ DW@LOKD F KN@CDCDT;= @MC GDQD 9NTLHFGSMDDCSNTRDSGDBNLL@MC netcat HMRSD@CNE nc!KRNRDDSGDRHLHK@QBNLL@MC RNB@S GSSOMDSB@SRNTQBDENQFDMDS GSSOVVVF KN@CDCDTMDSB@S @ BNTOKD NE TRDETK DW@LOKDR GSSOVVVSDQLHM@KKX HMBNGDQDMSBNLAKNFEDV TRDETK MDSB@S SQHBJR 
  22. File transfer #NOX @ K@QFD ENKCDQ NUDQ @ Q@V SBO

    BNMMDBSHNM 4GD SQ@MREDQ HR UDQX PTHBJ MN OQNSNBNK NUDQGD@C @MC XNT CNMS MDDC SN LDRR TO VHSG .&3 NQ 3-" NQ &40 NQ RN RHLOKX L@JD SGD EHKD @U@HK@AKD NM SGD RDQUDQ @MCFDSHSEQNLSGDBKHDMS(DQDHRSGDRDQUDQ)0@CCQDRR server# tar -cf - -C VIDEO_TS . | nc -l -p 4444 # Serve tar folder on port 4444 client# nc 192.168.1.1 4444 | tar xpf - -C VIDEO_TS # Pull the file on port 4444 server# cat largefile | nc -l 5678 # Server a single file client# nc 192.168.1.1 5678 > largefile # Pull the single file server# dd if=/dev/da0 | nc -l 4444 # Server partition image client# nc 192.168.1.1 4444 | dd of=/dev/da0 # Pull partition to clone client# nc 192.168.1.1 4444 | dd of=da0.img # Pull partition to file Other hacks 3ODBH@KKXGDQD XNTLTRSJMNVVG@SXNT@QDCNHMF Remote shell /OSHNM DNMKXNMSGD7HMCNVRUDQRHNM/QTRD MB # nc -lp 4444 -e /bin/bash # Provide a remote shell (server backdoor) # nc -lp 4444 -e cmd.exe # remote shell for Windows Emergency web server 3DQUD@RHMFKDEHKDNMONQSHM@KNNO # while true; do nc -l -p 80 < unixtoolbox.xhtml; done Chat !KHBD@MC"NAB@MBG@SNUDQ@RHLOKD4#0RNBJDS4GDSDWSHRSQ@MREDQQDCVHSGSGDDMSDQJDX alice# nc -lp 4444 bob # nc 192.168.1.1 4444 5 S S H SCP 0TAKHBJDX O [ &HMFDQOQHMS O [ 3#0 O [ 4TMMDKHMF O 3DDNSGDQSQHBJR RRGBLC 5.1 Public key authentication #NMMDBS SN @ GNRS VHSGNTS O@RRVNQC TRHMF OTAKHB JDX @TSGDMSHB@SHNM 4GD HCD@ HR SN @OODMC XNTQ OTAKHB JDX SN SGD @TSGNQHYDC?JDXR EHKD NM SGD QDLNSD GNRS &NQ SGHR DW@LOKD KDSR connect host- client to host-server SGD JDX HR FDMDQ@SDC NM SGD BKHDMS 7HSG BXFVHM XNT LHFGS G@UD SN BQD@SD XNTQGNLDCHQDBSNX@MCSGDRRGCHQDBSNQXVHSG # mkdir -p /home/USER/.ssh a 5RD RRG JDXFDM SN FDMDQ@SD @ JDX O@HQ ~/.ssh/id_dsa HR SGD OQHU@SD JDX ~/.ssh/ id_dsa.pub HRSGDOTAKHBJDX a #NOX NMKX SGD OTAKHB JDX SN SGD RDQUDQ @MC @OODMC HS SN SGD EHKD ~/.ssh/authorized_keys2 NMXNTQGNLDNMSGDRDQUDQ # ssh-keygen -t dsa -N '' # cat ~/.ssh/id_dsa.pub | ssh you@host-server "cat - >> ~/.ssh/authorized_keys2" Using the Windows client from ssh.com 4GD MNM BNLLDQBH@K UDQRHNM NE SGD RRGBNL BKHDMS B@M AD CNVMKN@CDC SGD L@HM ESO RHSD ESORRGBNLOTARRG +DXR FDMDQ@SDC AX SGD RRGBNL BKHDMS MDDC SN AD BNMUDQSDC ENQ SGD /ODM33( RDQUDQ4GHRB@MADCNMDVHSGSGDRRG JDXFDMBNLL@MC a #QD@SD @ JDX O@HQ VHSG SGD RRGBNL BKHDMS 3DSSHMFR 5RDQ !TSGDMSHB@SHNM 'DMDQ@SD .DV a )TRD+DXSXOD$3!JDXKDMFSG a #NOXSGDOTAKHBJDXFDMDQ@SDCAXSGDRRGBNLBKHDMSSNSGDRDQUDQHMSNSGD]RRGENKCDQ GSSOAKNFTQEHWBNL RRG BNLL@MCR SQHBJR 
  23. a 4GD JDXR @QD HM #<$NBTLDMSR @MC 3DSSHMFR<53%2.!-%<!OOKHB@SHNM $@S@<33(<5RDQ+DXR a

    5RDSGDRRG JDXFDMBNLL@MCNMSGDRDQUDQSNBNMUDQSSGDJDX # cd ~/.ssh # ssh-keygen -i -f keyfilename.pub >> authorized_keys2 Notice: 7DTRDC@$3!JDX 23!HR@KRNONRRHAKD4GDJDXHRMNSOQNSDBSDCAX@O@RRVNQC Using putty for Windows 0TSSX HR@RHLOKD@MCEQDDRRGBKHDMSENQ7HMCNVR a #QD@SD@JDXO@HQVHSGSGDOT449FDMOQNFQ@L a 3@UD SGD OTAKHB @MC OQHU@SD JDXR ENQ DW@LOKD HMSN #<$NBTLDMSR @MC 3DSSHMFR<53%2.!-%<RRG  a #NOXSGDOTAKHBJDXSNSGDRDQUDQHMSNSGD]RRGENKCDQ # scp .ssh/puttykey.pub [email protected]:.ssh/ a 5RDSGDRRG JDXFDMBNLL@MCNMSGDRDQUDQSNBNMUDQSSGDJDXENQ/ODM33( # cd ~/.ssh # ssh-keygen -i -f puttykey.pub >> authorized_keys2 a 0NHMSSGDOQHU@SDJDXKNB@SHNMHMSGDOTSSXRDSSHMFR#NMMDBSHNM 33( !TSG 5.2 Check fingerprint !S SGD EHQRS KNFHM RRG VHKK @RJ HE SGD TMJMNVM GNRS VHSG SGD EHMFDQOQHMS G@R SN AD RSNQDC HM SGD JMNVM GNRSR 4N @UNHC @ L@M HM SGD LHCCKD @SS@BJ SGD @CLHMHRSQ@SNQ NE SGD RDQUDQ B@M RDMC XNT SGD RDQUDQ EHMFDQOQHMS VGHBG HR SGDM BNLO@QDC NM SGD EHQRS KNFHM 5RD ssh-keygen -l SN FDS SGD EHMFDQOQHMS NM SGDRDQUDQ  # ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub # For RSA key 2048 61:33:be:9b:ae:6c:36:31:fd:83:98:b7:99:2d:9f:cd /etc/ssh/ssh_host_rsa_key.pub # ssh-keygen -l -f /etc/ssh/ssh_host_dsa_key.pub # For DSA key (default) 2048 14:4a:aa:d9:73:25:46:6d:0a:48:35:c7:f4:16:d4:ee /etc/ssh/ssh_host_dsa_key.pub .NVSGDBKHDMSBNMMDBSHMFSNSGHRRDQUDQB@MUDQHEXSG@SGDHRBNMMDBSHMFSNSGDQHFGSRDQUDQ # ssh linda The authenticity of host 'linda (192.168.16.54)' can't be established. DSA key fingerprint is 14:4a:aa:d9:73:25:46:6d:0a:48:35:c7:f4:16:d4:ee. Are you sure you want to continue connecting (yes/no)? yes 5.3 Secure file transfer 3NLDRHLOKDBNLL@MCR # scp file.txt host-two:/tmp # scp joe@host-two:/www/*.html /www/tmp # scp -r joe@host-two:/www /www/tmp )M +NMPTDQNQ NQ -HCMHFGS #NLL@MCDQ HS HR ONRRHAKD SN @BBDRR @ QDLNSD EHKD RXRSDL VHSG SGD @CCQDRR fish://user@gate(NVDUDQSGDHLOKDLDMS@SHNMHRUDQXRKNV &TQSGDQLNQD HS HR ONRRHAKD SN LNTMS @ QDLNSD ENKCDQ VHSG sshfs @ EHKD RXRSDL BKHDMS A@RDC NM 3#0 3DDETRDRRGER ssh_exchange_identification: Connection closed by remote host 7HSGSGHRDQQNQSQXSGDENKKNVHMFNMSGDRDQUDQ echo 'SSHD: ALL' >> /etc/hosts.allow /etc/init.d/sshd restart GSSOVVVBGH@QJFQDDMDMCNQFTJ]RFS@SG@LOTSSXCNVMKN@CGSLK GSSOETRDRNTQBDENQFDMDSRRGERGSLK 
  24. 5.4 Tunneling 33( STMMDKHMF @KKNVR SN ENQV@QC NQ QDUDQRD ENQV@QC

    @ ONQS NUDQ SGD 33( BNMMDBSHNM SGTR RDBTQHMF SGD SQ@EEHB @MC @BBDRRHMF ONQSR VGHBG VNTKC NSGDQVHRD AD AKNBJDC 4GHR NMKX VNQJR VHSG 4#0 4GD FDMDQ@KMNLDMBK@STQDENQENQV@QC@MCQDUDQRDHRRDD@KRN RRG@MC.!4DW@LOKD  # ssh -L localport:desthost:destport user@gate # desthost as seen from the gate # ssh -R destport:desthost:localport user@gate # forwards your localport to destination # desthost:localport as seen from the client initiating the tunnel # ssh -X user@gate # To force X forwarding 4GHR VHKK BNMMDBS SN F@SD @MC ENQV@QC SGD KNB@K ONQS SN SGD GNRS CDRSGNRSCDRSONQS .NSD CDRSGNRS HR SGD CDRSHM@SHNM GNRS as seen by the gate RN HE SGD BNMMDBSHNM HR SN SGD F@SD SGDM CDRSGNRS HR KNB@KGNRS-NQDSG@MNMDONQSENQV@QCHRONRRHAKD Direct forward on the gate ,DS R@X VD V@MS SN @BBDRR SGD #63 ONQS  @MC GSSO ONQS  VGHBG @QD QTMMHMF NM SGD F@SD 4GHR HR SGD RHLOKDRS DW@LOKD CDRSGNRS HR SGTR KNB@KGNRS @MC VD TRD SGD ONQS  KNB@KKX HMRSD@C NE  RN VD CNMS MDDC SN AD QNNS /MBD SGD RRG RDRRHNM HR NODM ANSG RDQUHBDR @QD @BBDRRHAKD NM SGD KNB@KONQSR # ssh -L 2401:localhost:2401 -L 8080:localhost:80 user@gate Netbios and remote desktop forward to a second server ,DS R@X @ 7HMCNVR RLA RDQUDQ HR ADGHMC SGD F@SD @MC HR MNS QTMMHMF RRG 7D MDDC @BBDRR SN SGD RLARG@QD@MC@KRNQDLNSDCDRJSNOSNSGDRDQUDQ # ssh -L 139:smbserver:139 -L 3388:smbserver:3389 user@gate 4GD RLA RG@QD B@M MNV AD @BBDRRDC VHSG <<< ATS NMKX HE SGD KNB@K RG@QD HR CHR@AKDC ADB@TRD the local share is listening on port 139 )S HR ONRRHAKD SN JDDO SGD KNB@K RG@QD DM@AKDC ENQ SGHR VD MDDC SN BQD@SD @ MDV UHQST@K CDUHBD VHSG @ MDV )0 @CCQDRR ENQ SGD STMMDK SGD RLA RG@QD VHKK AD BNMMDBSDC NUDQ SGHR @CCQDRR &TQSGDQLNQD the local RDP is already listening on 3389 RN VD BGNNRD  &NQ SGHR DW@LOKD KDSR TRD @ UHQST@K )0 NE  a 7HSG OTSSX TRD 3NTQBD ONQS )S HR ONRRHAKD SN BQD@SD LTKSHOKD KNNO CDUHBDR @MC STMMDK /M 7HMCNVR  NMKX OTSSX VNQJDC ENQ LD /M 7HMCNVR 6HRS@ @KRN ENQV@QC SGD ONQS  HM @CCHSHNM SN SGD ONQS  !KRN NM 6HRS@ SGD O@SBG +" OQDUDMSR SGD ONQS SNADENQV@QCDC RN)G@CSNTMHMRS@KKSGHRO@SGHM6HRS@ a 7HSG SGD RRGBNL BKHDMS CHR@AKD !KKNV KNB@K BNMMDBSHNMR NMKX 3HMBD RRGBNL VHKK AHMC SN @KK@CCQDRRDR NMKX@RHMFKDRG@QDB@MADBNMMDBSDC .NVBQD@SDSGDKNNOA@BJHMSDQE@BDVHSG)0 a  3XRSDL #NMSQNK 0@MDK !CC (@QCV@QD  9DR (@QCV@QD HR @KQD@CX BNMMDBSDC  !CC @ MDVG@QCV@QDCDUHBD@SANSSNL  a  )MRS@KK SGD G@QCV@QD SG@S ) L@MT@KKX RDKDBS  .DSVNQJ @C@OSDQR  -HBQNRNES -HBQNRNES ,NNOA@BJ!C@OSDQ a #NMEHFTQDSGD)0@CCQDRRNESGDE@JDCDUHBDSNL@RJ MNF@SDV@X a @CU@MBDC 7).3 %M@AKD,-(NRSR,NNJTO$HR@AKD.DS")/3NUDQ4#0)0 a  %M@AKD #KHDMS ENQ -HBQNRNES .DSVNQJR  $HR@AKD &HKD @MC 0QHMSDQ 3G@QHMF ENQ -HBQNRNES .DSVNQJR ) (!$ SN QDANNS ENQ SGHR SN VNQJ .NV BNMMDBS SN SGD RLA RG@QD VHSG << @MC QDLNSD CDRJSNO SN Debug )EHSHRMNSVNQJHMF a !QDSGDONQSRENQV@QCDCMDSRS@S @M,NNJ@SNQ a $NDRSDKMDSBNMMDBS a 9NTMDDCSGDBGDBJANW,NB@KONQSR@BBDOSBNMMDBSHNMREQNLNSGDQGNRSR a )R&HKD@MC0QHMSDQ3G@QHMFENQ-HBQNRNES.DSVNQJRCHR@AKDCNMSGDKNNOA@BJHMSDQE@BD 
  25. Connect two clients behind NAT 3TOONRD SVN BKHDMSR @QD ADGHMC

    @ .!4 F@SDV@X @MC BKHDMS BKH@CLHM G@R SN BNMMDBS SN BKHDMS BKHTRDQ SGD CDRSHM@SHNM ANSG B@M KNFHM SN SGD F@SD VHSG RRG @MC @QD QTMMHMF ,HMTW VHSG RRGC 9NT CNMS MDDC QNNS @BBDRR @MXVGDQD @R KNMF @R SGD ONQSR NM F@SD @QD @ANUD  7D TRD  NM F@SD !KRNRHMBDSGDF@SDHRTRDCKNB@KKX SGDNOSHNM'@SDV@X0NQSRHRMNSMDBDRR@QX /MBKHDMSBKHTRDQEQNLCDRSHM@SHNMSNF@SD  # ssh -R 2022:localhost:22 user@gate # forwards client 22 to gate:2022 /MBKHDMSBKH@CLHMEQNLGNRSSNF@SD  # ssh -L 3022:localhost:2022 admin@gate # forwards client 3022 to gate:2022 .NVSGD@CLHMB@MBNMMDBSCHQDBSKXSNSGDBKHDMSBKHTRDQVHSG # ssh -p 3022 admin@localhost # local:3022 -> gate:2022 -> client:22 Connect to VNC behind NAT 3TOONRD @ 7HMCNVR BKHDMS VHSG 6.# KHRSDMHMF NM ONQS  G@R SN AD @BBDRRDC EQNL ADGHMC .!4 /M BKHDMSBKHVHMSNF@SD # ssh -R 15900:localhost:5900 user@gate /MBKHDMSBKH@CLHMEQNLGNRSSNF@SD  # ssh -L 5900:localhost:15900 admin@gate .NVSGD@CLHMB@MBNMMDBSCHQDBSKXSNSGDBKHDMS6.#VHSG # vncconnect -display :0 localhost Dig a multi-hop ssh tunnel 3TOONRD XNT B@M MNS QD@BG @ RDQUDQ CHQDBSKX VHSG RRG ATS NMKX UH@ LTKSHOKD HMSDQLDCH@SD GNRSR ENQ DW@LOKD ADB@TRD NE QNTSHMF HRRTDR  3NLDSHLDR HS HR RSHKK MDBDRR@QX SN FDS @ CHQDBS BKHDMS RDQUDQ BNMMDBSHNM ENQ DW@LOKD SN BNOX EHKDR VHSG RBO NQ ENQV@QC NSGDQ ONQSR KHJD RLA NQ UMB /MD V@X SN CN SGHR HR SN BG@HM STMMDKR SNFDSGDQ SN ENQV@QC @ ONQS SN SGD RDQUDQ @KNMF SGD GNOR 4GHR B@QQHDQ ONQSNMKXQD@BGDRHSREHM@KCDRSHM@SHNMNMSGDK@RSBNMMDBSHNMSNSGDRDQUDQ 3TOONRD VD V@MS SN ENQV@QC SGD RRG ONQS EQNL @ BKHDMS SN @ RDQUDQ NUDQ SVN GNOR /MBD SGD STMMDK HR ATHKC HS HR ONRRHAKD SN BNMMDBS SN SGD RDQUDQ CHQDBSKX EQNL SGD BKHDMS @MC @KRN @CC @M NSGDQ ONQS ENQV@QC  Create tunnel in one shell BKHDMS GNRS GNRS RDQUDQ@MCCHFSTMMDK client># ssh -L5678:localhost:5678 host1 # 5678 is an arbitrary port for the tunnel host_1># ssh -L5678:localhost:5678 host2 # chain 5678 from host1 to host2 host_2># ssh -L5678:localhost:22 server # end the tunnel on port 22 on the server Use tunnel with an other shell BKHDMS RDQUDQTRHMFSTMMDK # ssh -p 5678 localhost # connect directly from client to server # scp -P 5678 myfile localhost:/tmp/ # or copy a file directly using the tunnel # rsync -e 'ssh -p 5678' myfile localhost:/tmp/ # or rsync a file directly to the server Autoconnect and keep alive script ) TRD U@QH@SHNMR NE SGD ENKKNVHMF RBQHOS SN JDDO @ L@BGHMD QD@BGD@AKD NUDQ @ QDUDQRD RRG STMMDK 4GD BNMMDBSHNMHR@TSNL@SHB@KKXQDATHKSHEBKNRDC9NTB@M@CCLTKSHOKD -L NQ -R STMMDKRNMNMDKHMD #!/bin/sh COMMAND="ssh -N -f -g -R 3022:localhost:22 [email protected]" pgrep -f -x "$COMMAND" > /dev/null 2>&1 || $COMMAND exit 0 1 * * * * colin /home/colin/port_forward.sh # crontab entry (here hourly) 
  26. 6 VPN WITH S S H !R NE UDQRHNM 

    /ODM33( B@M TRD SGD STMS@O CDUHBD SN DMBQXOS @ STMMDK 4GHR HR UDQX RHLHK@Q SN NSGDQ 4,3 A@RDC 60. RNKTSHNMR KHJD /ODM60. /MD @CU@MS@FD VHSG 33( HR SG@S SGDQD HR MN MDDC SN HMRS@KK @MC BNMEHFTQD @CCHSHNM@K RNESV@QD !CCHSHNM@KKX SGD STMMDK TRDR SGD 33( @TSGDMSHB@SHNM KHJD OQD RG@QDC JDXR 4GD CQ@VA@BJ HR SG@S SGD DMB@ORTK@SHNM HR CNMD NUDQ 4#0 VGHBG LHFGS QDRTKS HM ONNQ ODQENQL@MBD NM @ RKNV KHMJ !KRN SGD STMMDK HR QDKXHMF NM @ RHMFKD EQ@FHKD 4#0 BNMMDBSHNM 4GHR SDBGMHPTD HR UDQX TRDETK ENQ @ PTHBJ )0 A@RDC 60. RDSTO 4GDQD HR MN KHLHS@SHNM @R VHSG SGD RHMFKD 4#0 ONQS ENQV@QC @KK K@XDQ  OQNSNBNKR KHJD )#-0 4#05$0 DSB @QD ENQV@QCDC NUDQ SGD 60. )M @MXB@RD SGDENKKNVHMFNOSHNMR@QDMDDCDCHMSGDRRGC?BNMEEHKD PermitRootLogin yes PermitTunnel yes 6.1 Single P2P connection (DQD VD @QD BNMMDBSHMF SVN GNRSR GBKHDMS @MC GRDQUDQ VHSG @ ODDQ SN ODDQ STMMDK 4GD BNMMDBSHNM HR started from hclient SN GRDQUDQ @MC HR CNMD @R QNNS 4GD STMMDK DMC ONHMSR @QD  RDQUDQ @MC  BKHDMS @MC VD BQD@SD @ CDUHBD STM SGHR BNTKC @KRN AD @M NSGDQ MTLADQ  4GD OQNBDCTQD HRUDQXRHLOKD a #NMMDBSVHSG33(TRHMFSGDSTMMDKNOSHNM V a #NMEHFTQDSGD)0@CCQDRRDRNESGDSTMMDK/MBDNMSGDRDQUDQ@MCNMBDNMSGDBKHDMS Connect to the server #NMMDBSHNMRS@QSDCNMSGDBKHDMS@MCBNLL@MCR@QDDWDBTSDCNMSGDRDQUDQ Server is on Linux cli># ssh -w5:5 root@hserver srv># ifconfig tun5 10.0.1.1 netmask 255.255.255.252 # Executed on the server shell Server is on FreeBSD cli># ssh -w5:5 root@hserver srv># ifconfig tun5 10.0.1.1 10.0.1.2 # Executed on the server shell Configure the client #NLL@MCRDWDBTSDCNMSGDBKHDMS cli># ifconfig tun5 10.0.1.2 netmask 255.255.255.252 # Client is on Linux cli># ifconfig tun5 10.0.1.2 10.0.1.1 # Client is on FreeBSD 4GD SVN GNRSR @QD MNV BNMMDBSDC @MC B@M SQ@MRO@QDMSKX BNLLTMHB@SD VHSG @MX K@XDQ  OQNSNBNK TRHMFSGDSTMMDK)0@CCQDRRDR 6.2 Connect two networks )M @CCHSHNM SN SGD OO RDSTO @ANUD HS HR LNQD TRDETK SN BNMMDBS SVN OQHU@SD MDSVNQJR VHSG @M 33( 60. TRHMF SVN F@SDR 3TOONRD ENQ SGD DW@LOKD MDS! HR  @MC MDS"   4GD OQNBDCTQD HR RHLHK@Q @R @ANUD VD NMKX MDDC SN @CC SGD QNTSHMF .!4 LTRS AD @BSHU@SDC NM SGDOQHU@SDHMSDQE@BDNMKXHESGDF@SDR@QDMNSSGDR@LD@RSGDCDE@TKSF@SDV@XNESGDHQMDSVNQJ MDS! [F@SD! F@SD"[MDS" a #NMMDBSVHSG33(TRHMFSGDSTMMDKNOSHNM V a #NMEHFTQDSGD)0@CCQDRRDRNESGDSTMMDK/MBDNMSGDRDQUDQ@MCNMBDNMSGDBKHDMS a !CCSGDQNTSHMFENQSGDSVNMDSVNQJR a )EMDBDRR@QX @BSHU@SD.!4NMSGDOQHU@SDHMSDQE@BDNESGDF@SD 4GDRDSTOHR started from gateA in netA Connect from gateA to gateB #NMMDBSHNMHRRS@QSDCEQNLF@SD!@MCBNLL@MCR@QDDWDBTSDCNMF@SD" 
  27. gateB is on Linux gateA># ssh -w5:5 root@gateB gateB># ifconfig

    tun5 10.0.1.1 netmask 255.255.255.252 # Executed on the gateB shell gateB># route add -net 192.168.51.0 netmask 255.255.255.0 dev tun5 gateB># echo 1 > /proc/sys/net/ipv4/ip_forward # Only needed if not default gw gateB># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE gateB is on FreeBSD gateA># ssh -w5:5 root@gateB # Creates the tun5 devices gateB># ifconfig tun5 10.0.1.1 10.0.1.2 # Executed on the gateB shell gateB># route add 192.168.51.0/24 10.0.1.2 gateB># sysctl net.inet.ip.forwarding=1 # Only needed if not default gw gateB># natd -s -m -u -dynamic -n fxp0 # see NAT (page 17) gateA># sysctl net.inet.ip.fw.enable=1 Configure gateA #NLL@MCRDWDBTSDCNMF@SD! gateA is on Linux gateA># ifconfig tun5 10.0.1.2 netmask 255.255.255.252 gateA># route add -net 192.168.16.0 netmask 255.255.255.0 dev tun5 gateA># echo 1 > /proc/sys/net/ipv4/ip_forward gateA># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE gateA is on FreeBSD gateA># ifconfig tun5 10.0.1.2 10.0.1.1 gateA># route add 192.168.16.0/24 10.0.1.2 gateA># sysctl net.inet.ip.forwarding=1 gateA># natd -s -m -u -dynamic -n fxp0 # see NAT (page 17) gateA># sysctl net.inet.ip.fw.enable=1 4GD SVN OQHU@SD MDSVNQJR @QD MNV SQ@MRO@QDMSKX BNMMDBSDC UH@ SGD 33( 60. 4GD )0 ENQV@QC @MC .!4 RDSSHMFR @QD NMKX MDBDRR@QX HE SGD F@SDR @QD MNS SGD CDE@TKS F@SDV@XR )M SGHR B@RD SGD BKHDMSR VNTKCMNSJMNVVGDQDSNENQV@QCSGDQDRONMRD @MCM@SLTRSAD@BSHU@SDC 7 RS YNC 2RXMB B@M @KLNRS BNLOKDSDKX QDOK@BD BO @MC RBO ETQSGDQLNQD HMSDQQTOSDC SQ@MREDQR @QD DEEHBHDMSKX QDRS@QSDC ! SQ@HKHMF RK@RG @MC SGD @ARDMBD SGDQDNE G@R CHEEDQDMS LD@MHMFR SGD L@M O@FD HR FNNC(DQDRNLDDW@LOKDR #NOXSGDCHQDBSNQHDRVHSGETKKBNMSDMS # rsync -a /home/colin/ /backup/colin/ # "archive" mode. e.g keep the same # rsync -a /var/ /var_bak/ # rsync -aR --delete-during /home/user/ /backup/ # use relative (see below) 3@LD @R ADENQD ATS NUDQ SGD MDSVNQJ @MC VHSG BNLOQDRRHNM 2RXMB TRDR 33( ENQ SGD SQ@MRONQS ODQ CDE@TKS@MCVHKKTRDSGDRRGJDXHESGDX@QDRDS5RD@RVHSG3#0!SXOHB@KQDLNSDBNOX # rsync -axSRzv /home/user/ user@server:/backup/user/ # Copy to remote # rsync -a 'user@server:My\ Documents' My\ Documents # Quote AND escape spaces for the remote shell %WBKTCD @MX CHQDBSNQX SLO VHSGHM GNLDTRDQ @MC JDDO SGD QDK@SHUD ENKCDQR GHDQ@QBGX SG@S HR SGD QDLNSDCHQDBSNQXVHKKG@UDSGDRSQTBSTQDA@BJTOGNLDTRDQ4GHRHRSXOHB@KKXTRDCENQA@BJTOR # rsync -azR --exclude=tmp/ /home/user/ user@server:/backup/ 5RDONQSENQSGDRRGBNMMDBSHNM # rsync -az -e 'ssh -p 20022' /home/colin/ user@server:/backup/colin/ 5RHMF SGD QRXMB C@DLNM TRDC VHSG  HR LTBG E@RSDQ ATS MNS DMBQXOSDC NUDQ RRG 4GD KNB@SHNM NE A@BJTO HR CDEHMDC AX SGD BNMEHFTQ@SHNM HM DSBQRXMBCBNME 4GD U@QH@AKD 239.#?0!337/2$ B@M ADRDSSN@UNHCSGDMDDCSNDMSDQSGDO@RRVNQCL@MT@KKX 
  28. # rsync -axSRz /home/ ruser@hostname::rmodule/backup/ # rsync -axSRz ruser@hostname::rmodule/backup/ /home/

    # To copy back 3NLDHLONQS@MSNOSHNMR -a, --archive @QBGHUDLNCDR@LD@R QKOSFN$MN ( -r, --recursive QDBTQRDHMSNCHQDBSNQHDR -R, --relative TRDQDK@SHUDO@SGM@LDR -H, --hard-links OQDRDQUDG@QCKHMJR -S, --sparse G@MCKDRO@QRDEHKDRDEEHBHDMSKX -x, --one-file-system CNMSBQNRREHKDRXRSDLANTMC@QHDR --exclude=PATTERN DWBKTCDEHKDRL@SBGHMF0!44%2. --delete-during QDBDHUDQCDKDSDRCTQHMFWEDQ MNSADENQD --delete-after QDBDHUDQCDKDSDR@ESDQSQ@MREDQ MNSADENQD 7.1 Rsync on Windows 2RXMB HR @U@HK@AKD ENQ 7HMCNVR SGQNTFG BXFVHM NQ @R RS@MC @KNMD O@BJ@FDC HM BVQRXMB 4GHR HR UDQX BNMUDMHDMS ENQ @TSNL@SDC A@BJTOR )MRS@KK NMD NE SGDL not both @MC @CC SGD O@SG SN SGD 7HMCNVR RXRSDL U@QH@AKDR  #NMSQNK 0@MDK  3XRSDL  S@A !CU@MBDC ATSSNM %MUHQNMLDMS 6@QH@AKDR %CHS SGD 0@SG RXRSDL U@QH@AKD @MC @CC SGD ETKK O@SG SN SGD HMRS@KKDC QRXMB DF #<0QNFQ@L &HKDR<BV2RXMB<AHM NQ #<BXFVHM<AHM 4GHR V@X SGD BNLL@MCR rsync @MC ssh @QD @U@HK@AKD HM @ 7HMCNVRBNLL@MCRGDKK Public key authentication 2RXMB HR @TSNL@SHB@KKX STMMDKDC NUDQ 33( @MC SGTR TRDR SGD 33( @TSGDMSHB@SHNM NM SGD RDQUDQ !TSNL@SHB A@BJTOR G@UD SN @UNHC @ TRDQ HMSDQ@BSHNM ENQ SGHR SGD 33( OTAKHB JDX @TSGDMSHB@SHNM B@M ADTRDC@MCSGDQRXMBBNLL@MCVHKKQTMVHSGNTS@O@RRVNQC !KK SGD ENKKNVHMF BNLL@MCR @QD DWDBTSDC VHSGHM @ 7HMCNVR BNMRNKD )M @ BNMRNKD 3S@QS  2TM  BLC BQD@SD @MC TOKN@C SGD JDX @R CDRBQHADC HM 33( BG@MFD TRDQ @MC RDQUDQ @R @OOQNOQH@SD )E SGD EHKD @TSGNQHYDC?JDXR CNDR MNS DWHRS XDS RHLOKX BNOX HC?CR@OTA SN @TSGNQHYDC?JDXR @MC TOKN@CHS # ssh-keygen -t dsa -N '' # Creates a public and a private key # rsync user@server:.ssh/authorized_keys2 . # Copy the file locally from the server # cat id_dsa.pub >> authorized_keys2 # Or use an editor to add the key # rsync authorized_keys2 user@server:.ssh/ # Copy the file back to the server # del authorized_keys2 # Remove the local copy .NVSDRSHSVHSGHMNMDKHMD  rsync -rv "/cygdrive/c/Documents and Settings/%USERNAME%/My Documents/" \ 'user@server:My\ Documents/' Automatic backup 5RD @ A@SBG EHKD SN @TSNL@SD SGD A@BJTO @MC @CC SGD EHKD HM SGD RBGDCTKDC S@RJR 0QNFQ@LR  !BBDRRNQHDR  3XRSDL 4NNKR  3BGDCTKDC 4@RJR  &NQ DW@LOKD BQD@SD SGD EHKD A@BJTOA@S @MC QDOK@BDTRDQ RDQUDQ @ECHO OFF REM rsync the directory My Documents SETLOCAL SET CWRSYNCHOME=C:\PROGRAM FILES\CWRSYNC SET CYGWIN=nontsec SET CWOLDPATH=%PATH% REM uncomment the next line when using cygwin SET PATH=%CWRSYNCHOME%\BIN;%PATH% echo Press Control-C to abort rsync -av "/cygdrive/c/Documents and Settings/%USERNAME%/My Documents/" \ 'user@server:My\ Documents/' pause GSSORNTQBDENQFDMDSOQNIDBSRRDQDCR 
  29. 8 S UD O 3TCN HR @ RS@MC@QC V@X SN

    FHUD TRDQR RNLD @CLHMHRSQ@SHUD QHFGSR VHSGNTS FHUHMF NTS SGD QNNS O@RRVNQC 3TCN HR UDQX TRDETK HM @ LTKSH TRDQ DMUHQNMLDMS VHSG @ LHW NE RDQUDQ @MC VNQJRS@SHNMR 3HLOKXB@KKSGDBNLL@MCVHSGRTCN # sudo /etc/init.d/dhcpd restart # Run the rc script as root # sudo -u sysadmin whoami # Run cmd as an other user 8.1 Configuration 3TCN HR BNMEHFTQDC HM /etc/sudoers @MC LTRS NMKX AD DCHSDC VHSG visudo 4GD A@RHB RXMS@W HR SGD KHRSR@QDBNLL@RDO@Q@SDC  user hosts = (runas) commands # In /etc/sudoers users NMDNQLNQDTRDQRNQFQNTOKHJDVGDDK SNF@HMSGDQHFGSR hosts KHRSNEGNRSRNQ!,, runas KHRSNETRDQRNQ!,, SG@SSGDBNLL@MCQTKDB@MADQTM@R)SHRDMBKNRDCHM  commands KHRSNEBNLL@MCRNQ!,, SG@SVHKKADQTM@RQNNSNQ@RQTM@R !CCHSHNM@KKX SGNRD JDXVNQCR B@M AD CDEHMDC @R @KH@R SGDX @QD B@KKDC 5RDQ?!KH@R (NRS?!KH@R 2TM@R?!KH@R@MC#LMC?!KH@R4GHRHRTRDETKENQK@QFDQRDSTOR(DQD@RTCNDQRDW@LOKD # cat /etc/sudoers # Host aliases are subnets or hostnames. Host_Alias DMZ = 212.118.81.40/28 Host_Alias DESKTOP = work1, work2 # User aliases are a list of users which can have the same rights User_Alias ADMINS = colin, luca, admin User_Alias DEVEL = joe, jack, julia Runas_Alias DBA = oracle,pgsql # Command aliases define the full path of a list of commands Cmnd_Alias SYSTEM = /sbin/reboot,/usr/bin/kill,/sbin/halt,/sbin/shutdown,/etc/init.d/ Cmnd_Alias PW = /usr/bin/passwd [A-z]*, !/usr/bin/passwd root # Not root pwd! Cmnd_Alias DEBUG = /usr/sbin/tcpdump,/usr/bin/wireshark,/usr/bin/nmap # The actual rules root,ADMINS ALL = (ALL) NOPASSWD: ALL # ADMINS can do anything w/o a password. DEVEL DESKTOP = (ALL) NOPASSWD: ALL # Developers have full right on desktops DEVEL DMZ = (ALL) NOPASSWD: DEBUG # Developers can debug the DMZ servers. # User sysadmin can mess around in the DMZ servers with some commands. sysadmin DMZ = (ALL) NOPASSWD: SYSTEM,PW,DEBUG sysadmin ALL,!DMZ = (ALL) NOPASSWD: ALL # Can do anything outside the DMZ. %dba ALL = (DBA) ALL # Group dba can run as database user. # anyone can mount/unmount a cd-rom on the desktop machines ALL DESKTOP = NOPASSWD: /sbin/mount /cdrom,/sbin/umount /cdrom 9 E NCRYPT F IL ES 9.1 OpenSSL A single file %MBQXOS@MCCDBQXOS # openssl aes-128-cbc -salt -in file -out file.aes # openssl aes-128-cbc -d -salt -in file.aes -out file .NSDSG@SSGDEHKDB@MNEBNTQRDAD@S@Q@QBGHUD 
  30. tar and encrypt a whole directory # tar -cf -

    directory | openssl aes-128-cbc -salt -out directory.tar.aes # Encrypt # openssl aes-128-cbc -d -salt -in directory.tar.aes | tar -x -f - # Decrypt tar zip and encrypt a whole directory # tar -zcf - directory | openssl aes-128-cbc -salt -out directory.tar.gz.aes # Encrypt # openssl aes-128-cbc -d -salt -in directory.tar.gz.aes | tar -xz -f - # Decrypt a 5RD J LXRDBQDSO@RRVNQC @ESDQ @DR  BAB SN @UNHC SGD HMSDQ@BSHUD O@RRVNQC QDPTDRS (NVDUDQMNSDSG@SSGHRHRGHFGKXHMRDBTQD a 5RD aes-256-cbc HMRSD@C NE aes-128-cbc SN FDS DUDM RSQNMFDQ DMBQXOSHNM 4GHR TRDR @KRN LNQD#05 9.2 GPG 'MT0' HR VDKK JMNVM SN DMBQXOS @MC RHFM DL@HKR NQ @MX C@S@ &TQSGDQLNQD FOF @MC @KRN OQNUHCDR @M @CU@MBDC JDX L@M@FDLDMS RXRSDL 4GHR RDBSHNM NMKX BNUDQR EHKDR DMBQXOSHNM MNS DL@HK TR@FD RHFMHMFNQSGD7DA /E 4QTRS 4GD RHLOKDRS DMBQXOSHNM HR VHSG @ RXLLDSQHB BHOGDQ )M SGHR B@RD SGD EHKD HR DMBQXOSDC VHSG @ O@RRVNQC @MC @MXNMD VGN JMNVR SGD O@RRVNQC B@M CDBQXOS HS SGTR SGD JDXR @QD MNS MDDCDC 'OF @CCR@MDWSDMSHNMFOFSNSGDDMBQXOSDCEHKDM@LDR # gpg -c file # Encrypt file with password # gpg file.gpg # Decrypt file (optionally -o otherfile) Using keys &NQ LNQD CDS@HKR RDD '0' 1THBJ 3S@QS @MC '0'0'0 "@RHBR @MC SGD FMTOF CNBTLDMS@SHNM @LNMF NSGDQR 4GD OQHU@SD @MC OTAKHB JDXR @QD SGD GD@QS NE @RXLLDSQHB BQXOSNFQ@OGX 7G@S HR HLONQS@MS SN QDLDLADQ a 9NTQ OTAKHB JDX HR TRDC AX others SN DMBQXOS EHKDR SG@S NMKX XNT @R SGD QDBDHUDQ B@M CDBQXOS MNS DUDM SGD NMD VGN DMBQXOSDC SGD EHKD B@M CDBQXOS HS  4GD OTAKHB JDX HR SGTR LD@MS SN AD CHRSQHATSDC a 9NTQ OQHU@SD JDX HR DMBQXOSDC VHSG XNTQ O@RROGQ@RD @MC HR TRDC SN CDBQXOS EHKDR VGHBG VDQD DMBQXOSDC VHSG your OTAKHB JDX 4GD OQHU@SD JDX LTRS AD JDOS secure !KRN HE SGD JDX NQ O@RROGQ@RDHRKNRS RN@QD@KKSGDEHKDRDMBQXOSDCVHSGXNTQOTAKHBJDX a 4GDJDXEHKDR@QDB@KKDCJDXQHMFR@RSGDXB@MBNMS@HMLNQDSG@MNMDJDX &HQRS FDMDQ@SD @ JDX O@HQ 4GD CDE@TKSR @QD EHMD GNVDUDQ XNT VHKK G@UD SN DMSDQ @S KD@RS XNTQ ETKK M@LD @MC DL@HK @MC NOSHNM@KKX @ BNLLDMS 4GD BNLLDMS HR TRDETK SN BQD@SD LNQD SG@M NMD JDX VHSGSGDR@LDM@LD@MCDL@HK!KRNXNTRGNTKCTRD@O@RROGQ@RD MNS@RHLOKDO@RRVNQC # gpg --gen-key # This can take a long time 4GDJDXR@QDRSNQDCHM]FMTOFNM5MHW NM7HMCNVRSGDX@QDSXOHB@KKXRSNQDCHM #$NBTLDMSR@MC3DSSHMFR53%2.!-%!OOKHB@SHNM$@S@FMTOF ~/.gnupg/pubring.gpg # Contains your public keys and all others imported ~/.gnupg/secring.gpg # Can contain more than one private key 3GNQSQDLHMCDQNMLNRSTRDCNOSHNMR -e DMBQXOSC@S@ -d CDBQXOSC@S@ -r .!-%DMBQXOSENQQDBHOHDMS.!-%NQ&TKK.@LDNQDL@HK CNL@HM -a BQD@SD@RBHH@QLNQDCNTSOTSNE@JDX -o TRD@RNTSOTSEHKD 4GD DW@LOKDR TRD 9NTQ .@LD @MC !KHBD @R SGD JDXR @QD QDEDQQDC SN AX SGD DL@HK NQ ETKK M@LD NQ O@QSH@K M@LD &NQ DW@LOKD ) B@M TRD #NKHM NQ B BAUT ENQ LX JDX ;#NKHM "@QRBGDK BAUT B BAUT= GSSOVVVL@CAN@BNLFDDJFOF PTHBJRS@QS GSSO@OK@VQDMBDBNL"@RHBRFOFGSLK GSSOFMTOFNQFCNBTLDMS@SHNM 
  31. Encrypt for personal use only .NMDDCSNDWONQSHLONQS@MXJDXENQSGHR9NTG@UDANSG@KQD@CX # gpg -e -r

    'Your Name' file # Encrypt with your public key # gpg -o file -d file.gpg # Decrypt. Use -o or it goes to stdout Encrypt - Decrypt with keys &HQRS XNT MDDC SN DWONQS XNTQ OTAKHB JDX ENQ RNLDNMD DKRD SN TRD HS !MC XNT MDDC SN HLONQS SGD OTAKHB R@X EQNL !KHBD SN DMBQXOS @ EHKD ENQ GDQ 9NT B@M DHSGDQ G@MCKD SGD JDXR HM RHLOKD @RBHH EHKDR NQ TRD@OTAKHBJDXRDQUDQ &NQ DW@LOKD !KHBD DWONQS GDQ OTAKHB JDX @MC XNT HLONQS HS XNT B@M SGDM DMBQXOS @ EHKD ENQ GDQ 4G@S HRNMKX!KHBDVHKKAD@AKDSNCDBQXOSHS # gpg -a -o alicekey.asc --export 'Alice' # Alice exported her key in ascii file. # gpg --send-keys --keyserver subkeys.pgp.net KEYID # Alice put her key on a server. # gpg --import alicekey.asc # You import her key into your pubring. # gpg --search-keys --keyserver subkeys.pgp.net 'Alice' # or get her key from a server. /MBDSGDJDXR@QDHLONQSDCHSHRUDQXD@RXSNDMBQXOSNQCDBQXOS@EHKD # gpg -e -r 'Alice' file # Encrypt the file for Alice. # gpg -d file.gpg -o file # Decrypt a file encrypted by Alice for you. Key administration # gpg --list-keys # list public keys and see the KEYIDS The KEYID follows the '/' e.g. for: pub 1024D/D12B77CE the KEYID is D12B77CE # gpg --gen-revoke 'Your Name' # generate revocation certificate # gpg --list-secret-keys # list private keys # gpg --delete-keys NAME # delete a public key from local key ring # gpg --delete-secret-key NAME # delete a secret key from local key ring # gpg --fingerprint KEYID # Show the fingerprint of the key # gpg --edit-key KEYID # Edit key (e.g sign or add/del email) 10 E NCRYPT PA R TITIONS ,HMTW VHSG ,5+3 O [ ,HMTW CL BQXOS NMKX O [ &QDD"3$ '%,) O [ &"3$ OVC NMKX O [ /38HL@FD O 4GDQD @QD L@MX NSGDQ @KSDQM@SHUD LDSGNCR SN DMBQXOS CHRJR ) NMKX RGNV GDQD SGD LDSGNCR ) JMNV @MC TRD +DDO HM LHMC SG@S SGD RDBTQHSX HR NMKX FNNC @R KNMF SGD /3 G@R MNS ADDM SDLODQDC VHSG !M HMSQTCDQ BNTKC D@RHKX QDBNQC SGD O@RRVNQC EQNL SGD JDXAN@QC DUDMSR &TQSGDQLNQD SGD C@S@ HR EQDDKX @BBDRRHAKD VGDM SGD O@QSHSHNM HR attached @MC VHKK MNS OQDUDMS @M HMSQTCDQ SN G@UD @BBDRR SN HS HMSGHRRS@SD 10.1 Linux 4GNRD HMRSQTBSHNMR TRD SGD ,HMTW dm-crypt CDUHBD L@OODQ E@BHKHSX @U@HK@AKD NM SGD  JDQMDK )M SGHR DW@LOKD KDSR DMBQXOS SGD O@QSHSHNM /dev/sdc1 HS BNTKC AD GNVDUDQ @MX NSGDQ O@QSHSHNM NQ CHRJ NQ 53" NQ @ EHKD A@RDC O@QSHSHNM BQD@SDC VHSG losetup )M SGHR B@RD VD VNTKC TRD /dev/loop0 3DD EHKD HL@FD O@QSHSHNM 4GD CDUHBD L@OODQ TRDR K@ADKR SN HCDMSHEX @ O@QSHSHNM 7D TRD sdc1 HM SGHR DW@LOKD ATSHSBNTKCAD@MXRSQHMF dm-crypt with LUKS ,5+3 VHSG CL BQXOS G@R ADSSDQ DMBQXOSHNM @MC L@JDR HS ONRRHAKD SN G@UD LTKSHOKD O@RROGQ@RD ENQ SGD R@LD O@QSHSHNM NQ SN BG@MFD SGD O@RRVNQC D@RHKX 4N SDRS HE ,5+3 HR @U@HK@AKD RHLOKX SXOD # cryptsetup --help HE MNSGHMF @ANTS ,5+3 RGNVR TO TRD SGD HMRSQTBSHNMR ADKNV 7HSGNTS ,5+3 &HQRSBQD@SD@O@QSHSHNMHEMDBDRR@QX fdisk /dev/sdc Create encrypted partition # dd if=/dev/urandom of=/dev/sdc1 # Optional. For paranoids only (takes days) # cryptsetup -y luksFormat /dev/sdc1 # This destroys any data on sdc1 
  32. # cryptsetup luksOpen /dev/sdc1 sdc1 # mkfs.ext3 /dev/mapper/sdc1 # create

    ext3 file system # mount -t ext3 /dev/mapper/sdc1 /mnt # umount /mnt # cryptsetup luksClose sdc1 # Detach the encrypted partition Attach # cryptsetup luksOpen /dev/sdc1 sdc1 # mount -t ext3 /dev/mapper/sdc1 /mnt Detach # umount /mnt # cryptsetup luksClose sdc1 dm-crypt without LUKS # cryptsetup -y create sdc1 /dev/sdc1 # or any other partition like /dev/loop0 # dmsetup ls # check it, will display: sdc1 (254, 0) # mkfs.ext3 /dev/mapper/sdc1 # This is done only the first time! # mount -t ext3 /dev/mapper/sdc1 /mnt # umount /mnt/ # cryptsetup remove sdc1 # Detach the encrypted partition $N DW@BSKX SGD R@LD VHSGNTS SGD LJER O@QS SN QD @SS@BG SGD O@QSHSHNM )E SGD O@RRVNQC HR MNS BNQQDBS SGD LNTMS BNLL@MC VHKK E@HK )M SGHR B@RD RHLOKX QDLNUD SGD L@O RCB cryptsetup remove sdc1 @MCBQD@SDHS@F@HM 10.2 FreeBSD 4GD SVN ONOTK@Q &QDD"3$ CHRJ DMBQXOSHNM LNCTKDR @QD gbde @MC geli ) MNV TRD FDKH ADB@TRD HS HR E@RSDQ @MC @KRN TRDR SGD BQXOSN CDUHBD ENQ G@QCV@QD @BBDKDQ@SHNM 3DD 4GD &QDD"3$ G@MCANNJ #G@OSDQ ENQ@KKSGDCDS@HKR4GDFDKHLNCTKDLTRSADKN@CDCNQBNLOHKDCHMSNSGDJDQMDK options GEOM_ELI device crypto # or as module: # echo 'geom_eli_load="YES"' >> /boot/loader.conf # or do: kldload geom_eli Use password and key ) TRD SGNRD RDSSHMFR ENQ @ SXOHB@K CHRJ DMBQXOSHNM HS TRDR @ O@RROGQ@RD !.$ @ JDX SN DMBQXOS SGD L@RSDQ JDX 4G@S HR XNT MDDC ANSG SGD O@RRVNQC @MC SGD FDMDQ@SDC JDX /root/ad1.key SN @SS@BG SGD O@QSHSHNM 4GD L@RSDQ JDX HR RSNQDC HMRHCD SGD O@QSHSHNM @MC HR MNS UHRHAKD 3DD ADKNV ENQ SXOHB@K 53"NQEHKDA@RDCHL@FD Create encrypted partition # dd if=/dev/random of=/root/ad1.key bs=64 count=1 # this key encrypts the mater key # geli init -s 4096 -K /root/ad1.key /dev/ad1 # -s 8192 is also OK for disks # geli attach -k /root/ad1.key /dev/ad1 # DO make a backup of /root/ad1.key # dd if=/dev/random of=/dev/ad1.eli bs=1m # Optional and takes a long time # newfs /dev/ad1.eli # Create file system # mount /dev/ad1.eli /mnt Attach # geli attach -k /root/ad1.key /dev/ad1 # fsck -ny -t ffs /dev/ad1.eli # In doubt check the file system # mount /dev/ad1.eli /mnt Detach 4GDCDS@BGOQNBDCTQDHRCNMD@TSNL@SHB@KKXNMRGTSCNVM # umount /mnt # geli detach /dev/ad1.eli GSSOVVVEQDDARCNQFG@MCANNJCHRJR DMBQXOSHMFGSLK 
  33. /etc/fstab 4GD DMBQXOSDC O@QSHSHNM B@M AD BNMEHFTQDC SN AD LNTMSDC

    VHSG DSBERS@A 4GD O@RRVNQC VHKK AD OQNLOSDCVGDMANNSHMF4GDENKKNVHMFRDSSHMFR@QDQDPTHQDCENQSGHRDW@LOKD # grep geli /etc/rc.conf geli_devices="ad1" geli_ad1_flags="-k /root/ad1.key" # grep geli /etc/fstab /dev/ad1.eli /home/private ufs rw 0 0 Use password only )S HR LNQD BNMUDMHDMS SN DMBQXOS @ 53" RSHBJ NQ EHKD A@RDC HL@FD VHSG @ O@RROGQ@RD NMKX @MC MN JDX )M SGHR B@RD HS HR MNS MDBDRR@QX SN B@QQX SGD @CCHSHNM@K JDX EHKD @QNTMC 4GD OQNBDCTQD HR UDQX LTBG SGD R@LD @R @ANUD RHLOKX VHSGNTS SGD JDX EHKD ,DSR DMBQXOS @ EHKD A@RDC HL@FD /cryptedfile NE  '" # dd if=/dev/zero of=/cryptedfile bs=1M count=1000 # 1 GB file # mdconfig -at vnode -f /cryptedfile # geli init /dev/md0 # encrypts with password only # geli attach /dev/md0 # newfs -U -m 0 /dev/md0.eli # mount /dev/md0.eli /mnt # umount /dev/md0.eli # geli detach md0.eli )SHRMNVONRRHAKDSNLNTMSSGHRHL@FDNM@MNSGDQRXRSDLVHSGSGDO@RRVNQCNMKX # mdconfig -at vnode -f /cryptedfile # geli attach /dev/md0 # mount /dev/md0.eli /mnt 10.1 OS X Encrypted Disk Image $NMSJMNVAXBNLL@MCKHMDNMKX3DD /38%MBQXOSDC$HRJ)L@FD @MC !OOKDRTOONQS 11 S S L CER TIF ICA TE S 3N B@KKDC 33,4,3 BDQSHEHB@SDR @QD BQXOSNFQ@OGHB OTAKHB JDX BDQSHEHB@SDR @MC @QD BNLONRDC NE @ OTAKHB @MC @ OQHU@SD JDX 4GD BDQSHEHB@SDR @QD TRDC SN @TSGDMSHB@SD SGD DMCONHMSR @MC DMBQXOS SGD C@S@ 4GDX@QDTRDCENQDW@LOKDNM@VDARDQUDQGSSOR NQL@HKRDQUDQHL@OR  11.1 Procedure a 7D MDDC @ BDQSHEHB@SD @TSGNQHSX SN RHFM NTQ BDQSHEHB@SD 4GHR RSDO HR TRT@KKX OQNUHCDC AX @ UDMCNQKHJD4G@VSD 6DQHRHFM DSB GNVDUDQVDB@M@KRNBQD@SDNTQNVM a #QD@SD @ BDQSHEHB@SD RHFMHMF QDPTDRS 4GHR QDPTDRS HR KHJD @M TMRHFMDC BDQSHEHB@SD SGD OTAKHB O@QS @MC @KQD@CX BNMS@HMR @KK MDBDRR@QX HMENQL@SHNM 4GD BDQSHEHB@SD QDPTDRS HR MNQL@KKX RDMS SN SGD @TSGNQHSX UDMCNQ ENQ RHFMHMF 4GHR RSDO @KRN BQD@SDR SGD OQHU@SD JDX NM SGD KNB@K L@BGHMD a 3HFMSGDBDQSHEHB@SDVHSGSGDBDQSHEHB@SD@TSGNQHSX a )E MDBDRR@QX INHM SGD BDQSHEHB@SD @MC SGD JDX HM @ RHMFKD EHKD SN AD TRDC AX SGD @OOKHB@SHNM VDARDQUDQ L@HKRDQUDQDSB  11.2 Configure OpenSSL 7D TRD TRQKNB@KBDQSR @R CHQDBSNQX ENQ SGHR DW@LOKD BGDBJ NQ DCHS DSBRRKNODMRRKBME @BBNQCHMFKX SN XNTQ RDSSHMFR RN XNT JMNV VGDQD SGD EHKDR VHKK AD BQD@SDC (DQD @QD SGD QDKDU@MS O@QS NE NODMRRKBME [ CA_default ] dir = /usr/local/certs/CA # Where everything is kept GSSORVHJHSG@XDQC@QSLNTSGDCTCHROK@XBNLOTSHMF#QD@SHMF @ -@B /3 8 %MBQXOSDC $HRJ )L@FD GSSORTOONQS@OOKDBNLJAGS 
  34. certs = $dir/certs # Where the issued certs are kept

    crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. -@JDRTQDSGDCHQDBSNQHDRDWHRSNQBQD@SDSGDL # mkdir -p /usr/local/certs/CA # cd /usr/local/certs/CA # mkdir certs crl newcerts private # echo "01" > serial # Only if serial does not exist # touch index.txt )E XNT HMSDMC SN FDS @ RHFMDC BDQSHEHB@SD EQNL @ UDMCNQ XNT NMKX MDDC @ BDQSHEHB@SD RHFMHMF QDPTDRS #32 4GHR#32VHKKSGDMADRHFMDCAXSGDUDMCNQENQ@KHLHSDCSHLDDFXD@Q  11.3 Create a certificate authority )E XNT CN MNS G@UD @ BDQSHEHB@SD @TSGNQHSX EQNL @ UDMCNQ XNTKK G@UD SN BQD@SD XNTQ NVM 4GHR RSDO HR MNS MDBDRR@QX HE NMD HMSDMC SN TRD @ UDMCNQ SN RHFM SGD QDPTDRS 4N L@JD @ BDQSHEHB@SD @TSGNQHSX #!  # openssl req -new -x509 -days 730 -config /etc/ssl/openssl.cnf \ -keyout CA/private/cakey.pem -out CA/cacert.pem 11.4 Create a certificate signing request 4N L@JD @ MDV BDQSHEHB@SD ENQ L@HK RDQUDQ NQ VDA RDQUDQ ENQ DW@LOKD EHQRS BQD@SD @ QDPTDRS BDQSHEHB@SD VHSG HSR OQHU@SD JDX )E XNTQ @OOKHB@SHNM CN MNS RTOONQS DMBQXOSDC OQHU@SD JDX ENQ DW@LOKD 57 )-!0CNDRMNS SGDMCHR@AKDDMBQXOSHNMVHSG -nodes # openssl req -new -keyout newkey.pem -out newreq.pem \ -config /etc/ssl/openssl.cnf # openssl req -nodes -new -keyout newkey.pem -out newreq.pem \ -config /etc/ssl/openssl.cnf # No encryption for the key +DDO SGHR BQD@SDC #32 newreq.pem @R HS B@M AD RHFMDC @F@HM @S SGD MDWS QDMDV@K SGD RHFM@STQD NMKSVHKKKHLHSSGDU@KHCHSXNESGDBDQSHEHB@SD4GHROQNBDRR@KRNBQD@SDCSGDOQHU@SDJDX newkey.pem 11.5 Sign the certificate 4GD BDQSHEHB@SD QDPTDRS G@R SN AD RHFMDC AX SGD #! SN AD U@KHC SGHR RSDO HR TRT@KKX CNMD AX SGD UDMCNQ Note: replace "servername" with the name of your server in the next commands # cat newreq.pem newkey.pem > new.pem # openssl ca -policy policy_anything -out servernamecert.pem \ -config /etc/ssl/openssl.cnf -infiles new.pem # mv newkey.pem servernamekey.pem .NVRDQUDQM@LDJDXODLHRSGDOQHU@SDJDX@MCRDQUDQM@LDBDQSODLHRSGDRDQUDQBDQSHEHB@SD 11.6 Create united certificate 4GD )-!0 RDQUDQ V@MSR SN G@UD ANSG OQHU@SD JDX @MC RDQUDQ BDQSHEHB@SD HM SGD R@LD EHKD !MC HM FDMDQ@K SGHR HR @KRN D@RHDQ SN G@MCKD ATS SGD EHKD G@R SN AD JDOS RDBTQDKX !O@BGD @KRN B@M CD@K VHSGHSVDKK#QD@SD@EHKDRDQUDQM@LDODLBNMS@HMHMFANSGSGDBDQSHEHB@SD@MCJDX a /ODM SGD OQHU@SD JDX RDQUDQM@LDJDXODL VHSG @ SDWS DCHSNQ @MC BNOX SGD OQHU@SD JDX HMSN SGDRDQUDQM@LDODLEHKD a $NSGDR@LDVHSGSGDRDQUDQBDQSHEHB@SDRDQUDQM@LDBDQSODL  4GDEHM@KRDQUDQM@LDODLEHKDRGNTKCKNNJKHJDSGHR -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDutWy+o/XZ/[...]qK5LqQgT3c9dU6fcR+WuSs6aejdEDDqBRQ -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIIERzCCA7CgAwIBAgIBBDANB[...]iG9w0BAQQFADCBxTELMAkGA1UEBhMCREUx -----END CERTIFICATE----- 
  35. 7G@SVDG@UDMNVHMSGDCHQDBSNQXTRQKNB@KBDQSR #!OQHU@SDB@JDXODL (CA server private key) #!B@BDQSODL (CA server public

    key) BDQSRRDQUDQM@LDJDXODL (server private key) BDQSRRDQUDQM@LDBDQSODL (server signed certificate) BDQSRRDQUDQM@LDODL (server certificate with private key) +DDOSGDOQHU@SDJDXRDBTQD 11.7 View certificate information 4NUHDVSGDBDQSHEHB@SDHMENQL@SHNMRHLOKXCN # openssl x509 -text -in servernamecert.pem # View the certificate info # openssl req -noout -text -in server.csr # View the request info # openssl s_client -connect cb.vu:443 # Check a web server certificate 12 CVS 3DQUDQRDSTO O [ #63SDRS O [ 33(STMMDKHMF O [ #63TR@FD O 12.1 Server setup Initiate the CVS $DBHCD VGDQD SGD L@HM QDONRHSNQX VHKK QDRS @MC BQD@SD @ QNNS BUR &NQ DW@LOKD TRQKNB@KBUR @R QNNS  # mkdir -p /usr/local/cvs # setenv CVSROOT /usr/local/cvs # Set CVSROOT to the new location (local) # cvs init # Creates all internal CVS config files # cd /root # cvs checkout CVSROOT # Checkout the config files to modify them # cd CVSROOT edit config ( fine as it is) # cvs commit config cat >> writers # Create a writers file (optionally also readers) colin ^D # Use [Control][D] to quit the edit # cvs add writers # Add the file writers into the repository # cvs edit checkoutlist # cat >> checkoutlist writers ^D # Use [Control][D] to quit the edit # cvs commit # Commit all the configuration changes !CC @ readers EHKD HE XNT V@MS SN CHEEDQDMSH@SD QD@C @MC VQHSD ODQLHRRHNMR Note: $N MNS DUDQ DCHS EHKDR CHQDBSKX HMSN SGD L@HM BUR ATS Q@SGDQ BGDBJNTS SGD EHKD LNCHEX HS @MC BGDBJ HS HM 7D CHC SGHR VHSGSGDEHKD writers SNCDEHMDSGDVQHSD@BBDRR 4GDQD @QD SGQDD ONOTK@Q V@XR SN @BBDRR SGD #63 @S SGHR ONHMS 4GD EHQRS SVN CNMS MDDC @MX ETQSGDQ BNMEHFTQ@SHNM3DDSGDDW@LOKDRNM #632//4 ADKNVENQGNVSNTRDSGDL a $HQDBS KNB@K @BBDRR SN SGD EHKD RXRSDL 4GD TRDQR MDDC RTEEHBHDMS EHKD ODQLHRRHNM SN @BBDRR SGD #3 CHQDBSKX @MC SGDQD HR MN ETQSGDQ @TSGDMSHB@SHNM HM @CCHSHNM SN SGD /3 KNFHM (NVDUDQ SGHRHRNMKXTRDETKHESGDQDONRHSNQXHRKNB@K a 2DLNSD @BBDRR VHSG RRG VHSG SGD DWS OQNSNBNK !MX TRD VHSG @M RRG RGDKK @BBNTMS @MC QD@C VQHSD ODQLHRRHNMR NM SGD #63 RDQUDQ B@M @BBDRR SGD #63 CHQDBSKX VHSG DWS NUDQ RRG VHSGNTS @MX @CCHSHNM@K STMMDK 4GDQD HR MN RDQUDQ OQNBDRR QTMMHMF NM SGD #63 ENQ SGHR SN VNQJ 4GD RRGKNFHMCNDRSGD@TSGDMSHB@SHNM a 2DLNSD @BBDRR VHSG ORDQUDQ CDE@TKS ONQS SBO  4GHR HR SGD OQDEDQQDC TRD ENQ K@QFDQ TRDQ A@RD @R SGD TRDQR @QD @TSGDMSHB@SDC AX SGD #63 ORDQUDQ VHSG @ CDCHB@SDC O@RRVNQC C@S@A@RD SGDQD HR SGDQDENQD MN MDDC ENQ KNB@K TRDQR @BBNTMSR 4GHR RDSTO HR DWOK@HMDC ADKNV 
  36. Network setup with inetd 4GD #63 B@M AD QTM KNB@KKX

    NMKX HE @ MDSVNQJ @BBDRR HR MNS MDDCDC &NQ @ QDLNSD @BBDRR SGD C@DLNM HMDSCB@MRS@QSSGDORDQUDQVHSGSGDENKKNVHMFKHMDHMDSBHMDSCBNMEDSBWHMDSCCBURNM3T3%  cvspserver stream tcp nowait cvs /usr/bin/cvs cvs \ --allow-root=/usr/local/cvs pserver )S HR @ FNNC HCD@ SN AKNBJ SGD BUR ONQS EQNL SGD )MSDQMDS VHSG SGD EHQDV@KK @MC TRD @M RRG STMMDK SN @BBDRRSGDQDONRHSNQXQDLNSDKX Separate authentication )S HR ONRRHAKD SN G@UD BUR TRDQR VGHBG @QD MNS O@QS NE SGD /3 MN KNB@K TRDQR  4GHR HR @BST@KKX OQNA@AKX V@MSDC SNN EQNL SGD RDBTQHSX ONHMS NE UHDV 3HLOKX @CC @ EHKD M@LDC passwd HM SGD #632//4 CHQDBSNQX BNMS@HMHMF SGD TRDQR KNFHM @MC O@RRVNQC HM SGD BQXOS ENQL@S 4GHR HR B@M AD CNMDVHSGSGD@O@BGDGSO@RRVCSNNK Note: 4GHR O@RRVC EHKD HR SGD NMKX EHKD VGHBG G@R SN AD DCHSDC CHQDBSKX HM SGD #632//4 CHQDBSNQX !KRN HSVNMSADBGDBJDCNTS-NQDHMENVHSGGSO@RRVC GDKO # htpasswd -cb passwd user1 password1 # -c creates the file # htpasswd -b passwd user2 password2 .NV @CC :cvs @S SGD DMC NE D@BG KHMD SN SDKK SGD BUR RDQUDQ SN BG@MFD SGD TRDQ SN BUR NQ VG@SDUDQ XNTQBURRDQUDQHRQTMMHMFTMCDQ )SKNNJRKHJDSGHR # cat passwd user1:xsFjhU22u8Fuo:cvs user2:vnefJOsnnvToM:cvs 12.2 Test it 4DRSSGDKNFHM@RMNQL@KTRDQENQDW@LOKDGDQDLD # cvs -d :pserver:[email protected]:/usr/local/cvs login Logging in to :pserver:[email protected]:2401/usr/local/cvs CVS password: CVSROOT variable 4GHR HR @M DMUHQNMLDMS U@QH@AKD TRDC SN RODBHEX SGD KNB@SHNM NE SGD QDONRHSNQX VDQD CNHMF NODQ@SHNMR NM &NQ KNB@K TRD HS B@M AD ITRS RDS SN SGD CHQDBSNQX NE SGD QDONRHSNQX &NQ TRD NUDQ SGD MDSVNQJ SGD SQ@MRONQS OQNSNBNK LTRS AD RODBHEHDC 3DS SGD #632//4 U@QH@AKD VHSG setenv CVSROOT string NM @BRG SBRGRGDKK NQVHSG export CVSROOT=string NM@RG A@RGRGDKK # setenv CVSROOT :pserver:<username>@<host>:/cvsdirectory For example: # setenv CVSROOT /usr/local/cvs # Used locally only # setenv CVSROOT :local:/usr/local/cvs # Same as above # setenv CVSROOT :ext:user@cvsserver:/usr/local/cvs # Direct access with SSH # setenv CVS_RSH ssh # for the ext access # setenv CVSROOT :pserver:[email protected]:/usr/local/cvs # network with pserver 7GDM SGD KNFHM RTBBDDCDC NMD B@M HLONQS @ MDV OQNIDBS HMSN SGD QDONRHSNQX cd into XNTQ OQNIDBS QNNSCHQDBSNQX cvs import <module name> <vendor tag> <initial tag> cvs -d :pserver:[email protected]:/usr/local/cvs import MyProject MyCompany START 7GDQD -X0QNIDBS HR SGD M@LD NE SGD MDV OQNIDBS HM SGD QDONRHSNQX TRDC K@SDQ SN BGDBJNTS  #UR VHKK HLONQSSGDBTQQDMSCHQDBSNQXBNMSDMSHMSNSGDMDVOQNIDBS 4NBGDBJNTS # cvs -d :pserver:[email protected]:/usr/local/cvs checkout MyProject or # setenv CVSROOT :pserver:[email protected]:/usr/local/cvs # cvs checkout MyProject 
  37. 12.3 SSH tunneling for CVS 7D MDDC  RGDKKR ENQ

    SGHR /M SGD EHQRS RGDKK VD BNMMDBS SN SGD BUR RDQUDQ VHSG RRG @MC ONQS ENQV@QC SGDBURBNMMDBSHNM/MSGDRDBNMCRGDKKVDTRDSGDBURMNQL@KKX@RHEHSVGDQDQTMMHMFKNB@KKX NMRGDKK # ssh -L2401:localhost:2401 colin@cvs_server # Connect directly to the CVS server. Or: # ssh -L2401:cvs_server:2401 colin@gateway # Use a gateway to reach the CVS NMRGDKK # setenv CVSROOT :pserver:colin@localhost:/usr/local/cvs # cvs login Logging in to :pserver:colin@localhost:2401/usr/local/cvs CVS password: # cvs checkout MyProject/src 12.4 CVS commands and usage Import 4GD HLONQS BNLL@MC HR TRDC SN @CC @ VGNKD CHQDBSNQX HS LTRS AD QTM EQNL VHSGHM SGD CHQDBSNQX SN AD HLONQSDC 3@X SGD CHQDBSNQX CDUDK BNMS@HMR @KK EHKDR @MC RTACHQDBSNQHDR SN AD HLONQSDC 4GD CHQDBSNQXM@LDNMSGD#63SGDLNCTKD VHKKADB@KKDCLX@OO # cvs import [options] directory-name vendor-tag release-tag # cd /devel # Must be inside the project to import it # cvs import myapp Company R1_0 # Release tag can be anything in one word !ESDQ@VGHKD@MDVCHQDBSNQXCDUDKSNNKRV@R@CCDC@MCHSG@RSNADHLONQSDCSNN # cd /devel/tools # cvs import myapp/tools Company R1_0 Checkout update add commit # cvs co myapp/tools # Will only checkout the directory tools # cvs co -r R1_1 myapp # Checkout myapp at release R1_1 (is sticky) # cvs -q -d update -P # A typical CVS update # cvs update -A # Reset any sticky tag (or date, option) # cvs add newfile # Add a new file # cvs add -kb newfile # Add a new binary file # cvs commit file1 file2 # Commit the two files only # cvs commit -m "message" # Commit all changes done with a message Create a patch )S HR ADRS SN BQD@SD @MC @OOKX @ O@SBG EQNL SGD VNQJHMF CDUDKNOLDMS CHQDBSNQX QDK@SDC SN SGD OQNIDBS NQEQNLVHSGHMSGDRNTQBDCHQDBSNQX # cd /devel/project # diff -Naur olddir newdir > patchfile # Create a patch from a directory or a file # diff -Naur oldfile newfile > patchfile Apply a patch 3NLDSHLDR HS HR MDBDRR@QX SN RSQHO @ CHQDBSNQX KDUDK EQNL SGD O@SBG CDODMCHMF GNV HS V@R BQD@SDC )MB@RDNECHEEHBTKSHDR RHLOKXKNNJ@SSGDEHQRSKHMDRNESGDO@SBG@MCSQX O  ONQ O # cd /devel/project # patch --dry-run -p0 < patchfile # Test the path without applying it # patch -p0 < patchfile # patch -p1 < patchfile # strip off the 1st level from the path 
  38. 13 S VN 3DQUDQRDSTO O [ 36. 33( O [

    36.NUDQGSSO O [ 36.TR@FD O 3TAUDQRHNM 36.  HR @ UDQRHNM BNMSQNK RXRSDL CDRHFMDC SN AD SGD RTBBDRRNQ NE #63 #NMBTQQDMS 6DQRHNMR 3XRSDL  4GD BNMBDOS HR RHLHK@Q SN #63 ATS L@MX RGNQSBNLHMFR VGDQD HLOQNUDC 3DD @KRN SGD 36.ANNJ 13.1 Server setup 4GDHMHSH@SHNMNESGDQDONRHSNQXHRE@HQKXRHLOKDGDQDENQDW@LOKD /home/svn/ LTRSDWHRS  # svnadmin create --fs-type fsfs /home/svn/project1 .NVSGD@BBDRRSNSGDQDONRHSNQXHRL@CDONRRHAKDVHSG a file:// $HQDBS EHKD RXRSDL @BBDRR VHSG SGD RUM BKHDMS VHSG 4GHR QDPTHQDR KNB@K ODQLHRRHNMR NMSGDEHKDRXRSDL a svn:// NQ svn+ssh:// 2DLNSD @BBDRR VHSG SGD RUMRDQUD RDQUDQ @KRN NUDQ 33(  4GHR QDPTHQDRKNB@KODQLHRRHNMRNMSGDEHKDRXRSDLCDE@TKSONQSSBO  a http:// 2DLNSD @BBDRR VHSG VDAC@U TRHMF @O@BGD .N KNB@K TRDQR @QD MDBDRR@QX ENQ SGHR LDSGNC 5RHMF SGD KNB@K EHKD RXRSDL HS HR MNV ONRRHAKD SN HLONQS @MC SGDM BGDBJ NTS @M DWHRSHMF OQNIDBS 5MKHJDVHSG#63HSHRMNSMDBDRR@QXSNBCHMSNSGDOQNIDBSCHQDBSNQX RHLOKXFHUDSGDETKKO@SG # svn import /project1/ file:///home/svn/project1/trunk -m 'Initial import' # svn checkout file:///home/svn/project1 4GDMDVCHQDBSNQXSQTMJHRNMKX@BNMUDMSHNM SGHRHRMNSQDPTHQDC Remote access with ssh .N RODBH@K RDSTO HR QDPTHQDC SN @BBDRR SGD QDONRHSNQX UH@ RRG RHLOKX QDOK@BD file:// VHSG svn+ssh/ hostname&NQDW@LOKD # svn checkout svn+ssh://hostname/home/svn/project1 !R VHSG SGD KNB@K EHKD @BBDRR DUDQX TRDQ MDDCR @M RRG @BBDRR SN SGD RDQUDQ VHSG @ KNB@K @BBNTMS @MC @KRN QD@CVQHSD @BBDRR 4GHR LDSGNC LHFGS AD RTHS@AKD ENQ @ RL@KK FQNTO !KK TRDQR BNTKC ADKNMF SN@RTAUDQRHNMFQNTOVGHBGNVMRSGDQDONRHSNQX ENQDW@LOKD # groupadd subversion # groupmod -A user1 subversion # chown -R root:subversion /home/svn # chmod -R 770 /home/svn Remote access with http (apache) 2DLNSD @BBDRR NUDQ GSSO GSSOR HR SGD NMKX FNNC RNKTSHNM ENQ @ K@QFDQ TRDQ FQNTO 4GHR LDSGNC TRDR SGD@O@BGD@TSGDMSHB@SHNM MNSSGDKNB@K@BBNTMSR4GHRHR@SXOHB@KATSRL@KK@O@BGDBNMEHFTQ@SHNM LoadModule dav_module modules/mod_dav.so LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so # Only for access control <Location /svn> DAV svn # any "/svn/foo" URL will map to a repository /home/svn/foo SVNParentPath /home/svn AuthType Basic AuthName "Subversion repository" AuthzSVNAccessFile /etc/apache2/svn.acl AuthUserFile /etc/apache2/svn-passwd Require valid-user </Location> 4GD@O@BGDRDQUDQMDDCRETKK@BBDRRSNSGDQDONRHSNQX GSSORTAUDQRHNMSHFQHRNQF GSSORUMANNJQDC AD@MBNLDM 
  39. # chown -R www:www /home/svn #QD@SD@TRDQVHSGGSO@RRVC # htpasswd -c /etc/svn-passwd

    user1 # -c creates the file Access control svn.acl example # Default it read access. "* =" would be default no access [/] * = r [groups] project1-developers = joe, jack, jane # Give write access to the developers [project1:] @project1-developers = rw 13.2 SVN commands and usage 3DD@KRNSGD 3TAUDQRHNM1THBJ2DEDQDMBD#@QC 4NQSNHRD36. HR@MHBD7HMCNVRHMSDQE@BD Import ! MDV OQNIDBS SG@S HR @ CHQDBSNQX VHSG RNLD EHKDR HR HLONQSDC HMSN SGD QDONRHSNQX VHSG SGD import BNLL@MC)LONQSHR@KRNTRDCSN@CC@CHQDBSNQXVHSGHSRBNMSDMSSN@MDWHRSHMFOQNIDBS # svn help import # Get help for any command # Add a new directory (with content) into the src dir on project1 # svn import /project1/newdir http://host.url/svn/project1/trunk/src -m 'add newdir' Typical SVN commands # svn co http://host.url/svn/project1/trunk # Checkout the most recent version # Tags and branches are created by copying # svn mkdir http://host.url/svn/project1/tags/ # Create the tags directory # svn copy -m "Tag rc1 rel." http://host.url/svn/project1/trunk \ http://host.url/svn/project1/tags/1.0rc1 # svn status [--verbose] # Check files status into working dir # svn add src/file.h src/file.cpp # Add two files # svn commit -m 'Added new class file' # Commit the changes with a message # svn ls http://host.url/svn/project1/tags/ # List all tags # svn move foo.c bar.c # Move (rename) files # svn delete some_old_file # Delete files 14 US E F U L CO MMA NDS KDRR O [ UH O [ L@HK O [ S@Q O [ CC O [ RBQDDM O [ EHMC O [ -HRBDKK@MDNTR O 14.1 less 4GD less BNLL@MCCHROK@XR@SDWSCNBTLDMSNMSGDBNMRNKD)SHROQDRDMSNMLNRSHMRS@KK@SHNM # less unixtoolbox.xhtml 3NLDHLONQS@MSBNLL@MCR@QD>.RS@MCRENQ;BNMSQNK= ;.=  h H FNNCGDKONMCHROK@X f ^F ^V SPACE &NQV@QCNMDVHMCNVNQ.KHMDR  b ^B ESC-v "@BJV@QCNMDVHMCNVNQ.KHMDR  F &NQV@QCENQDUDQKHJDS@HK E /pattern 3D@QBGENQV@QCENQ. SG L@SBGHMFKHMD ?pattern 3D@QBGA@BJV@QCENQ. SG L@SBGHMFKHMD n 2DOD@SOQDUHNTRRD@QBGENQ. SGNBBTQQDMBD  N 2DOD@SOQDUHNTRRD@QBGHMQDUDQRDCHQDBSHNM q PTHS GSSOVVVBROTSONYM@MOKBRNA@MHDB0@ODQRRUM QDEB@QCOCE GSSOSNQSNHRDRUMSHFQHRNQF 
  40. 14.2 vi 6H HR OQDRDMS NM !.9 ,HMTW5MHW HMRS@KK@SHNM MNS

    FDMSNN @MC HS HR SGDQDENQD TRDETK SN JMNV RNLD A@RHB BNLL@MCR 4GDQD @QD SVN LNCDR BNLL@MC LNCD @MC HMRDQSHNM LNCD 4GD BNLL@MCR LNCD HR@BBDRRDCVHSG [ESC] SGDHMRDQSHNMLNCDVHSG i5RD : help HEXNT@QDKNRS 4GDDCHSNQR nano @MC pico @QDTRT@KKX@U@HK@AKDSNN@MC@QDD@RHDQ)-(/ SNTRD Quit :w MDVEHKDM@LD R@UDSGDEHKDSNMDVEHKDM@LD :wq or :x R@UD@MCPTHS :q! PTHSVHSGNTSR@UHMF Search and move /string 3D@QBGENQV@QCENQRSQHMF ?string 3D@QBGA@BJENQRSQHMF n 3D@QBGENQMDWSHMRS@MBDNERSQHMF N 3D@QBGENQOQDUHNTRHMRS@MBDNERSQHMF { -NUD@O@Q@FQ@OGA@BJ } -NUD@O@Q@FQ@OGENQV@QC 1G -NUDSNSGDEHQRSKHMDNESGDEHKD nG -NUDSNSGDMSGKHMDNESGDEHKD G -NUDSNSGDK@RSKHMDNESGDEHKD :%s/OLD/NEW/g 3D@QBG@MCQDOK@BDDUDQXNBBTQQDMBD Delete copy paste text dd (dw) #TSBTQQDMSKHMDVNQC D #TSSNSGDDMCNESGDKHMD x $DKDSDBTS BG@Q@BSDQ yy (yw) #NOXKHMDVNQC @ESDQBTQRNQ P 0@RSD@ESDQBTQRNQ u 5MCNK@RSLNCHEHB@SHNM U 5MCN@KKBG@MFDRSNBTQQDMSKHMD 14.3 mail 4GD mail BNLL@MC HR @ A@RHB @OOKHB@SHNM SN QD@C @MC RDMC DL@HK HS HR TRT@KKX HMRS@KKDC 4N RDMC @M DL@HK RHLOKX SXOD L@HK TRDQ CNL@HM 4GD EHQRS KHMD HR SGD RTAIDBS SGDM SGD L@HK BNMSDMS 4DQLHM@SD@MCRDMCSGDDL@HKVHSG@RHMFKDCNS HM@MDVKHMD%W@LOKD # mail [email protected] Subject: Your text is full of typos "For a moment, nothing happened. Then, after a second or so, nothing continued to happen." . EOT # 4GHRHR@KRNVNQJHMFVHSG@OHOD # echo "This is the mail body" | mail [email protected] 4GHRHR@KRN@RHLOKDV@XSNSDRSSGDL@HKRDQUDQ 14.4 tar 4GD BNLL@MC tar S@OD @QBGHUD BQD@SDR @MC DWSQ@BSR @QBGHUDR NE EHKD @MC CHQDBSNQHDR 4GD @QBGHUD S@Q HR TMBNLOQDRRDC @ BNLOQDRRDC @QBGHUD G@R SGD DWSDMRHNM SFY NQ S@QFY YHO NQ SAY AYHO  $N MNS TRD @ARNKTSD O@SG VGDM BQD@SHMF @M @QBGHUD XNT OQNA@AKX V@MS SN TMO@BJ HS RNLDVGDQD DKRD3NLDSXOHB@KBNLL@MCR@QD 
  41. Create # cd / # tar -cf home.tar home/ #

    archive the whole /home directory (c for create) # tar -czf home.tgz home/ # same with zip compression # tar -cjf home.tbz home/ # same with bzip2 compression /MKX HMBKTCD NMD NQ SVN CHQDBSNQHDR EQNL @ SQDD ATS JDDO SGD QDK@SHUD RSQTBSTQD &NQ DW@LOKD @QBGHUDTRQKNB@KDSB@MCTRQKNB@KVVV@MCSGDEHQRSCHQDBSNQXHMSGD@QBGHUDRGNTKCADKNB@K # tar -C /usr -czf local.tgz local/etc local/www # tar -C /usr -xzf local.tgz # To untar the local dir into /usr # cd /usr; tar -xzf local.tgz # Is the same as above Extract # tar -tzf home.tgz # look inside the archive without extracting (list) # tar -xf home.tar # extract the archive here (x for extract) # tar -xzf home.tgz # same with zip compression (-xjf for bzip2 compression) # remove leading path gallery2 and extract into gallery # tar --strip-components 1 -zxvf gallery2.tgz -C gallery/ # tar -xjf home.tbz home/colin/file.txt # Restore a single file More advanced # tar c dir/ | gzip | ssh user@remote 'dd of=dir.tgz' # arch dir/ and store remotely. # tar cvf - `find . -print` > backup.tar # arch the current directory. # tar -cf - -C /etc . | tar xpf - -C /backup/etc # Copy directories # tar -cf - -C /etc . | ssh user@remote tar xpf - -C /backup/etc # Remote copy. # tar -czf home.tgz --exclude '*.o' --exclude 'tmp/' home/ 14.5 dd 4GD OQNFQ@L dd CHRJ CTLO NQ CDRSQNX CHRJ NQ RDD SGD LD@MHMF NE CC HR TRDC SN BNOX O@QSHSHNMR @MCCHRJR@MCENQNSGDQBNOXSQHBJR4XOHB@KTR@FD # dd if=<source> of=<target> bs=<byte size> conv=<conversion> )LONQS@MSBNMUNOSHNMR notrunc CNMNSSQTMB@SDSGDNTSOTSEHKD @KKYDQNRVHKKADVQHSSDM@RYDQNR noerror BNMSHMTD@ESDQQD@CDQQNQRDFA@CAKNBJR sync O@CDUDQXHMOTSAKNBJVHSG.TKKRSNHAR RHYD 4GD CDE@TKS AXSD RHYD HR  NMD AKNBJ  4GD -"2 VGDQD SGD O@QSHSHNM S@AKD HR KNB@SDC HR NM SGD EHQRS AKNBJ SGD EHQRS  AKNBJR NE @ CHRJ @QD DLOSX ,@QFDQ AXSD RHYDR @QD E@RSDQ SN BNOX ATS QDPTHQD @KRNLNQDLDLNQX Backup and restore # dd if=/dev/hda of=/dev/hdc bs=16065b # Copy disk to disk (same size) # dd if=/dev/sda7 of=/home/root.img bs=4096 conv=notrunc,noerror # Backup / # dd if=/home/root.img of=/dev/sda7 bs=4096 conv=notrunc,noerror # Restore / # dd bs=1M if=/dev/ad4s3e | gzip -c > ad4s3e.gz # Zip the backup # gunzip -dc ad4s3e.gz | dd of=/dev/ad0s3e bs=1M # Restore the zip # dd bs=1M if=/dev/ad4s3e | gzip | ssh eedcoba@fry 'dd of=ad4s3e.gz' # also remote # gunzip -dc ad4s3e.gz | ssh eedcoba@host 'dd of=/dev/ad0s3e bs=1M' # dd if=/dev/ad0 of=/dev/ad2 skip=1 seek=1 bs=4k conv=noerror # Skip MBR # This is necessary if the destination (ad2) is smaller. Recover 4GD BNLL@MC dd VHKK QD@C every single block NE SGD O@QSHSHNM )M B@RD NE OQNAKDLR HS HR ADSSDQ SN TRD SGD NOSHNM conv=sync,noerror RN CC VHKK RJHO SGD A@C AKNBJ @MC VQHSD YDQNR @S SGD CDRSHM@SHNM !BBNQCHMFKX HS HR HLONQS@MS SN RDS SGD AKNBJ RHYD DPT@K NQ RL@KKDQ SG@M SGD CHRJ AKNBJ RHYD ! J RHYD RDDLR R@ED RDS HS VHSG bs=1k )E @ CHRJ G@R A@C RDBSNQR @MC SGD C@S@ RGNTKC AD QDBNUDQDC EQNL @ O@QSHSHNM BQD@SD @M HL@FD EHKD VHSG CC LNTMS SGD HL@FD @MC BNOX SGD BNMSDMS SN @ MDV CHRJ 7HSG SGD NOSHNM noerror CC VHKK RJHO SGD A@C RDBSNQR @MC VQHSD YDQNR HMRSD@C SGTR NMKX SGD C@S@ BNMS@HMDCHMSGDA@CRDBSNQRVHKKADKNRS 
  42. # dd if=/dev/hda of=/dev/null bs=1m # Check for bad blocks

    # dd bs=1k if=/dev/hda1 conv=sync,noerror,notrunc | gzip | ssh \ # Send to remote root@fry 'dd of=hda1.gz bs=1k' # dd bs=1k if=/dev/hda1 conv=sync,noerror,notrunc of=hda1.img # Store into an image # mount -o loop /hda1.img /mnt # Mount the image (page 13) # rsync -ax /mnt/ /newdisk/ # Copy on a new disk # dd if=/dev/hda of=/dev/hda # Refresh the magnetic state # The above is useful to refresh a disk. It is perfectly safe, but must be unmounted. Delete # dd if=/dev/zero of=/dev/hdc # Delete full disk # dd if=/dev/urandom of=/dev/hdc # Delete full disk better # kill -USR1 PID # View dd progress (Linux) # kill -INFO PID # View dd progress (FreeBSD) MBR tricks 4GD -"2 BNMS@HMR SGD ANNS KN@CDQ @MC SGD O@QSHSHNM S@AKD @MC HR  AXSDR RL@KK 4GD EHQRS  @QD ENQSGDANNSKN@CDQ SGDAXSDRSN@QDENQSGDO@QSHSHNMS@AKD # dd if=/dev/sda of=/mbr_sda.bak bs=512 count=1 # Backup the full MBR # dd if=/dev/zero of=/dev/sda bs=512 count=1 # Delete MBR and partition table # dd if=/mbr_sda.bak of=/dev/sda bs=512 count=1 # Restore the full MBR # dd if=/mbr_sda.bak of=/dev/sda bs=446 count=1 # Restore only the boot loader # dd if=/mbr_sda.bak of=/dev/sda bs=1 count=64 skip=446 seek=446 # Restore partition table 14.6 screen 3BQDDM@LTRSG@UD G@RSVNL@HMETMBSHNM@KHSHDR a 2TMLTKSHOKDSDQLHM@KRDRRHNMVHSGHM@RHMFKDSDQLHM@K a ! RS@QSDC OQNFQ@L HR CDBNTOKDC EQNL SGD QD@K SDQLHM@K @MC B@M SGTR QTM HM SGD A@BJFQNTMC 4GDQD@KSDQLHM@KB@MADBKNRDC@MCQD@SS@BGDCK@SDQ Short start example RS@QSRBQDDMVHSG # screen 7HSGHMSGDRBQDDMRDRRHNMVDB@MRS@QS@KNMFK@RSHMFOQNFQ@LKHJDSNO  # top .NVCDS@BGVHSG Ctrl-a Ctrl-d2D@SS@BGSGDSDQLHM@KVHSG # screen -R -D )M CDS@HK SGHR LD@MR )E @ RDRRHNM HR QTMMHMF SGDM QD@SS@BG )E MDBDRR@QX CDS@BG @MC KNFNTS QDLNSDKX EHQRS)EHSV@RMNSQTMMHMFBQD@SDHS@MCMNSHEXSGDTRDQ/Q # screen -x !SS@BG SN @ QTMMHMF RBQDDM HM @ LTKSH CHROK@X LNCD 4GD BNMRNKD HR SGTR RG@QDC @LNMF LTKSHOKD TRDQR6DQXTRDETKENQSD@LVNQJCDATF Screen commands (within screen) !KKRBQDDMBNLL@MCRRS@QSVHSG Ctrl-a a Ctrl-a ? GDKO@MCRTLL@QXNEETMBSHNMR a Ctrl-a c BQD@SD@MMDVVHMCNVSDQLHM@K a Ctrl-a Ctrl-n and Ctrl-a Ctrl-p SN RVHSBG SN SGD MDWS NQ OQDUHNTR VHMCNV HM SGD KHRS AX MTLADQ a Ctrl-a Ctrl-N VGDQD.HR@MTLADQEQNLSN SNRVHSBGSNSGDBNQQDRONMCHMFVHMCNV a Ctrl-a " SNFDS@M@UHF@AKDKHRSNEQTMMHMFVHMCNVR a Ctrl-a a SNBKD@Q@LHRRDC#SQK @ a Ctrl-a Ctrl-d SNCHRBNMMDBS@MCKD@UDSGDRDRRHNMQTMMHMFHMSGDA@BJFQNTMC a Ctrl-a x KNBJSGDRBQDDMSDQLHM@KVHSG@O@RRVNQC 
  43. a Ctrl-a [ DMSDQHMSN scrollback LNCD DWHSVHSG esc 5RD echo

    "defscrollback 5000" > ~/.screenrc SNHMBQD@RDATEEDQCDE@TKSHR d C-u 3BQNKKR@G@KEO@FDTO d C-b 3BQNKK@ETKKO@FDTO d C-d 3BQNKK@G@KEO@FDCNVM d C-f 3BQNKK@ETKKO@FDCNVM d / 3D@QBGENQV@QC d ? 3D@QBGA@BJV@QC 4GD RBQDDM RDRRHNM HR SDQLHM@SDC VGDM SGD OQNFQ@L VHSGHM SGD QTMMHMF SDQLHM@K HR BKNRDC @MC XNT KNFNTSEQNLSGDSDQLHM@K 14.7 Find 3NLDHLONQS@MSNOSHNMR -x NM"3$ -xdev NM,HMTW 3S@XNMSGDR@LDEHKDRXRSDLCDUHMERS@A  -exec cmd {} \; %WDBTSDSGDBNLL@MC@MCQDOK@BDZ\VHSGSGDETKKO@SG -iname ,HJD M@LDATSHRB@RDHMRDMRHSHUD -ls $HROK@XHMENQL@SHNM@ANTSSGDEHKDKHJDKR K@ -size n MHR MJ-'40 -cmin n &HKDRRS@STRV@RK@RSBG@MFDCMLHMTSDR@FN # find . -type f ! -perm -444 # Find files not readable by all # find . -type d ! -perm -111 # Find dirs not accessible by all # find /home/user/ -cmin 10 -print # Files created or modified in the last 10 min. # find . -name '*.[ch]' | xargs grep -E 'expr' # Search 'expr' in this dir and below. # find / -name "*.core" | xargs rm # Find core dumps and delete them (also try core.*) # find / -name "*.core" -print -exec rm {} \; # Other syntax # Find images and create an archive, iname is not case sensitive. -r for append # find . \( -iname "*.png" -o -iname "*.jpg" \) -print -exec tar -rf images.tar {} \; # find . -type f -name "*.txt" ! -name README.txt -print # Exclude README.txt files # find /var/ -size +10M -exec ls -lh {} \; # Find large files > 10 MB # find /var/ -size +10M -ls # This is simpler # find . -size +10M -size -50M -print # find /usr/ports/ -name work -type d -print -exec rm -rf {} \; # Clean the ports # Find files with SUID; those file are vulnerable and must be kept secure # find / -type f -user root -perm -4000 -exec ls -l {} \; "D B@QDETK VHSG W@QF NQ DWDB @R HS LHFGS NQ LHFGS MNS GNMNQ PTNSHMFR @MC B@M QDSTQM VQNMF QDRTKSR VGDM EHKDR NQ CHQDBSNQHDR BNMS@HM RO@BDR )M CNTAS TRD  OQHMS [ W@QFR  HMRSD@C NE [ W@QFR 4GD NOSHNM OQHMSLTRSADSGDK@RSHMSGDEHMCBNLL@MC3DDSGHRMHBD LHMHSTSNQH@KENQEHMC # find . -type f | xargs ls -l # Will not work with spaces in names # find . -type f -print0 | xargs -0 ls -l # Will work with spaces in names # find . -type f -exec ls -l '{}' \; # Or use quotes '{}' with -exec 14.8 Miscellaneous # which command # Show full path name of command # time command # See how long a command takes to execute # time cat # Use time as stopwatch. Ctrl-c to stop # set | grep $USER # List the current environment # cal -3 # Display a three month calendar # date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] # date 10022155 # Set date and time # whatis grep # Display a short info on the command or word # whereis java # Search path and standard directories for word # setenv varname value # Set env. variable varname to value (csh/tcsh) # export varname="value" # set env. variable varname to value (sh/ksh/bash) # pwd # Print working directory # mkdir -p /path/to/dir # no error if existing, make parent dirs as needed # mkdir -p project/{bin,src,obj,doc/{html,man,pdf},debug/some/more/dirs} # rmdir /path/to/dir # Remove directory # rm -rf /path/to/dir # Remove directory and its content (force) GSSOVVVGBBEKDCTONKKNBJ5MHW&HMC#LCGSL 
  44. # rm -- -badchar.txt # Remove file whitch starts with

    a dash (-) # cp -la /dir1 /dir2 # Archive and hard link files instead of copy # cp -lpR /dir1 /dir2 # Same for FreeBSD # cp unixtoolbox.xhtml{,.bak} # Short way to copy the file with a new extension # mv /dir1 /dir2 # Rename a directory # ls -1 # list one file per line # history | tail -50 # Display the last 50 used commands # cd - # cd to previous ($OLDPWD) directory #GDBJ EHKD G@RGDR VHSG NODMRRK 4GHR HR @ MHBD @KSDQM@SHUD SN SGD BNLL@MCR md5sum NQ sha1sum &QDD"3$TRDR md5 @MC sha1 VGHBG@QDMNS@KV@XRHMRS@KKDC # openssl md5 file.tar.gz # Generate an md5 checksum from file # openssl sha1 file.tar.gz # Generate an sha1 checksum from file # openssl rmd160 file.tar.gz # Generate a RIPEMD-160 checksum from file 15 INS TAL L S O F TWA R E 5RT@KKXSGDO@BJ@FDL@M@FDQTRDRSGDOQNWXU@QH@AKDENQGSSOESOQDPTDRSR)MA@RGQB export http_proxy=http://proxy_server:3128 export ftp_proxy=http://proxy_server:3128 15.1 List installed packages # rpm -qa # List installed packages (RH, SuSE, RPM based) # dpkg -l # Debian, Ubuntu # pkg_info # FreeBSD list all installed packages # pkg_info -W smbd # FreeBSD show which package smbd belongs to # pkginfo # Solaris 15.2 Add/remove software &QNMSDMCRX@RSX@RSENQ3T3% QDCG@S BNMEHF O@BJ@FDRENQ2DC(@S # rpm -i pkgname.rpm # install the package (RH, SuSE, RPM based) # rpm -e pkgname # Remove package SuSE zypper (see doc and cheet sheet) # zypper refresh # Refresh repositorie # zypper install vim # Install the package vim # zypper remove vim # Remove the package vim # zypper search vim # Search packages with vim # zypper update vim # Search packages with vim Debian # apt-get update # First update the package lists # apt-get install emacs # Install the package emacs # dpkg --remove emacs # Remove the package emacs # dpkg -S file # find what package a file belongs to Gentoo 'DMSNNTRDRDLDQFD@RSGDGD@QSNEHSR0NQS@FDO@BJ@FDL@M@FDLDMSRXRSDL # emerge --sync # First sync the local portage tree # emerge -u packagename # Install or upgrade a package # emerge -C packagename # Remove the package # revdep-rebuild # Repair dependencies Solaris 4GDBCQNLO@SGHRTRT@KKX /cdrom/cdrom0 GSSODMNODMRTRDNQF:XOODQ5R@FD 
  45. # pkgadd -d <cdrom>/Solaris_9/Product SUNWgtar # pkgadd -d SUNWgtar #

    Add downloaded package (bunzip2 first) # pkgrm SUNWgtar # Remove the package FreeBSD # pkg_add -r rsync # Fetch and install rsync. # pkg_delete /var/db/pkg/rsync-xx # Delete the rsync package 3DSVGDQDSGDO@BJ@FDR@QDEDSBGDCEQNLVHSGSGD PACKAGESITE U@QH@AKD&NQDW@LOKD # export PACKAGESITE=ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages/Latest/ # or ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/ FreeBSD ports 4GD ONQS SQDD /usr/ports/ HR @ BNKKDBSHNM NE RNESV@QD QD@CX SN BNLOHKD @MC HMRS@KK RDD L@M ONQSR  4GDONQSR@QDTOC@SDCVHSGSGDOQNFQ@L portsnap # portsnap fetch extract # Create the tree when running the first time # portsnap fetch update # Update the port tree # cd /usr/ports/net/rsync/ # Select the package to install # make install distclean # Install and cleanup (also see man ports) # make package # Make a binary package of this port # pkgdb -F # Fix the package registry database # portsclean -C -DD # Clean workdir and distdir (part of portupgrade) OS X MacPorts (use sudo for all commands) # port selfupdate # Update the port tree (safe) # port installed # List installed ports # port deps apache2 # List dependencies for this port # port search pgrep # Search for string # port install proctools # Install this package # port variants ghostscript # List variants of this port # port -v install ghostscript +no_x11# -no_x11 for negative value # port clean --all ghostscript # Clean workdir of port # port upgrade ghostscript # Upgrade this port # port uninstall ghostscript # Uninstall this port # port -f uninstall installed # Uninstall everything 15.3 Library path $TD SN BNLOKDW CDODMCDMBHDR @MC QTMSHLD KHMJHMF OQNFQ@LR @QD CHEEHBTKS SN BNOX SN @M NSGDQ RXRSDL NQ CHRSQHATSHNM (NVDUDQ ENQ RL@KK OQNFQ@LR VHSG KHSSKD CDODMCDMBHDR SGD LHRRHMF KHAQ@QHDR B@M AD BNOHDC NUDQ 4GD QTMSHLD KHAQ@QHDR @MC SGD LHRRHMF NMD @QD BGDBJDC VHSG ldd @MC L@M@FDC VHSG ldconfig # ldd /usr/bin/rsync # List all needed runtime libraries # otool -L /usr/bin/rsync # OS X equivalent to ldd # ldconfig -n /path/to/libs/ # Add a path to the shared libraries directories # ldconfig -m /path/to/libs/ # FreeBSD # LD_LIBRARY_PATH # The variable set the link library path 16 CONVER T MED IA 3NLDSHLDRNMDRHLOKXMDDCSNBNMUDQS@UHCDN @TCHNEHKDNQCNBTLDMSSN@MNSGDQENQL@S 16.1 Text encoding 4DWS DMBNCHMF B@M FDS SNS@KKX VQNMF RODBH@KKX VGDM SGD K@MFT@FD QDPTHQDR RODBH@K BG@Q@BSDQR KHJD ^_`4GDBNLL@MC iconv B@MBNMUDQSEQNLNMDDMBNCHMFSN@MNSGDQ GSSOVVVEQDDARCNQFG@MCANNJONQSRGSLK GSSOFTHCDL@BONQSRNQF 
  46. # iconv -f <from_encoding> -t <to_encoding> <input_file> # iconv -f

    ISO8859-1 -t UTF-8 -o file.input > file_utf8 # iconv -l # List known coded character sets 7HSGNTS SGD E NOSHNM HBNMU VHKK TRD SGD KNB@K BG@Q RDS VGHBG HR TRT@KKX EHMD HE SGD CNBTLDMS CHROK@XR VDKK 16.2 Unix - DOS newlines #NMUDQS $/3 #2,& SN 5MHW ,& MDVKHMDR @MC A@BJ within a Unix shell 3DD @KRN dos2unix @MC unix2dos HEXNTG@UDSGDL # sed 's/.$//' dosfile.txt > unixfile.txt # DOS to UNIX # awk '{sub(/\r$/,"");print}' dosfile.txt > unixfile.txt # DOS to UNIX # awk '{sub(/$/,"\r");print}' unixfile.txt > dosfile.txt # UNIX to DOS #NMUDQS 5MHW SN $/3 MDVKHMDR within a Windows environment 5RD RDC NQ @VJ EQNL LHMFV NQ BXFVHM # sed -n p unixfile.txt > dosfile.txt # awk 1 unixfile.txt > dosfile.txt # UNIX to DOS (with a cygwin shell) 16.3 PDF to Jpeg and concatenate PDF files #NMUDQS @ 0$& CNBTLDMS VHSG gs 'GNRS3BQHOS SN IODF NQ OMF HL@FDR ENQ D@BG O@FD !KRN LTBG RGNQSDQVHSG convert @MC mogrify EQNL)L@FD-@FHBJNQ'Q@OGHBR-@FHBJ  # gs -dBATCH -dNOPAUSE -sDEVICE=jpeg -r150 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 \ -dMaxStripSize=8192 -sOutputFile=unixtoolbox_%d.jpg unixtoolbox.pdf # convert unixtoolbox.pdf unixtoolbox-%03d.png # convert *.jpeg images.pdf # Create a simple PDF with all pictures # convert image000* -resample 120x120 -compress JPEG -quality 80 images.pdf # mogrify -format png *.ppm # convert all ppm images to png format 'GNRSRBQHOS B@M @KRN BNMB@SDM@SD LTKSHOKD OCE EHKDR HMSN @ RHMFKD NMD 4GHR NMKX VNQJR VDKK HE SGD 0$& EHKDR@QDVDKKADG@UDC # gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=all.pdf \ file1.pdf file2.pdf ... # On Windows use '#' instead of '=' 16.4 Convert video #NLOQDRRSGD#@MNMCHFHB@LUHCDNVHSG@MLODFBNCDB@MCQDO@HQSGDBQ@OOXRNTMC # mencoder -o videoout.avi -oac mp3lame -ovc lavc -srate 11025 \ -channels 1 -af-adv force=1 -lameopts preset=medium -lavcopts \ vcodec=msmpeg4v2:vbitrate=600 -mc 0 vidoein.AVI 3DD RNW ENQRNTMCOQNBDRRHMF 16.5 Copy an audio cd 4GD OQNFQ@L cdparanoia B@M R@UD SGD @TCHN SQ@BJR &QDD"3$ ONQS HM @TCHNBCO@Q@MNH@ oggenc B@MDMBNCDHM/FF6NQAHRENQL@S lame BNMUDQSRSNLO # cdparanoia -B # Copy the tracks to wav files in current dir # lame -b 256 in.wav out.mp3 # Encode in mp3 256 kb/s # for i in *.wav; do lame -b 256 $i `basename $i .wav`.mp3; done # oggenc in.wav -b 256 out.ogg # Encode in Ogg Vorbis 256 kb/s GSSOWHOGNQFO@Q@MNH@ 
  47. 17 PRINTING 17.1 Print with lpr # lpr unixtoolbox.ps #

    Print on default printer # export PRINTER=hp4600 # Change the default printer # lpr -Php4500 #2 unixtoolbox.ps # Use printer hp4500 and print 2 copies # lpr -o Duplex=DuplexNoTumble ... # Print duplex along the long side # lpr -o PageSize=A4,Duplex=DuplexNoTumble ... # lpq # Check the queue on default printer # lpq -l -Php4500 # Queue on printer hp4500 with verbose # lprm - # Remove all users jobs on default printer # lprm -Php4500 3186 # Remove job 3186. Find job nbr with lpq # lpc status # List all available printers # lpc status hp4500 # Check if printer is online and queue length 3NLD CDUHBDR @QD MNS ONRSRBQHOS @MC VHKK OQHMS F@QA@FD VGDM EDC VHSG @ OCE EHKD 4GHR LHFGS AD RNKUDC VHSG # gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr file.pdf 0QHMS SN @ 0$& EHKD DUDM HE SGD @OOKHB@SHNM CNDR MNS RTOONQS HS 5RD gs NM SGD OQHMS BNLL@MC HMRSD@C NE lpr # gs -q -sPAPERSIZE=a4 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=/path/file.pdf 18 D ATABA S ES 18.1 PostgreSQL Change root or a username password # psql -d template1 -U pgsql > alter user pgsql with password 'pgsql_password'; # Use username instead of "pgsql" Create user and database 4GD BNLL@MCR createuser dropuser createdb @MC dropdb @QD BNMUDMHDMS RGNQSBTSR DPTHU@KDMS SN SGD 31, BNLL@MCR 4GD MDV TRDQ HR ANA VHSG C@S@A@RD ANACA  TRD @R QNNS VHSG OFRPK SGD C@S@A@RDRTODQTRDQ # createuser -U pgsql -P bob # -P will ask for password # createdb -U pgsql -O bob bobdb # new bobdb is owned by bob # dropdb bobdb # Delete database bobdb # dropuser bob # Delete user bob 4GDFDMDQ@KC@S@A@RD@TSGDMSHB@SHNMLDBG@MHRLHRBNMEHFTQDCHMOF?GA@BNME Grant remote access 4GD EHKD $PGSQL_DATA_D/postgresql.conf RODBHEHDR SGD @CCQDRR SN AHMC SN 4XOHB@KKX listen_addresses = '*' ENQ0NRSFQDRW 4GDEHKD $PGSQL_DATA_D/pg_hba.conf CDEHMDRSGD@BBDRRBNMSQNK%W@LOKDR # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD host bobdb bob 212.117.81.42 255.255.255.255 password host all all 0.0.0.0/0 password Backup and restore 4GD A@BJTOR @MC QDRSNQD @QD CNMD VHSG SGD TRDQ OFRPK NQ ONRSFQDR "@BJTO @MC QDRSNQD @ RHMFKD C@S@A@RD # pg_dump --clean dbname > dbname_sql.dump # psql dbname < dbname_sql.dump "@BJTO@MCQDRSNQD@KKC@S@A@RDRHMBKTCHMFTRDQR  
  48. # pg_dumpall --clean > full.dump # psql -f full.dump postgres

    )M SGHR B@RD SGD QDRSNQD HR RS@QSDC VHSG SGD C@S@A@RD ONRSFQDR VGHBG HR ADSSDQ VGDM QDKN@CHMF @M DLOSXBKTRSDQ 18.2 MySQL Change mysql root or username password Method 1 # /etc/init.d/mysql stop or # killall mysqld # mysqld --skip-grant-tables # mysqladmin -u root password 'newpasswd' # /etc/init.d/mysql start Method 2 # mysql -u root mysql mysql> UPDATE USER SET PASSWORD=PASSWORD("newpassword") where user='root'; mysql> FLUSH PRIVILEGES; # Use username instead of "root" mysql> quit Create user and database (see MySQL doc) # mysql -u root mysql mysql> CREATE USER 'bob'@'localhost' IDENTIFIED BY 'pwd'; # create only a user mysql> CREATE DATABASE bobdb; mysql> GRANT ALL ON *.* TO 'bob'@'%' IDENTIFIED BY 'pwd'; # Use localhost instead of % # to restrict the network access mysql> DROP DATABASE bobdb; # Delete database mysql> DROP USER bob; # Delete user mysql> DELETE FROM mysql.user WHERE user='bob and host='hostname'; # Alt. command mysql> FLUSH PRIVILEGES; Grant remote access 2DLNSD @BBDRR HR SXOHB@KKX ODQLHSSDC ENQ @ C@S@A@RD @MC MNS @KK C@S@A@RDR 4GD EHKD /etc/my.cnf BNMS@HMR SGD )0 @CCQDRR SN AHMC SN /M &QDD"3$ my.cnf MNS BQD@SDC ODQ EDC@TKS BNOX NMD .cnf EHKD EQNL /usr/local/share/mysql SN /usr/local/etc/my.cnf 4XOHB@KKX BNLLDMS SGD KHMD bind- address = NTS # mysql -u root mysql mysql> GRANT ALL ON bobdb.* TO bob@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'PASSWORD'; mysql> REVOKE GRANT OPTION ON foo.* FROM bar@'xxx.xxx.xxx.xxx'; mysql> FLUSH PRIVILEGES; # Use 'hostname' or also '%' for full access Backup and restore "@BJTO@MCQDRSNQD@RHMFKDC@S@A@RD # mysqldump -u root -psecret --add-drop-database dbname > dbname_sql.dump # mysql -u root -psecret -D dbname < dbname_sql.dump "@BJTO@MCQDRSNQD@KKC@S@A@RDR # mysqldump -u root -psecret --add-drop-database --all-databases > full.dump # mysql -u root -psecret < full.dump (DQD HR RDBQDS SGD LXRPK QNNS O@RRVNQC SGDQD HR MN RO@BD @ESDQ O 7GDM SGD O NOSHNM HR TRDC @KNMDVNO@RRVNQC SGDO@RRVNQCHR@RJDC@SSGDBNLL@MCOQNLOS 18.3 SQLite 31,HSD HR@RL@KKONVDQETKRDKE BNMS@HMDC RDQUDQKDRR YDQN BNMEHFTQ@SHNM31,C@S@A@RD GSSOCDULXRPKBNLCNBQDEL@MDM@CCHMF TRDQRGSLK 
  49. Dump and restore )S B@M AD TRDETK SN CTLO @MC

    QDRSNQD @M 31,HSD C@S@A@RD &NQ DW@LOKD XNT B@M DCHS SGD CTLO EHKD SN BG@MFD @ BNKTLM @SSQHATSD NQ SXOD @MC SGDM QDRSNQD SGD C@S@A@RD 4GHR HR D@RHDQ SG@M LDRRHMF VHSG31,BNLL@MCR5RDSGDBNLL@MC sqlite3 ENQ@WC@S@A@RD # sqlite database.db .dump > dump.sql # dump # sqlite database.db < dump.sql # restore Convert 2.x to 3.x database sqlite database_v2.db .dump | sqlite3 database_v3.db 19 D IS K Q U O TA ! CHRJ PTNS@ @KKNVR SN KHLHS SGD @LNTMS NE CHRJ RO@BD @MCNQ SGD MTLADQ NE EHKDR @ TRDQ NQ NQ LDLADQ NE FQNTO B@M TRD 4GD PTNS@R @QD @KKNB@SDC NM @ ODQ EHKD RXRSDL A@RHR @MC @QD DMENQBDC AX SGDJDQMDK 19.1 Linux setup 4GDPTNS@SNNKRO@BJ@FDTRT@KKXMDDCRSNADHMRS@KKDC HSBNMS@HMRSGDBNLL@MCKHMDSNNKR !BSHU@SD SGD TRDQ PTNS@ HM SGD ERS@A @MC QDLNTMS SGD O@QSHSHNM )E SGD O@QSHSHNM HR ATRX DHSGDQ @KK KNBJDC EHKDR LTRS AD BKNRDC NQ SGD RXRSDL LTRS AD QDANNSDC !CC usrquota SN SGD ERS@A LNTMS NOSHNMR ENQDW@LOKD /dev/sda2 /home reiserfs rw,acl,user_xattr,usrquota 1 1 # mount -o remount /home # mount # Check if usrquota is active, otherwise reboot )MHSH@KHYDSGDPTNS@TRDQEHKDVHSG quotacheck # quotacheck -vum /home # chmod 644 /home/aquota.user # To let the users check their own quota !BSHU@SD SGD PTNS@ DHSGDQ VHSG SGD OQNUHCDC RBQHOS DF DSBHMHSCPTNS@C NM 3T3% NQ VHSG quotaon quotaon -vu /home #GDBJSG@SSGDPTNS@HR@BSHUDVHSG quota -v 19.2 FreeBSD setup 4GD PTNS@ SNNKR @QD O@QS NE SGD A@RD RXRSDL GNVDUDQ SGD JDQMDK MDDCR SGD NOSHNM PTNS@ )E HS HR MNS SGDQD @CCHS@MC QDBNLOHKD SGDJDQMDK options QUOTA !RVHSG,HMTW @CCSGDPTNS@SNSGDERS@ANOSHNMRTRDQPTNS@ MNSTRQPTNS@  /dev/ad0s1d /home ufs rw,noatime,userquota 2 2 # mount /home # To remount the partition %M@AKDCHRJPTNS@RHMDSBQBBNME@MCRS@QSSGDPTNS@ # grep quotas /etc/rc.conf enable_quotas="YES" # turn on quotas on startup (or NO). check_quotas="YES" # Check quotas on startup (or NO). # /etc/rc.d/quota start 19.3 Assign quota limits 4GD PTNS@R @QD MNS KHLHSDC ODQ CDE@TKS RDS SN   4GD KHLHSR @QD RDS VHSG edquota ENQ RHMFKD TRDQR ! PTNS@ B@M AD @KRN CTOKHB@SDC SN L@MX TRDQR 4GD EHKD RSQTBSTQD HR CHEEDQDMS ADSVDDM SGD PTNS@ HLOKDLDMS@SHNMR ATS SGD OQHMBHOKD HR SGD R@LD SGD U@KTDR NE AKNBJR @MC HMNCDR B@M AD KHLHSDC Only GSSOVVVRPKHSDNQF 
  50. change the values of soft and hard )E MNS RODBHEHDC

    SGD AKNBJR @QD J 4GD FQ@BD ODQHNC HR RDS VHSG edquota -t&NQDW@LOKD # edquota -u colin Linux Disk quotas for user colin (uid 1007): Filesystem blocks soft hard inodes soft hard /dev/sda8 108 1000 2000 1 0 0 FreeBSD Quotas for user colin: /home: kbytes in use: 504184, limits (soft = 700000, hard = 800000) inodes in use: 1792, limits (soft = 0, hard = 0) For many users 4GD BNLL@MC edquota -p HR TRDC SN CTOKHB@SD @ PTNS@ SN NSGDQ TRDQR &NQ DW@LOKD SN CTOKHB@SD @ QDEDQDMBDPTNS@SN@KKTRDQR # edquota -p refuser `awk -F: '$3 > 499 {print $1}' /etc/passwd` # edquota -p refuser user1 user2 # Duplicate to 2 users Checks 5RDQR B@M BGDBJ SGDHQ PTNS@ AX RHLOKX SXOHMF quota SGD EHKD PTNS@TRDQ LTRS AD QD@C@AKD  2NNS B@MBGDBJ@KKPTNS@R # quota -u colin # Check quota for a user # repquota /home # Full report for the partition for all users 20 S HE L L S -NRS ,HMTW CHRSQHATSHNMR TRD SGD A@RG RGDKK VGHKD SGD "3$R TRD SBRG SGD ANTQMD RGDKK HR NMKX TRDC ENQRBQHOSR&HKSDQR@QDUDQXTRDETK@MCB@MADOHODC grep 0@SSDQML@SBGHMF sed 3D@QBG@MC2DOK@BDRSQHMFRNQBG@Q@BSDQR cut 0QHMSRODBHEHBBNKTLMREQNL@L@QJDQ sort 3NQS@KOG@ADSHB@KKXNQMTLDQHB@KKX uniq 2DLNUDCTOKHB@SDKHMDREQNL@EHKD &NQDW@LOKDTRDC@KK@SNMBD # ifconfig | sed 's/ / /g' | cut -d" " -f1 | uniq | grep -E "[a-z0-9]+" | sort -r # ifconfig | sed '/.*inet addr:/!d;s///;s/ .*//'|sort -t. -k1,1n -k2,2n -k3,3n -k4,4n 4GDEHQRSBG@Q@BSDQHMSGDRDCO@SSDQMHR@S@A4NVQHSD@S@ANMSGDBNMRNKD TRDBSQK UBSQK S@A 20.1 bash 2DCHQDBSR@MCOHODRENQA@RG@MCRG # cmd 1> file # Redirect stdout to file. # cmd 2> file # Redirect stderr to file. # cmd 1>> file # Redirect and append stdout to file. # cmd &> file # Redirect both stdout and stderr to file. # cmd >file 2>&1 # Redirects stderr to stdout and then to file. # cmd1 | cmd2 # pipe stdout to cmd2 # cmd1 2>&1 | cmd2 # pipe stdout and stderr to cmd2 -NCHEX XNTQ BNMEHFTQ@SHNM HM ]A@RGQB HS B@M @KRN AD ]A@RG?OQNEHKD  4GD ENKKNVHMF DMSQHDR @QD TRDETK QDKN@C VHSG  A@RGQB 7HSG BXFVHM TRD ]A@RG?OQNEHKD VHSG QWUS O@RS VHSG RGHES KDES BKHBJ 
  51. # in .bashrc bind '"\e[A"':history-search-backward # Use up and down

    arrow to search bind '"\e[B"':history-search-forward # the history. Invaluable! set -o emacs # Set emacs mode in bash (see below) set bell-style visible # Do not beep, inverse colors # Set a nice prompt like [user@host]/path/todir> PS1="\[\033[1;30m\][\[\033[1;34m\]\u\[\033[1;30m\]" PS1="$PS1@\[\033[0;33m\]\h\[\033[1;30m\]]\[\033[0;37m\]" PS1="$PS1\w\[\033[1;30m\]>\[\033[0m\]" # To check the currently active aliases, simply type alias alias ls='ls -aF' # Append indicator (one of */=>@|) alias ll='ls -aFls' # Listing alias la='ls -all' alias ..='cd ..' alias ...='cd ../..' export HISTFILESIZE=5000 # Larger history export CLICOLOR=1 # Use colors (if possible) export LSCOLORS=ExGxFxdxCxDxDxBxBxExEx 20.2 tcsh 2DCHQDBSR@MCOHODRENQSBRG@MCBRGRHLOKD@MC@QDSGDR@LD@RRG  # cmd >& file # Redirect both stdout and stderr to file. # cmd >>& file # Append both stdout and stderr to file. # cmd1 | cmd2 # pipe stdout to cmd2 # cmd1 |& cmd2 # pipe stdout and stderr to cmd2 4GDRDSSHMFRENQBRGSBRG@QDRDSHM ~/.cshrc QDKN@CVHSGRNTQBDBRGQB%W@LOKDR # in .cshrc alias ls 'ls -aF' alias ll 'ls -aFls' alias la 'ls -all' alias .. 'cd ..' alias ... 'cd ../..' set prompt = "%B%n%b@%B%m%b%/> " # like user@host/path/todir> set history = 5000 set savehist = ( 6000 merge ) set autolist # Report possible completions with tab set visiblebell # Do not beep, inverse colors # Bindkey and colors bindkey -e Select Emacs bindings # Use emacs keys to edit the command prompt bindkey -k up history-search-backward # Use up and down arrow to search bindkey -k down history-search-forward setenv CLICOLOR 1 # Use colors (if possible) setenv LSCOLORS ExGxFxdxCxDxDxBxBxExEx 4GD DL@BR LNCD DM@AKDR SN TRD SGD DL@BR JDXR RGNQSBTSR SN LNCHEX SGD BNLL@MC OQNLOS KHMD 4GHRHRDWSQDLDKXTRDETKMNSNMKXENQDL@BRTRDQR 4GDLNRSTRDCBNLL@MCR@QD # @ -NUDBTQRNQSNADFHMMHMFNEKHMD # D -NUDBTQRNQSNDMCNEKHMD - A -NUDBTQRNQA@BJNMDVNQC - E -NUDBTQRNQENQV@QCNMDVNQC - C #TSSGDMDWSVNQC # V #TSSGDK@RSVNQC # T #TSDUDQXSGHMFADENQDSGDBTQRNQ # J #TSDUDQXSGHMF@ESDQSGDBTQRNQQDRSNESGDKHMD # X 0@RSDSGDK@RSSGHMFSNADBTSRHLOKXO@RSD # ? 5MCN Note: # GNKCBNMSQNK - GNKCLDS@VGHBGHRTRT@KKXSGD@KSNQDRB@ODJDX  
  52. 21 S CRIPTING "@RHBR O [ 3BQHOS DW@LOKD O [

    @VJ O [ RDC O [ 2DFTK@Q %WOQDRRHNMR O [ TRDETK BNLL@MCR O 4GD "NTQMD RGDKK AHMRG HR OQDRDMS NM @KK 5MHW HMRS@KK@SHNMR @MC RBQHOSR VQHSSDM HM SGHR K@MFT@FD @QDPTHSD ONQS@AKD man 1 sh HR@FNNCQDEDQDMBD 21.1 Basics Variables and arguments !RRHFMVHSGU@QH@AKDU@KTD@MCFDSBNMSDMSVHSGU@QH@AKD MESSAGE="Hello World" # Assign a string PI=3.1415 # Assign a decimal number N=8 TWON=`expr $N * 2` # Arithmetic expression (only integers) TWON=$(($N * 2)) # Other syntax TWOPI=`echo "$PI * 2" | bc -l` # Use bc for floating point operations ZERO=`echo "c($PI/4)-sqrt(2)/2" | bc -l` 4GDBNLL@MCKHMD@QFTLDMSR@QD $0, $1, $2, ... # $0 is the command itself $# # The number of arguments $* # All arguments (also $@) Special Variables $$ # The current process ID $? # exit status of last command command if [ $? != 0 ]; then echo "command failed" fi mypath=`pwd` mypath=${mypath}/file.txt echo ${mypath##*/} # Display the filename only echo ${mypath%%.*} # Full path without extention var2=${var:=string} # Use var if set, otherwise use string # assign string to var and then to var2. Constructs for file in `ls` do echo $file done count=0 while [ $count -lt 5 ]; do echo $count sleep 1 count=$(($count + 1)) done myfunction() { find . -type f -name "*.$1" -print # $1 is first argument of the function } myfunction "txt" Generate a file MYHOME=/home/colin cat > testhome.sh << _EOF # All of this goes into the file testhome.sh if [ -d "$MYHOME" ] ; then 
  53. echo $MYHOME exists else echo $MYHOME does not exist fi

    _EOF sh testhome.sh 21.2 Bourne script example !R@RL@KKDW@LOKD SGDRBQHOSTRDCSNBQD@SD@0$&ANNJKDSEQNLSGHRWGSLKCNBTLDMS #!/bin/sh # This script creates a book in pdf format ready to print on a duplex printer if [ $# -ne 1 ]; then # Check the argument echo 1>&2 "Usage: $0 HtmlFile" exit 1 # non zero exit if error fi file=$1 # Assign the filename fname=${file%.*} # Get the name of the file only fext=${file#*.} # Get the extension of the file prince $file -o $fname.pdf # from www.princexml.com pdftops -paper A4 -noshrink $fname.pdf $fname.ps # create postscript booklet cat $fname.ps |psbook|psnup -Pa4 -2 |pstops -b "2:0,1U(21cm,29.7cm)" > $fname.book.ps ps2pdf13 -sPAPERSIZE=a4 -sAutoRotatePages=None $fname.book.ps $fname.book.pdf # use #a4 and #None on Windows! exit 0 # exit 0 means successful 21.3 Some awk commands !VJ HR TRDETK ENQ EHDKC RSQHOOHMF KHJD BTS HM @ LNQD ONVDQETK V@X 3D@QBG SGHR CNBTLDMS ENQ NSGDQ DW@LOKDR3DDENQDW@LOKD FMTK@LOBNL @MC NMD KHMDQRENQ@VJ ENQRNLDMHBDDW@LOKDR awk '{ print $2, $1 }' file # Print and inverse first two columns awk '{printf("%5d : %s\n", NR,$0)}' file # Add line number left aligned awk '{print FNR "\t" $0}' files # Add line number right aligned awk NF test.txt # remove blank lines (same as grep '.') awk 'length > 80' # print line longer than 80 char) 21.4 Some sed commands (DQDHR SGDNMDKHMDQFNKCLHMD!MC@FNNC HMSQNCTBSHNM@MCSTSNQH@KSNRDC sed 's/string1/string2/g' # Replace string1 with string2 sed -i 's/wroong/wrong/g' *.txt # Replace a recurring word with g sed 's/\(.*\)1/\12/g' # Modify anystring1 to anystring2 sed '/<p>/,/<\/p>/d' t.xhtml # Delete lines that start with <p> # and end with </p> sed '/ *#/d; /^ *$/d' # Remove comments and blank lines sed 's/[ \t]*$//' # Remove trailing spaces (use tab as \t) sed 's/^[ \t]*//;s/[ \t]*$//' # Remove leading and trailing spaces sed 's/[^*]/[&]/' # Enclose first char with [] top->[t]op sed = file | sed 'N;s/\n/\t/' > file.num # Number lines on a file 21.5 Regular Expressions 3NLDA@RHBQDFTK@QDWOQDRRHNMTRDETKENQRDCSNN3DD "@RHB2DFDW3XMS@W ENQ@FNNCOQHLDQ [\^$.|?*+() # special characters any other will match themselves \ # escapes special characters and treat as literal * # repeat the previous item zero or more times . # single character except line break characters GSSORSTCDMSMNQSGO@QJDCTODLDMSDRDCRDCKHMDSWS GSSOVVVFQXLNHQDBNL5MHW3DCGSLK GSSOVVVQDFTK@Q DWOQDRRHNMRHMENQDEDQDMBDGSLK 
  54. .* # match zero or more characters ^ # match

    at the start of a line/string $ # match at the end of a line/string .$ # match a single character at the end of line/string ^ $ # match line with a single space [^A-Z] # match any line beginning with any char from A to Z 21.6 Some useful commands 4GDENKKNVHMFBNLL@MCR@QDTRDETKSNHMBKTCDHM@RBQHOSNQ@RNMDKHMDQR sort -t. -k1,1n -k2,2n -k3,3n -k4,4n # Sort IPv4 ip addresses echo 'Test' | tr '[:lower:]' '[:upper:]' # Case conversion echo foo.bar | cut -d . -f 1 # Returns foo PID=$(ps | grep script.sh | grep bin | awk '{print $1}') # PID of a running script PID=$(ps axww | grep [p]ing | awk '{print $1}') # PID of ping (w/o grep pid) IP=$(ifconfig $INTERFACE | sed '/.*inet addr:/!d;s///;s/ .*//') # Linux IP=$(ifconfig $INTERFACE | sed '/.*inet /!d;s///;s/ .*//') # FreeBSD if [ `diff file1 file2 | wc -l` != 0 ]; then [...] fi # File changed? cat /etc/master.passwd | grep -v root | grep -v \*: | awk -F":" \ # Create http passwd '{ printf("%s:%s\n", $1, $2) }' > /usr/local/etc/apache2/passwd testuser=$(cat /usr/local/etc/apache2/passwd | grep -v \ # Check user in passwd root | grep -v \*: | awk -F":" '{ printf("%s\n", $1) }' | grep ^user$) :(){ :|:& };: # bash fork bomb. Will kill your machine tail +2 file > file2 # remove the first line from file ) TRD SGHR KHSSKD SQHBJ SN BG@MFD SGD EHKD DWSDMRHNM ENQ L@MX EHKDR @S NMBD &NQ DW@LOKD EQNL BWW SN BOO 4DRS HS EHQRS VHSGNTS SGD | sh @S SGD DMC 9NT B@M @KRN CN SGHR VHSG SGD BNLL@MC rename HE HMRS@KKDC/QVHSGA@RGATHKSHMR # ls *.cxx | awk -F. '{print "mv "$0" "$1".cpp"}' | sh # ls *.c | sed "s/.*/cp & &.$(date "+%Y%m%d")/" | sh # e.g. copy *.c to *.c.20080401 # rename .cxx .cpp *.cxx # Rename all .cxx to cpp # for i in *.cxx; do mv $i ${i%%.cxx}.cpp; done # with bash builtins 22 PRO G R A MMING 22.1 C basics strcpy(newstr,str) /* copy str to newstr */ expr1 ? expr2 : expr3 /* if (expr1) expr2 else expr3 */ x = (y > z) ? y : z; /* if (y > z) x = y; else x = z; */ int a[]={0,1,2}; /* Initialized array (or a[3]={0,1,2}; */ int a[2][3]={{1,2,3},{4,5,6}}; /* Array of array of ints */ int i = 12345; /* Convert in i to char str */ char str[10]; sprintf(str, "%d", i); 22.2 C example !LHMHL@KBOQNFQ@LRHLOKDB #include <stdio.h> main() { int number=42; printf("The answer is %i\n", number); } #NLOHKDVHSG # gcc simple.c -o simple # ./simple The answer is 42 
  55. 22.3 C++ basics *pointer // Object pointed to by pointer

    &obj // Address of object obj obj.x // Member x of class obj (object obj) pobj->x // Member x of class pointed to by pobj // (*pobj).x and pobj->x are the same 22.4 C++ example !R @ RKHFGSKX LNQD QD@KHRSHB OQNFQ@L HM #  @ BK@RR HM HSR NVM GD@CDQ )0UG @MC HLOKDLDMS@SHNM )0UBOO @MC @ OQNFQ@L VGHBG TRDR SGD BK@RR ETMBSHNM@KHSX 4GD BK@RR BNMUDQSR @M )0 @CCQDRR HM HMSDFDQENQL@SSNSGDJMNVMPT@CENQL@S IPv4 class IPv4.h: #ifndef IPV4_H #define IPV4_H #include <string> namespace GenericUtils { // create a namespace class IPv4 { // class definition public: IPv4(); ~IPv4(); std::string IPint_to_IPquad(unsigned long ip);// member interface }; } //namespace GenericUtils #endif // IPV4_H IPv4.cpp: #include "IPv4.h" #include <string> #include <sstream> using namespace std; // use the namespaces using namespace GenericUtils; IPv4::IPv4() {} // default constructor/destructor IPv4::~IPv4() {} string IPv4::IPint_to_IPquad(unsigned long ip) { // member implementation ostringstream ipstr; // use a stringstream ipstr << ((ip &0xff000000) >> 24) // Bitwise right shift << "." << ((ip &0x00ff0000) >> 16) << "." << ((ip &0x0000ff00) >> 8) << "." << ((ip &0x000000ff)); return ipstr.str(); } The program simplecpp.cpp #include "IPv4.h" #include <iostream> #include <string> using namespace std; int main (int argc, char* argv[]) { string ipstr; // define variables unsigned long ipint = 1347861486; // The IP in integer form GenericUtils::IPv4 iputils; // create an object of the class ipstr = iputils.IPint_to_IPquad(ipint); // call the class member cout << ipint << " = " << ipstr << endl; // print the result return 0; } 
  56. #NLOHKD@MCDWDBTSDVHSG # g++ -c IPv4.cpp simplecpp.cpp # Compile in objects

    # g++ IPv4.o simplecpp.o -o simplecpp.exe # Link the objects to final executable # ./simplecpp.exe 1347861486 = 80.86.187.238 5RD ldd SN BGDBJ VGHBG KHAQ@QHDR @QD TRDC AX SGD DWDBTS@AKD @MC VGDQD SGDX @QD KNB@SDC !KRN TRDC SNBGDBJHE@RG@QDCKHAQ@QXHRLHRRHMFNQHESGDDWDBTS@AKDHRRS@SHB # ldd /sbin/ifconfig # list dynamic object dependencies # ar rcs staticlib.a *.o # create static archive # ar t staticlib.a # print the objects list from the archive # ar x /usr/lib/libc.a version.o # extract an object file from the archive # nm version.o # show function members provided by object 22.5 Simple Makefile 4GD LHMHL@K -@JDEHKD ENQ SGD LTKSH RNTQBD OQNFQ@L HR RGNVM ADKNV 4GD KHMDR VHSG HMRSQTBSHNMR must begin with a tab4GDA@BJRK@RG<B@MADTRDCSNBTSKNMFKHMDR CC = g++ CFLAGS = -O OBJS = IPv4.o simplecpp.o simplecpp: ${OBJS} ${CC} -o simplecpp ${CFLAGS} ${OBJS} clean: rm -f ${TARGET} ${OBJS} 23 O NL INE H E L P 23.1 Documentation ,HMTW$NBTLDMS@SHNM DMSKCONQF ,HMTW-@M0@FDR VVVKHMTWL@MO@FDRBNL ,HMTWBNLL@MCRCHQDBSNQX VVVNQDHKKXMDSBNLKHMTWBLC ,HMTWCNBL@MGNVSNR KHMTWCHDMDS &QDD"3$(@MCANNJ VVVEQDDARCNQFG@MCANNJ &QDD"3$-@M0@FDR VVVEQDDARCNQFBFHL@MBFH &QDD"3$TRDQVHJH VVVEQDDARCVHJHMDS 3NK@QHR-@M0@FDR CNBRRTMBNL@OOCNBRBNKK 23.2 Other Unix/Linux references 2NRDSS@3SNMDENQ5MHW AG@LHBNLQNRDSS@GSLK@5MHWBNLL@MCSQ@MRK@SNQ 5MHWFTHCDBQNRRQDEDQDMBD TMHWFTHCDMDSTMHWFTHCDRGSLK ,HMTWBNLL@MCRKHMDKHRS VVVKHMTWBLCNQF 3GNQS,HMTWQDEDQDMBD VVVOHWDKAD@SNQFBLCKHMDGSLK ,HSSKDBNLL@MCKHMDFNNCHDR VVVRGDKK ETNQF 4G@SR@KKENKJR 4GHR CNBTLDMS 5MHW 4NNKANW QDUHRHNM  HR KHBDMRDC TMCDQ @ #QD@SHUD #NLLNMR ,HBDMBD ;!SSQHATSHNM 3G@QD!KHJD=b #NKHM"@QRBGDK  3NLDQHFGSRQDRDQUDC