SlideShare a Scribd company logo
Linux-Fu  for PHP Developers
About Me Lorna Mitchell Developer at Ibuildings European Rep for  http://phpwomen.org Personal blog  http://lornajane.net Compulsive keyboard user (for accessibility reasons)
Linux-Fu
Outline basic commands first utilities access permissions useful utilities
Linux Philosophy
Basic Commands
pwd Print Working Directory - shows you where you are lorna@taygete:~/Documents$  pwd /home/lorna/Documents
ls list files -a for all including hidden files lorna@taygete:~/Documents$   ls   - a .  jam_labels.pdf  netball ..  libmemcache_install_notes.txt  tek_instructions.txt advent_web_services.rtf  linux - fu_geekup.txt  using_the_community.txt girlgeek_post2.txt  memcache.odt jam_labels.odt  memcache.rtf
ls -l for long list  ls -la  lorna@taygete:~/Documents$   ls   - la total   136 drwxr - xr - x   3   lorna lorna   4096 2009 - 04 - 24 09 : 37   . drwxr - xr - x   66   lorna lorna   4096 2009 - 04 - 23 17 : 33   .. - rw - r -- r --   1   lorna lorna   16790 2008 - 12 - 04 22 : 54   advent_web_services.rtf - rw - r -- r --   1   lorna lorna   1263 2008 - 12 - 10 12 : 16   girlgeek_post2.txt - rw - r -- r --   1   lorna lorna   10700 2008 - 12 - 20 16 : 08   jam_labels.odt - rw - rw - rw -   1   lorna lorna   6747 2008 - 12 - 25 21 : 35   jam_labels.pdf - rw - r -- r --   1   lorna lorna   316 2009 - 03 - 19 19 : 28   libmemcache_install_notes.txt - rw - r -- r --   1   lorna lorna   189 2009 - 02 - 08 16 : 02   linux - fu_geekup.txt - rw - r -- r --   1   lorna lorna   33275 2008 - 12 - 04 11 : 37   memcache.odt - rw - r - xr --   1   lorna users   28205 2008 - 12 - 04 11 : 37   memcache.rtf drwxr - xr - x   2   lorna lorna   4096 2009 - 04 - 24 09 : 37   netball - rw - r -- r --   1   lorna lorna   940 2008 - 12 - 09 09 : 43   tek_instructions.txt - rw - r -- r --   1   lorna lorna   461 2008 - 11 - 28 22 : 49   using_the_community.txt
ls -t for list by time -r for sort in reverse order  lorna@taygete:~/Documents$   ls   - lrt total   128 - rw - r -- r --   1   lorna lorna   461 2008 - 11 - 28 22 : 49   using_the_community.txt - rw - r -- r --   1   lorna lorna   33275 2008 - 12 - 04 11 : 37   memcache.odt - rw - r - xr --   1   lorna users   28205 2008 - 12 - 04 11 : 37   memcache.rtf - rw - r -- r --   1   lorna lorna   16790 2008 - 12 - 04 22 : 54   advent_web_services.rtf - rw - r -- r --   1   lorna lorna   940 2008 - 12 - 09 09 : 43   tek_instructions.txt - rw - r -- r --   1   lorna lorna   1263 2008 - 12 - 10 12 : 16   girlgeek_post2.txt - rw - r -- r --   1   lorna lorna   10700 2008 - 12 - 20 16 : 08   jam_labels.odt - rw - rw - rw -   1   lorna lorna   6747 2008 - 12 - 25 21 : 35   jam_labels.pdf - rw - r -- r --   1   lorna lorna   189 2009 - 02 - 08 16 : 02   linux - fu_geekup.txt - rw - r -- r --   1   lorna lorna   316 2009 - 03 - 19 19 : 28   libmemcache_install_notes.txt drwxr - xr - x   2   lorna lorna   4096 2009 - 04 - 24 09 : 37   netball
ls ls <path> to list contents of a different directory
cd Change Directory cd <dir> to enter a subdir cd .. to go up a level lorna@taygete:~$  cd /etc lorna@taygete:/etc$  cd cron.d lorna@taygete:/etc/cron.d$ lorna@taygete:/etc/cron.d$  cd .. lorna@taygete:/etc$
cd cd ~ to go home cd - to go back to where you came from lorna@taygete:/etc$  cd ~ lorna@taygete:~$  pwd /home/lorna lorna@taygete:~$ lorna@taygete:~$  cd - lorna@taygete:/etc$  pwd /etc
First Utilities
touch creates an empty file with current timestamp no feedback (this is *nix) lorna@taygete:~/talks/temp$   touch   unicorns.txt lorna@taygete:~/talks/temp$   ls   - lA total   0 - rw - r -- r --   1   lorna lorna   0 2009 - 04 - 24 09 : 50   unicorns.txt
cat outputs a file to your terminal cat <file> lorna@taygete:~/talks$   cat   orange.txt Oranges are not the only fruit ( name of a book ) lorna@taygete:~/talks$
less/more pager for viewing longer content more <file> less <file> use less – it really is more in this case
stdin/stdout stdin  &quot;standard in&quot; – input to a program, usually command line arguments stdout  &quot;standard out&quot; – output, usually to your screen
stdin/stdout photo credit: ppdigital
pipe &quot;chaining&quot; operator output of one program pushed along the pipe to the input of the next
pipe cat orange.txt index.php | more lorna@taygete:~/talks$  cat   orange.txt index.php   |   more Oranges are not the only fruit ( name of a book ) < ?php class Response   { public   function   output () { header ( 'Content-type: text/xml' ); echo   '<?xml version=&quot;1.0&quot;?>' ; echo   &quot; \n &quot; ; } } -- More --
file redirection operators a.k.a. &quot;pointy brackets&quot; < and > > directs stdout to the named file >> appends to the file rather than truncating it before outputting
file redirection operators lorna@taygete:~/talks$  mysqldump   -- compact   - u root   - p   test Enter password : SET @saved_cs_client   =   @@character_set_client ; SET character_set_client   =   utf8 ; CREATE TABLE   `users`   ( `user_id`  int ( 11 )   NOT NULL auto_increment , `name`  varchar ( 20 )   default NULL , PRIMARY KEY   ( `user_id` ) )   ENGINE = MyISAM AUTO_INCREMENT = 2   DEFAULT CHARSET = latin1 ; SET character_set_client   =   @saved_cs_client ; INSERT INTO   `users`  VALUES   ( 1 , 'lornajane' );
file redirection operators lorna@taygete:~/talks$  mysqldump   -- compact   - u root   - p   test   >   test .sql Enter password : [email_address] :~/talks$ lorna@taygete:~/talks$  mysqldump  -- compact  - u root  - p  test   |   gzip   >   test .sql.gz Enter password : [email_address] :~/talks$
file redirection operators < directs the contents of the file to stdin lorna@taygete:~/talks$  mysql   - u root   - p   test   <   test .sql Enter password : lorna@taygete:~/talks$
Access
telnet not now used much for server access useful for direct port access telnet <host> <port>
ssh Secure SHell prompts for password, you arrive at command prompt
scp secure copy copies files over a one-off ssh connection if you have ssh access, this is available scp <source> <target> source and/or target can be remote paths
scp [email_address] :~$  scp cherries.jpg lorna@rivendell.local:fruit.jpg lorna@rivendell.local's password: cherries.jpg  100%  162KB 162.3KB/s  00:00
scp lorna@taygete:~$  scp cherries.jpg lorna@rivendell.local: lorna@rivendell.local's password: cherries.jpg  100%  162KB 162.3KB/s  00:00
scp lorna@taygete:~$  scp -r talks lorna@rivendell.local:talks/ lorna@rivendell.local's password: thing.jpg  100%  162KB 162.3KB/s  00:00 credits.txt  100%  68  0.1KB/s  00:00 index.php  100%  167  0.2KB/s  00:00 cherries.jpg  100%  162KB 162.3KB/s  00:00 orange.txt  100%  44  0.0KB/s  00:00 misc.php  100%  59  0.1KB/s  00:00 long_file.txt  100% 2383  2.3KB/s  00:00 what.jpg  100%  162KB 162.3KB/s  00:00
sftp SSH File Transfer Protocol similar to FTP many FTP clients handle SFTP more secure easy to set up, part of SSH server
Permissions
Permissions 10 characters of information see in the output of ls lorna@taygete:~/Documents$   ls   - la total   136 drwxr - xr - x   3   lorna lorna   4096 2009 - 04 - 24 09 : 37   . drwxr - xr - x   66   lorna lorna   4096 2009 - 04 - 23 17 : 33   .. - rw - r -- r --   1   lorna lorna   16790 2008 - 12 - 04 22 : 54   advent_web_services.rtf - rw - r -- r --   1   lorna lorna   1263 2008 - 12 - 10 12 : 16   girlgeek_post2.txt - rw - r -- r --   1   lorna lorna   10700 2008 - 12 - 20 16 : 08   jam_labels.odt - rw - rw - rw -   1   lorna lorna   6747 2008 - 12 - 25 21 : 35   jam_labels.pdf - rw - r -- r --   1   lorna lorna   316 2009 - 03 - 19 19 : 28   libmemcache_install_notes.txt - rw - r -- r --   1   lorna lorna   189 2009 - 02 - 08 16 : 02   linux - fu_geekup.txt - rw - r -- r --   1   lorna lorna   33275 2008 - 12 - 04 11 : 37   memcache.odt - rw - r - xr --   1   lorna users   28205 2008 - 12 - 04 11 : 37   memcache.rtf drwxr - xr - x   2   lorna lorna   4096 2009 - 04 - 24 09 : 37   netball - rw - r -- r --   1   lorna lorna   940 2008 - 12 - 09 09 : 43   tek_instructions.txt - rw - r -- r --   1   lorna lorna   461 2008 - 11 - 28 22 : 49   using_the_community.txt
Permissions
Permissions
chmod change permissions chmod <class><operator><mode> <file> class: u,g,o,a (user, group, other, all) operator: +, -, = mode: r,w,x, or any combination
chmod add execute permission for group lorna@taygete:~/Documents$   chmod   g + rx memcache.rtf lorna@taygete:~/Documents$   ls   - lA total   132 - rw - r -- r --   1   lorna lorna   16790 2008 - 12 - 04 22 : 54   advent_web_services.rtf lrwxrwxrwx   1   lorna lorna   22 2009 - 03 - 16 12 : 04   downloads   -> / home / lorna / downloads / - rw - r -- r --   1   lorna lorna   1263 2008 - 12 - 10 12 : 16   girlgeek_post2.txt - rw - r -- r --   1   lorna lorna   10700 2008 - 12 - 20 16 : 08   jam_labels.odt - rw - rw - rw -   1   lorna lorna   6747 2008 - 12 - 25 21 : 35   jam_labels.pdf - rw - r -- r --   1   lorna lorna   189 2009 - 02 - 08 16 : 02   linux - fu_geekup.txt - rw - r -- r --   1   lorna lorna   33275 2008 - 12 - 04 11 : 37   memcache.odt - rw - r - x r --   1   lorna lorna   28205 2008 - 12 - 04 11 : 37   memcache.rtf - rw - r -- r --   1   lorna lorna   9939 2009 - 03 - 09 15 : 23   netball_cancellation.pdf - rw - r -- r --   1   lorna lorna   940 2008 - 12 - 09 09 : 43   tek_instructions.txt - rw - r -- r --   1   lorna lorna   461 2008 - 11 - 28 22 : 49   using_the_community.txt
chown chown lorna:users memcache.rtf lorna@taygete:~/Documents$  chown lorna : users memcache.rtf lorna@taygete:~/Documents$   ls   - lA total   132 - rw - r -- r --   1   lorna lorna   16790 2008 - 12 - 04 22 : 54   advent_web_services.rtf lrwxrwxrwx   1   lorna lorna   22 2009 - 03 - 16 12 : 04   downloads   -> / home / lorna / downloads / - rw - r -- r --   1   lorna lorna   1263 2008 - 12 - 10 12 : 16   girlgeek_post2.txt - rw - r -- r --   1   lorna lorna   10700 2008 - 12 - 20 16 : 08   jam_labels.odt - rw - rw - rw -   1   lorna lorna   6747 2008 - 12 - 25 21 : 35   jam_labels.pdf - rw - r -- r --   1   lorna lorna   189 2009 - 02 - 08 16 : 02   linux - fu_geekup.txt - rw - r -- r --   1   lorna lorna   33275 2008 - 12 - 04 11 : 37   memcache.odt - rw - r - xr --   1   lorna  users   28205 2008 - 12 - 04 11 : 37   memcache.rtf - rw - r -- r --   1   lorna lorna   9939 2009 - 03 - 09 15 : 23   netball_cancellation.pdf - rw - r -- r --   1   lorna lorna   940 2008 - 12 - 09 09 : 43   tek_instructions.txt - rw - r -- r --   1   lorna lorna   461 2008 - 11 - 28 22 : 49   using_the_community.txt
root superuser don't log in as root log in, then su (substitute user) may need root privileges, to perform certain actions
sudo avoids using root account gives root for a single command
sudo http://xkcd.com/149/
Useful Utilities
cURL tool for talking to the world over http lorna@taygete: ~$ curl http://localhost Example Home Page Array ( )
cURL < ?php echo   &quot;Example Home Page \n\n &quot; ; print_r ( $_POST ); ? >
cURL checking actual browser response headers/content curl -I http://localhost (that's a capital i) lorna@taygete:~$  curl -I http://localhost HTTP/1.1 200 OK Date: Mon, 16 Mar 2009 12:35:10 GMT Server: Apache/2.2.9 (Ubuntu) PHP/5.2.6-2ubuntu4.1 with Suhosin-Patch X-Powered-By: PHP/5.2.6-2ubuntu4.1 Vary: Accept-Encoding Content-Type: text/html
cURL posting variables lorna@taygete:~$  curl -X POST http://localhost -d fruit=apple  -d user=lornajane Example Home Page Array ( [fruit] => apple [user] => lornajane )
wget web downloader lorna@taygete:~$  wget http :// www.splitbrain.org / _media / projects / dokuwiki / dokuwiki - 2009 - 02 - 14 .tgz -- 2009 - 04 - 24 10 : 40 : 16 --   http :// www.splitbrain.org / _media / projects / dokuwiki / dokuwiki - 2009 - 02 - 14 .tgz Resolving www.splitbrain.org...   78.46.97.149 Connecting to www.splitbrain.org | 78.46.97.149 |: 80 ... connected. HTTP request sent ,   awaiting response...   200   OK Length :   1770454   ( 1.7 M ) [ application / octet - stream ] Saving to :   `dokuwiki-2009-02-14.tgz' 100%[=================================>] 1,770,454  1.39M/s  in 1.2s 2009-04-24 10:40:18 (1.39 MB/s)  - ` dokuwiki - 2009 - 02 - 14 .tgz ' saved [1770454/1770454]
wget to mirror a site wget -m http://lornajane.net to resume large downloads wget -c http://localhost
grep finding things (Global/Regular Expression/Print) grep [options] [pattern] [target]
grep discover functions lorna@rivendell:~/svndir/snapshot/lib$   grep   function  Service.class.php *   This class holds the functionality of the out - ward facing part of *   This   function   is called to add a new request to the queue. public   function   requestShot ( $accountID ,   $requestURL ,   $returnURL   =   NULL ,   $height = 75 ,   $width = 100 ) { function   getShotStatus ( $accountID ,   $transactionID ) { function   getAccountStatus ( $accountID ) { function   getShotList ( $accountID ,   $status = NULL ) { function   getShot ( $accountID ,   $transactionID ) {
grep look for class names in source tree lorna@rivendell:~/svndir/phergie$   grep   - R   '^class '   * |   grep   - v .svn   |   more Phergie / Event / Response.php : class Phergie_Event_Response Phergie / Event / Request.php : class Phergie_Event_Request Phergie / Driver / Streams.php : class Phergie_Driver_Streams extends Phergie_Driver_A bstract Phergie / Plugin / Drink.php : class Phergie_Plugin_Drink extends Phergie_Plugin_Abstr act_Command Phergie / Plugin / ModuleList.php : class Phergie_Plugin_ModuleList extends Phergie_Pl ugin_Abstract_Command Phergie / Plugin / Debug.php : class Phergie_Plugin_Debug extends Phergie_Plugin_Abstr act_Command Phergie / Plugin / Twitter / twitter.class.php : class Twitter   { Phergie / Plugin / Twitter / laconica.class.php : class Twitter_Laconica extends Twitter {
grep Recursive and case insensitive lorna@rivendell:~/svndir/snapshot$   grep   - Ri  'select \* from'   * lib / Model / Miscinfo.class.php :   $row   =   $dbh -> read ( 'select * from misc_info where info_key = ' . $dbh -> quote ( $key ) . ' limit 1' ); lib / Model / Transaction.class.php :   $row   =   $dbh -> read ( 'select * from transactions where transaction_id = ' . $dbh -> quote ( $transaction_id ) . ' limit 1' ); lib / Model / Transaction.class.php :   $row   =   $dbh -> read ( 'select * from transactions where transaction_id = ' . $dbh -> quote ( $transaction_id ) . ' and account_id = ' . $dbh -> quote ( $account_id ) . ' limit 1' ); lib / Model / Transaction.class.php :   $sql   =   'select * from transactions where account_id = ' . $dbh -> quote ( $account_id ); lib / Model / Transaction.class.php :   $sql   =   'select * from transactions where status = ' . $dbh -> quote ( $status ); lib / Model / File.class.php :   $row   =   $dbh -> read ( 'select * from files where id = ' . $dbh -> quote ( $id ) . ' limit 1' ); lib / Model / Account.class.php :   $row   =   $dbh -> read ( 'select * from accounts where account_id = ' . $dbh -> quote ( $account_id ) . ' limit 1' ); lib / DBL / Database.class.php : *   $rows   =   $db -> read ( 'select * from aTable' );
find powerful &quot;grep&quot; using file metadata rather than content can search by name find . -name .htaccess also by modified time, by size, etc ...
diff shows differences between files, doesn't show you what is the same lorna@taygete:~/talks$   diff   misc.php.old misc.php 3 c3 <   $link   =   mysql_connect ( 'localhost' , 'app_user' , 'yorkshirepud' ); --- >   $link   =   mysql_connect ( 'localhost' , 'lorna' , 'candyfloss' );
diff Unified diff format lorna@taygete:~/talks$   diff   - u misc.php.old misc.php ---   misc.php.old   2009 - 04 - 24 10 : 56 : 08.000000000   + 0100 +++   misc.php   2009 - 04 - 24 10 : 56 : 51.000000000   + 0100 @@   - 1 , 6   + 1 , 6   @@ < ?php - $link   =   mysql_connect ( 'localhost' , 'app_user' , 'yorkshirepud' ); + $link   =   mysql_connect ( 'localhost' , 'lorna' , 'candyfloss' ); $rhyme   =   &quot;Mary Had A Little Lamb&quot; ; echo $rhyme ;
grep lorna@taygete:~/talks$   diff   - u misc.php.old misc.php   >   patch .txt
patch patch applies diff files
patch lorna@taygete:~/talks$   cat   example.php < ?php $link   =   mysql_connect ( 'localhost' , 'app_user' , 'yorkshirepud' ); ? > lorna@taygete:~/talks$   patch   example.php   <   patch .txt patching   file   example.php lorna@taygete:~/talks$   cat   example.php < ?php $link   =   mysql_connect ( 'localhost' , 'lorna' , 'candyfloss' ); ? > lorna@taygete:~/talks$
tar Tape ARchive for gluing together files, for transfer lorna@taygete:~/talks$   ls cherries.jpg  example.php  long_file.txt  orange.txt  temp   test .sql.gz  what.jpg credits.txt  index.php  misc.php   patch .txt   test .sql  thing.jpg lorna@taygete:~/talks$   tar   - zcf talks.tgz   * lorna@taygete:~/talks$   ls cherries.jpg  example.php  long_file.txt  orange.txt  talks.tgz   test .sql  thing.jpg credits.txt  index.php  misc.php   patch .txt  temp   test .sql.gz  what.jpg lorna@taygete:~/talks$
nano widely available lightweight editor designed as a non-pine equivalent to pico (PIne COmposer) instructions are on-screen
nano
wc word count for counting lines lorna@taygete:~/tek09$   wc   - l linux - fu_content.txt 283   linux - fu_content.txt
tail looking at the end of a file tail -n50 access.log tail -f access.log
screen opening several sessions in one window can detach, log out, come back
screen protects against connection dropping saves logging into the same server many times use .screenrc for config
screen
man man pages are the manual man <command> name synopsis (example arguments) description (all the switches) examples, if you are lucky some tools use &quot;info&quot; instead
man lorna@taygete:~$ man pwd PWD(1)  User Commands  PWD(1) NAME pwd - print name of current/working directory SYNOPSIS pwd [OPTION] DESCRIPTION Print the full filename of the current working directory. --help display this help and exit --version output version information and exit NOTE:  your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shellâÀÙs documentation  for  details about the options it supports.
http://joind.in/201
File Locations
log files /var/log /var/log/apache2/access.log
apache config ubuntu, debian /etc/apache2/sites-available redhat /etc/httpd/httpd.conf
/usr/local for stuff that you've installed/added
Processes
ps Process Status shows what is running, pid, user
ps ps ax ps aux use with grep 6761   ?  Ss   0 : 00   / usr / sbin / apache2   - k start 8009   ?  S   0 : 00   / usr / sbin / apache2   - k start 8010   ?  S   0 : 00   / usr / sbin / apache2   - k start 8011   ?  S   0 : 00   / usr / sbin / apache2   - k start 8012   ?  S   0 : 00   / usr / sbin / apache2   - k start 8013   ?  S   0 : 00   / usr / sbin / apache2   - k start 24209   pts / 4   S +   0 : 00   grep   apache
top show current top processes sort by zxc z for colour x for column highlight c to show full command < > to change which column we're sorting by ** q to quit
check apache is running use grep - look for &quot;apache&quot; or &quot;httpd&quot; if not: apache2ctl restart service httpd restart
check mysql is running use grep if not: /etc/init.d/mysql start
Basic Commands
mkdir mkdir make directory lorna@taygete:~/temp$  ls lorna@taygete:~/temp$  mkdir examples lorna@taygete:~/temp$  ls examples
mv and cp move and copy files lorna@taygete:~/temp$  ls cherries.jpg lorna@taygete:~/temp$  mv cherries.jpg oranges.jpg lorna@taygete:~/temp$  ls oranges.jpg lorna@taygete:~/temp$  cp oranges.jpg cherries.jpg lorna@taygete:~/temp$  ls cherries.jpg  oranges.jpg lorna@taygete:~/temp$  cp /etc/php5/cli/php.ini php-cli.ini lorna@taygete:~/temp$  ls cherries.jpg  oranges.jpg  php-cli.ini
rm remove files/directories cherries.jpg  examples  oranges.jpg lorna@taygete:~/temp$  rm oranges.jpg lorna@taygete:~/temp$  touch examples/dewdrops.txt lorna@taygete:~/temp$  rm examples/ rm: cannot remove `examples/': Is a directory lorna@taygete:~/temp$  rmdir examples rmdir: failed to remove `examples': Directory not empty lorna@taygete:~/temp$  rm -rf examples lorna@taygete:~/temp$  ls cherries.jpg
ln link - creates a symlink or alias between directories lorna@taygete:~/Documents$   ln   - s   / home / lorna / downloads temp lorna@taygete:~/Documents$   cd   temp lorna@taygete:~/Documents/temp$   pwd / home / lorna / Documents / temp lorna@taygete:~/Documents/temp$   ls FlickrDownload - 0.4   highlight - 2.7 . tar .gz  libmemcached - 0.26 . tar .gz  ZendFramework - 1.7.6 - minimal FlickrDownload - 0.4 . tar .gz  key.txt  lorna_andean_explorer_large.jpg  ZendFramework - 1.7.6 - minimal. tar .gz highlight - 2.7   libmemcached - 0.26   sun - presenter - screen - linuxintel.oxt lorna@taygete:~/Documents/temp$
cURL great for services flickr example curl -X POST http://api.flickr.com/services/rest/  -d  method=flickr.photos.getRecent  -d api_key=853b05c9... -d per_page=5
cURL < ?xml version = &quot;1.0&quot;  encoding = &quot;utf-8&quot;  ? > < rsp stat = &quot;ok&quot; > < photos page = &quot;1&quot;  pages = &quot;200&quot;  perpage = &quot;5&quot;  total = &quot;1000&quot; > < photo id = &quot;3359907386&quot;  owner = &quot;24259661@N03&quot;  secret = &quot;abcd3374c4&quot;  server = &quot;3593&quot;  farm = &quot;4&quot;  title = &quot;Sandford 2009&quot;  ispublic = &quot;1&quot;  isfriend = &quot;0&quot;  isfamily = &quot;0&quot;   /> < photo id = &quot;3359907364&quot;  owner = &quot;12383345@N06&quot;  secret = &quot;0e5637d188&quot;  server = &quot;3607&quot;  farm = &quot;4&quot;  title = &quot;DSC00159&quot;  ispublic = &quot;1&quot;  isfriend = &quot;0&quot;  isfamily = &quot;0&quot;   /> < photo id = &quot;3359907350&quot;  owner = &quot;84656095@N00&quot;  secret = &quot;3ca7085d12&quot;  server = &quot;3461&quot;  farm = &quot;4&quot;  title = &quot;green&quot;  ispublic = &quot;1&quot;  isfriend = &quot;0&quot;  isfamily = &quot;0&quot;   /> < photo id = &quot;3359088077&quot;  owner = &quot;20633056@N04&quot;  secret = &quot;3d03f2b935&quot;  server = &quot;3654&quot;  farm = &quot;4&quot;  title = &quot;03c&quot;  ispublic = &quot;1&quot;  isfriend = &quot;0&quot;  isfamily = &quot;0&quot;   /> < photo id = &quot;3359088059&quot;  owner = &quot;33581202@N07&quot;  secret = &quot;efa70c71f0&quot;  server = &quot;3607&quot;  farm = &quot;4&quot;  title = &quot;DSCF4768&quot;  ispublic = &quot;1&quot;  isfriend = &quot;0&quot;  isfamily = &quot;0&quot;   /> </ photos > </ rsp >

More Related Content

What's hot (20)

PDF
Perl Memory Use 201209
Tim Bunce
 
PDF
Device-specific Clang Tooling for Embedded Systems
emBO_Conference
 
PPTX
SCALE 15x Minimizing PostgreSQL Major Version Upgrade Downtime
Jeff Frost
 
PPTX
Linux networking commands
Sayed Ahmed
 
PDF
RestMQ - HTTP/Redis based Message Queue
Gleicon Moraes
 
PPTX
Mercurial for Kittens
nya3jp
 
PDF
Hadoop spark performance comparison
arunkumar sadhasivam
 
PPT
typemap in Perl/XS
charsbar
 
PPTX
The Next Linux Superpower: eBPF Primer
Sasha Goldshtein
 
PPTX
Modern Linux Tracing Landscape
Sasha Goldshtein
 
PDF
Centralized + Unified Logging
Gabor Kozma
 
PPTX
Commit2015 kharchenko - python generators - ext
Maxym Kharchenko
 
PPTX
Opendaylight app development
vjanandr
 
PDF
Redis as a message queue
Brandon Lamb
 
PDF
Redis & ZeroMQ: How to scale your application
rjsmelo
 
PDF
Perl Memory Use 201207 (OUTDATED, see 201209 )
Tim Bunce
 
ODP
Nmap Scripting Engine and http-enumeration
Robert Rowley
 
PDF
Debugging Ruby
Aman Gupta
 
PDF
Debugging Ruby Systems
Engine Yard
 
PDF
Performance tweaks and tools for Linux (Joe Damato)
Ontico
 
Perl Memory Use 201209
Tim Bunce
 
Device-specific Clang Tooling for Embedded Systems
emBO_Conference
 
SCALE 15x Minimizing PostgreSQL Major Version Upgrade Downtime
Jeff Frost
 
Linux networking commands
Sayed Ahmed
 
RestMQ - HTTP/Redis based Message Queue
Gleicon Moraes
 
Mercurial for Kittens
nya3jp
 
Hadoop spark performance comparison
arunkumar sadhasivam
 
typemap in Perl/XS
charsbar
 
The Next Linux Superpower: eBPF Primer
Sasha Goldshtein
 
Modern Linux Tracing Landscape
Sasha Goldshtein
 
Centralized + Unified Logging
Gabor Kozma
 
Commit2015 kharchenko - python generators - ext
Maxym Kharchenko
 
Opendaylight app development
vjanandr
 
Redis as a message queue
Brandon Lamb
 
Redis & ZeroMQ: How to scale your application
rjsmelo
 
Perl Memory Use 201207 (OUTDATED, see 201209 )
Tim Bunce
 
Nmap Scripting Engine and http-enumeration
Robert Rowley
 
Debugging Ruby
Aman Gupta
 
Debugging Ruby Systems
Engine Yard
 
Performance tweaks and tools for Linux (Joe Damato)
Ontico
 

Similar to Linux-Fu for PHP Developers (20)

DOCX
Linux basic commands
Teja Bheemanapally
 
DOC
Some basic unix commands
aaj_sarkar06
 
PDF
Linux cheat-sheet
Craig Cannon
 
PDF
Linux cheat-sheet
Zeeshan Rizvi
 
PDF
Linux Commandos Cheat
Alvaro Gomes
 
PPT
Basic 50 linus command
MAGNA COLLEGE OF ENGINEERING
 
ODP
Lamp ppt
Reka
 
ODP
Lamp ppt
poornima sugumaran
 
PDF
Linux commands cheat sheet by linoxide.com
Stavros Skamagkis
 
PDF
Basic shell commands by Jeremy Sanders
Devanand Gehlot
 
PDF
The Linux Command Cheat Sheet
Tola LENG
 
PPTX
Basic unix
Raghu nath
 
PPT
BITS: Introduction to Linux - Text manipulation tools for bioinformatics
BITS
 
PPT
Linux
SINGH PROJECTS
 
PDF
Unix commands
selvamanisampath
 
PPTX
Linux Presentation
Muhammad Qazi
 
PDF
Basic linux commands
Raghav Arora
 
PPTX
Linux basic commands
Sagar Kumar
 
ODP
Linux commands
Manish Bothra
 
PPT
Linux shell scripting
Mohamed Abubakar Sittik A
 
Linux basic commands
Teja Bheemanapally
 
Some basic unix commands
aaj_sarkar06
 
Linux cheat-sheet
Craig Cannon
 
Linux cheat-sheet
Zeeshan Rizvi
 
Linux Commandos Cheat
Alvaro Gomes
 
Basic 50 linus command
MAGNA COLLEGE OF ENGINEERING
 
Lamp ppt
Reka
 
Lamp ppt
poornima sugumaran
 
Linux commands cheat sheet by linoxide.com
Stavros Skamagkis
 
Basic shell commands by Jeremy Sanders
Devanand Gehlot
 
The Linux Command Cheat Sheet
Tola LENG
 
Basic unix
Raghu nath
 
BITS: Introduction to Linux - Text manipulation tools for bioinformatics
BITS
 
Unix commands
selvamanisampath
 
Linux Presentation
Muhammad Qazi
 
Basic linux commands
Raghav Arora
 
Linux basic commands
Sagar Kumar
 
Linux commands
Manish Bothra
 
Linux shell scripting
Mohamed Abubakar Sittik A
 
Ad

More from Lorna Mitchell (20)

PDF
OAuth: Trust Issues
Lorna Mitchell
 
PDF
Web Services PHP Tutorial
Lorna Mitchell
 
PDF
Best Practice in API Design
Lorna Mitchell
 
PDF
Git, GitHub and Open Source
Lorna Mitchell
 
PDF
Business 101 for Developers: Time and Money
Lorna Mitchell
 
ODP
Things I wish web graduates knew
Lorna Mitchell
 
PDF
Teach a Man To Fish (phpconpl edition)
Lorna Mitchell
 
PDF
Web services tutorial
Lorna Mitchell
 
ODP
Join In With Joind.In
Lorna Mitchell
 
PDF
Tool Up Your LAMP Stack
Lorna Mitchell
 
PDF
Going Freelance
Lorna Mitchell
 
PDF
Understanding Distributed Source Control
Lorna Mitchell
 
PDF
Best Practice in Web Service Design
Lorna Mitchell
 
PDF
Coaching Development Teams: Teach A Man To Fish
Lorna Mitchell
 
PDF
Zend Certification Preparation Tutorial
Lorna Mitchell
 
PDF
Implementing OAuth with PHP
Lorna Mitchell
 
PDF
Web Services Tutorial
Lorna Mitchell
 
PDF
Object Oriented Programming in PHP
Lorna Mitchell
 
PDF
Example Presentation
Lorna Mitchell
 
PDF
Could You Telecommute?
Lorna Mitchell
 
OAuth: Trust Issues
Lorna Mitchell
 
Web Services PHP Tutorial
Lorna Mitchell
 
Best Practice in API Design
Lorna Mitchell
 
Git, GitHub and Open Source
Lorna Mitchell
 
Business 101 for Developers: Time and Money
Lorna Mitchell
 
Things I wish web graduates knew
Lorna Mitchell
 
Teach a Man To Fish (phpconpl edition)
Lorna Mitchell
 
Web services tutorial
Lorna Mitchell
 
Join In With Joind.In
Lorna Mitchell
 
Tool Up Your LAMP Stack
Lorna Mitchell
 
Going Freelance
Lorna Mitchell
 
Understanding Distributed Source Control
Lorna Mitchell
 
Best Practice in Web Service Design
Lorna Mitchell
 
Coaching Development Teams: Teach A Man To Fish
Lorna Mitchell
 
Zend Certification Preparation Tutorial
Lorna Mitchell
 
Implementing OAuth with PHP
Lorna Mitchell
 
Web Services Tutorial
Lorna Mitchell
 
Object Oriented Programming in PHP
Lorna Mitchell
 
Example Presentation
Lorna Mitchell
 
Could You Telecommute?
Lorna Mitchell
 
Ad

Recently uploaded (20)

PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PPT
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
PDF
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PPTX
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PDF
Learn Computer Forensics, Second Edition
AnuraShantha7
 
PDF
Windsurf Meetup Ottawa 2025-07-12 - Planning Mode at Reliza.pdf
Pavel Shukhman
 
PDF
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
PDF
Predicting the unpredictable: re-engineering recommendation algorithms for fr...
Speck&Tech
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
Interview paper part 3, It is based on Interview Prep
SoumyadeepGhosh39
 
SWEBOK Guide and Software Services Engineering Education
Hironori Washizaki
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
Learn Computer Forensics, Second Edition
AnuraShantha7
 
Windsurf Meetup Ottawa 2025-07-12 - Planning Mode at Reliza.pdf
Pavel Shukhman
 
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
Predicting the unpredictable: re-engineering recommendation algorithms for fr...
Speck&Tech
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 

Linux-Fu for PHP Developers

  • 1. Linux-Fu for PHP Developers
  • 2. About Me Lorna Mitchell Developer at Ibuildings European Rep for http://phpwomen.org Personal blog http://lornajane.net Compulsive keyboard user (for accessibility reasons)
  • 4. Outline basic commands first utilities access permissions useful utilities
  • 7. pwd Print Working Directory - shows you where you are lorna@taygete:~/Documents$ pwd /home/lorna/Documents
  • 8. ls list files -a for all including hidden files lorna@taygete:~/Documents$ ls - a . jam_labels.pdf netball .. libmemcache_install_notes.txt tek_instructions.txt advent_web_services.rtf linux - fu_geekup.txt using_the_community.txt girlgeek_post2.txt memcache.odt jam_labels.odt memcache.rtf
  • 9. ls -l for long list ls -la lorna@taygete:~/Documents$ ls - la total 136 drwxr - xr - x 3 lorna lorna 4096 2009 - 04 - 24 09 : 37 . drwxr - xr - x 66 lorna lorna 4096 2009 - 04 - 23 17 : 33 .. - rw - r -- r -- 1 lorna lorna 16790 2008 - 12 - 04 22 : 54 advent_web_services.rtf - rw - r -- r -- 1 lorna lorna 1263 2008 - 12 - 10 12 : 16 girlgeek_post2.txt - rw - r -- r -- 1 lorna lorna 10700 2008 - 12 - 20 16 : 08 jam_labels.odt - rw - rw - rw - 1 lorna lorna 6747 2008 - 12 - 25 21 : 35 jam_labels.pdf - rw - r -- r -- 1 lorna lorna 316 2009 - 03 - 19 19 : 28 libmemcache_install_notes.txt - rw - r -- r -- 1 lorna lorna 189 2009 - 02 - 08 16 : 02 linux - fu_geekup.txt - rw - r -- r -- 1 lorna lorna 33275 2008 - 12 - 04 11 : 37 memcache.odt - rw - r - xr -- 1 lorna users 28205 2008 - 12 - 04 11 : 37 memcache.rtf drwxr - xr - x 2 lorna lorna 4096 2009 - 04 - 24 09 : 37 netball - rw - r -- r -- 1 lorna lorna 940 2008 - 12 - 09 09 : 43 tek_instructions.txt - rw - r -- r -- 1 lorna lorna 461 2008 - 11 - 28 22 : 49 using_the_community.txt
  • 10. ls -t for list by time -r for sort in reverse order lorna@taygete:~/Documents$ ls - lrt total 128 - rw - r -- r -- 1 lorna lorna 461 2008 - 11 - 28 22 : 49 using_the_community.txt - rw - r -- r -- 1 lorna lorna 33275 2008 - 12 - 04 11 : 37 memcache.odt - rw - r - xr -- 1 lorna users 28205 2008 - 12 - 04 11 : 37 memcache.rtf - rw - r -- r -- 1 lorna lorna 16790 2008 - 12 - 04 22 : 54 advent_web_services.rtf - rw - r -- r -- 1 lorna lorna 940 2008 - 12 - 09 09 : 43 tek_instructions.txt - rw - r -- r -- 1 lorna lorna 1263 2008 - 12 - 10 12 : 16 girlgeek_post2.txt - rw - r -- r -- 1 lorna lorna 10700 2008 - 12 - 20 16 : 08 jam_labels.odt - rw - rw - rw - 1 lorna lorna 6747 2008 - 12 - 25 21 : 35 jam_labels.pdf - rw - r -- r -- 1 lorna lorna 189 2009 - 02 - 08 16 : 02 linux - fu_geekup.txt - rw - r -- r -- 1 lorna lorna 316 2009 - 03 - 19 19 : 28 libmemcache_install_notes.txt drwxr - xr - x 2 lorna lorna 4096 2009 - 04 - 24 09 : 37 netball
  • 11. ls ls <path> to list contents of a different directory
  • 12. cd Change Directory cd <dir> to enter a subdir cd .. to go up a level lorna@taygete:~$ cd /etc lorna@taygete:/etc$ cd cron.d lorna@taygete:/etc/cron.d$ lorna@taygete:/etc/cron.d$ cd .. lorna@taygete:/etc$
  • 13. cd cd ~ to go home cd - to go back to where you came from lorna@taygete:/etc$ cd ~ lorna@taygete:~$ pwd /home/lorna lorna@taygete:~$ lorna@taygete:~$ cd - lorna@taygete:/etc$ pwd /etc
  • 15. touch creates an empty file with current timestamp no feedback (this is *nix) lorna@taygete:~/talks/temp$ touch unicorns.txt lorna@taygete:~/talks/temp$ ls - lA total 0 - rw - r -- r -- 1 lorna lorna 0 2009 - 04 - 24 09 : 50 unicorns.txt
  • 16. cat outputs a file to your terminal cat <file> lorna@taygete:~/talks$ cat orange.txt Oranges are not the only fruit ( name of a book ) lorna@taygete:~/talks$
  • 17. less/more pager for viewing longer content more <file> less <file> use less – it really is more in this case
  • 18. stdin/stdout stdin &quot;standard in&quot; – input to a program, usually command line arguments stdout &quot;standard out&quot; – output, usually to your screen
  • 20. pipe &quot;chaining&quot; operator output of one program pushed along the pipe to the input of the next
  • 21. pipe cat orange.txt index.php | more lorna@taygete:~/talks$ cat orange.txt index.php | more Oranges are not the only fruit ( name of a book ) < ?php class Response { public function output () { header ( 'Content-type: text/xml' ); echo '<?xml version=&quot;1.0&quot;?>' ; echo &quot; \n &quot; ; } } -- More --
  • 22. file redirection operators a.k.a. &quot;pointy brackets&quot; < and > > directs stdout to the named file >> appends to the file rather than truncating it before outputting
  • 23. file redirection operators lorna@taygete:~/talks$ mysqldump -- compact - u root - p test Enter password : SET @saved_cs_client = @@character_set_client ; SET character_set_client = utf8 ; CREATE TABLE `users` ( `user_id` int ( 11 ) NOT NULL auto_increment , `name` varchar ( 20 ) default NULL , PRIMARY KEY ( `user_id` ) ) ENGINE = MyISAM AUTO_INCREMENT = 2 DEFAULT CHARSET = latin1 ; SET character_set_client = @saved_cs_client ; INSERT INTO `users` VALUES ( 1 , 'lornajane' );
  • 24. file redirection operators lorna@taygete:~/talks$ mysqldump -- compact - u root - p test > test .sql Enter password : [email_address] :~/talks$ lorna@taygete:~/talks$ mysqldump -- compact - u root - p test | gzip > test .sql.gz Enter password : [email_address] :~/talks$
  • 25. file redirection operators < directs the contents of the file to stdin lorna@taygete:~/talks$ mysql - u root - p test < test .sql Enter password : lorna@taygete:~/talks$
  • 27. telnet not now used much for server access useful for direct port access telnet <host> <port>
  • 28. ssh Secure SHell prompts for password, you arrive at command prompt
  • 29. scp secure copy copies files over a one-off ssh connection if you have ssh access, this is available scp <source> <target> source and/or target can be remote paths
  • 30. scp [email_address] :~$ scp cherries.jpg [email protected]:fruit.jpg [email protected]'s password: cherries.jpg 100% 162KB 162.3KB/s 00:00
  • 31. scp lorna@taygete:~$ scp cherries.jpg [email protected]: [email protected]'s password: cherries.jpg 100% 162KB 162.3KB/s 00:00
  • 32. scp lorna@taygete:~$ scp -r talks [email protected]:talks/ [email protected]'s password: thing.jpg 100% 162KB 162.3KB/s 00:00 credits.txt 100% 68 0.1KB/s 00:00 index.php 100% 167 0.2KB/s 00:00 cherries.jpg 100% 162KB 162.3KB/s 00:00 orange.txt 100% 44 0.0KB/s 00:00 misc.php 100% 59 0.1KB/s 00:00 long_file.txt 100% 2383 2.3KB/s 00:00 what.jpg 100% 162KB 162.3KB/s 00:00
  • 33. sftp SSH File Transfer Protocol similar to FTP many FTP clients handle SFTP more secure easy to set up, part of SSH server
  • 35. Permissions 10 characters of information see in the output of ls lorna@taygete:~/Documents$ ls - la total 136 drwxr - xr - x 3 lorna lorna 4096 2009 - 04 - 24 09 : 37 . drwxr - xr - x 66 lorna lorna 4096 2009 - 04 - 23 17 : 33 .. - rw - r -- r -- 1 lorna lorna 16790 2008 - 12 - 04 22 : 54 advent_web_services.rtf - rw - r -- r -- 1 lorna lorna 1263 2008 - 12 - 10 12 : 16 girlgeek_post2.txt - rw - r -- r -- 1 lorna lorna 10700 2008 - 12 - 20 16 : 08 jam_labels.odt - rw - rw - rw - 1 lorna lorna 6747 2008 - 12 - 25 21 : 35 jam_labels.pdf - rw - r -- r -- 1 lorna lorna 316 2009 - 03 - 19 19 : 28 libmemcache_install_notes.txt - rw - r -- r -- 1 lorna lorna 189 2009 - 02 - 08 16 : 02 linux - fu_geekup.txt - rw - r -- r -- 1 lorna lorna 33275 2008 - 12 - 04 11 : 37 memcache.odt - rw - r - xr -- 1 lorna users 28205 2008 - 12 - 04 11 : 37 memcache.rtf drwxr - xr - x 2 lorna lorna 4096 2009 - 04 - 24 09 : 37 netball - rw - r -- r -- 1 lorna lorna 940 2008 - 12 - 09 09 : 43 tek_instructions.txt - rw - r -- r -- 1 lorna lorna 461 2008 - 11 - 28 22 : 49 using_the_community.txt
  • 38. chmod change permissions chmod <class><operator><mode> <file> class: u,g,o,a (user, group, other, all) operator: +, -, = mode: r,w,x, or any combination
  • 39. chmod add execute permission for group lorna@taygete:~/Documents$ chmod g + rx memcache.rtf lorna@taygete:~/Documents$ ls - lA total 132 - rw - r -- r -- 1 lorna lorna 16790 2008 - 12 - 04 22 : 54 advent_web_services.rtf lrwxrwxrwx 1 lorna lorna 22 2009 - 03 - 16 12 : 04 downloads -> / home / lorna / downloads / - rw - r -- r -- 1 lorna lorna 1263 2008 - 12 - 10 12 : 16 girlgeek_post2.txt - rw - r -- r -- 1 lorna lorna 10700 2008 - 12 - 20 16 : 08 jam_labels.odt - rw - rw - rw - 1 lorna lorna 6747 2008 - 12 - 25 21 : 35 jam_labels.pdf - rw - r -- r -- 1 lorna lorna 189 2009 - 02 - 08 16 : 02 linux - fu_geekup.txt - rw - r -- r -- 1 lorna lorna 33275 2008 - 12 - 04 11 : 37 memcache.odt - rw - r - x r -- 1 lorna lorna 28205 2008 - 12 - 04 11 : 37 memcache.rtf - rw - r -- r -- 1 lorna lorna 9939 2009 - 03 - 09 15 : 23 netball_cancellation.pdf - rw - r -- r -- 1 lorna lorna 940 2008 - 12 - 09 09 : 43 tek_instructions.txt - rw - r -- r -- 1 lorna lorna 461 2008 - 11 - 28 22 : 49 using_the_community.txt
  • 40. chown chown lorna:users memcache.rtf lorna@taygete:~/Documents$ chown lorna : users memcache.rtf lorna@taygete:~/Documents$ ls - lA total 132 - rw - r -- r -- 1 lorna lorna 16790 2008 - 12 - 04 22 : 54 advent_web_services.rtf lrwxrwxrwx 1 lorna lorna 22 2009 - 03 - 16 12 : 04 downloads -> / home / lorna / downloads / - rw - r -- r -- 1 lorna lorna 1263 2008 - 12 - 10 12 : 16 girlgeek_post2.txt - rw - r -- r -- 1 lorna lorna 10700 2008 - 12 - 20 16 : 08 jam_labels.odt - rw - rw - rw - 1 lorna lorna 6747 2008 - 12 - 25 21 : 35 jam_labels.pdf - rw - r -- r -- 1 lorna lorna 189 2009 - 02 - 08 16 : 02 linux - fu_geekup.txt - rw - r -- r -- 1 lorna lorna 33275 2008 - 12 - 04 11 : 37 memcache.odt - rw - r - xr -- 1 lorna users 28205 2008 - 12 - 04 11 : 37 memcache.rtf - rw - r -- r -- 1 lorna lorna 9939 2009 - 03 - 09 15 : 23 netball_cancellation.pdf - rw - r -- r -- 1 lorna lorna 940 2008 - 12 - 09 09 : 43 tek_instructions.txt - rw - r -- r -- 1 lorna lorna 461 2008 - 11 - 28 22 : 49 using_the_community.txt
  • 41. root superuser don't log in as root log in, then su (substitute user) may need root privileges, to perform certain actions
  • 42. sudo avoids using root account gives root for a single command
  • 45. cURL tool for talking to the world over http lorna@taygete: ~$ curl http://localhost Example Home Page Array ( )
  • 46. cURL < ?php echo &quot;Example Home Page \n\n &quot; ; print_r ( $_POST ); ? >
  • 47. cURL checking actual browser response headers/content curl -I http://localhost (that's a capital i) lorna@taygete:~$ curl -I http://localhost HTTP/1.1 200 OK Date: Mon, 16 Mar 2009 12:35:10 GMT Server: Apache/2.2.9 (Ubuntu) PHP/5.2.6-2ubuntu4.1 with Suhosin-Patch X-Powered-By: PHP/5.2.6-2ubuntu4.1 Vary: Accept-Encoding Content-Type: text/html
  • 48. cURL posting variables lorna@taygete:~$ curl -X POST http://localhost -d fruit=apple -d user=lornajane Example Home Page Array ( [fruit] => apple [user] => lornajane )
  • 49. wget web downloader lorna@taygete:~$ wget http :// www.splitbrain.org / _media / projects / dokuwiki / dokuwiki - 2009 - 02 - 14 .tgz -- 2009 - 04 - 24 10 : 40 : 16 -- http :// www.splitbrain.org / _media / projects / dokuwiki / dokuwiki - 2009 - 02 - 14 .tgz Resolving www.splitbrain.org... 78.46.97.149 Connecting to www.splitbrain.org | 78.46.97.149 |: 80 ... connected. HTTP request sent , awaiting response... 200 OK Length : 1770454 ( 1.7 M ) [ application / octet - stream ] Saving to : `dokuwiki-2009-02-14.tgz' 100%[=================================>] 1,770,454 1.39M/s in 1.2s 2009-04-24 10:40:18 (1.39 MB/s) - ` dokuwiki - 2009 - 02 - 14 .tgz ' saved [1770454/1770454]
  • 50. wget to mirror a site wget -m http://lornajane.net to resume large downloads wget -c http://localhost
  • 51. grep finding things (Global/Regular Expression/Print) grep [options] [pattern] [target]
  • 52. grep discover functions lorna@rivendell:~/svndir/snapshot/lib$ grep function Service.class.php * This class holds the functionality of the out - ward facing part of * This function is called to add a new request to the queue. public function requestShot ( $accountID , $requestURL , $returnURL = NULL , $height = 75 , $width = 100 ) { function getShotStatus ( $accountID , $transactionID ) { function getAccountStatus ( $accountID ) { function getShotList ( $accountID , $status = NULL ) { function getShot ( $accountID , $transactionID ) {
  • 53. grep look for class names in source tree lorna@rivendell:~/svndir/phergie$ grep - R '^class ' * | grep - v .svn | more Phergie / Event / Response.php : class Phergie_Event_Response Phergie / Event / Request.php : class Phergie_Event_Request Phergie / Driver / Streams.php : class Phergie_Driver_Streams extends Phergie_Driver_A bstract Phergie / Plugin / Drink.php : class Phergie_Plugin_Drink extends Phergie_Plugin_Abstr act_Command Phergie / Plugin / ModuleList.php : class Phergie_Plugin_ModuleList extends Phergie_Pl ugin_Abstract_Command Phergie / Plugin / Debug.php : class Phergie_Plugin_Debug extends Phergie_Plugin_Abstr act_Command Phergie / Plugin / Twitter / twitter.class.php : class Twitter { Phergie / Plugin / Twitter / laconica.class.php : class Twitter_Laconica extends Twitter {
  • 54. grep Recursive and case insensitive lorna@rivendell:~/svndir/snapshot$ grep - Ri 'select \* from' * lib / Model / Miscinfo.class.php : $row = $dbh -> read ( 'select * from misc_info where info_key = ' . $dbh -> quote ( $key ) . ' limit 1' ); lib / Model / Transaction.class.php : $row = $dbh -> read ( 'select * from transactions where transaction_id = ' . $dbh -> quote ( $transaction_id ) . ' limit 1' ); lib / Model / Transaction.class.php : $row = $dbh -> read ( 'select * from transactions where transaction_id = ' . $dbh -> quote ( $transaction_id ) . ' and account_id = ' . $dbh -> quote ( $account_id ) . ' limit 1' ); lib / Model / Transaction.class.php : $sql = 'select * from transactions where account_id = ' . $dbh -> quote ( $account_id ); lib / Model / Transaction.class.php : $sql = 'select * from transactions where status = ' . $dbh -> quote ( $status ); lib / Model / File.class.php : $row = $dbh -> read ( 'select * from files where id = ' . $dbh -> quote ( $id ) . ' limit 1' ); lib / Model / Account.class.php : $row = $dbh -> read ( 'select * from accounts where account_id = ' . $dbh -> quote ( $account_id ) . ' limit 1' ); lib / DBL / Database.class.php : * $rows = $db -> read ( 'select * from aTable' );
  • 55. find powerful &quot;grep&quot; using file metadata rather than content can search by name find . -name .htaccess also by modified time, by size, etc ...
  • 56. diff shows differences between files, doesn't show you what is the same lorna@taygete:~/talks$ diff misc.php.old misc.php 3 c3 < $link = mysql_connect ( 'localhost' , 'app_user' , 'yorkshirepud' ); --- > $link = mysql_connect ( 'localhost' , 'lorna' , 'candyfloss' );
  • 57. diff Unified diff format lorna@taygete:~/talks$ diff - u misc.php.old misc.php --- misc.php.old 2009 - 04 - 24 10 : 56 : 08.000000000 + 0100 +++ misc.php 2009 - 04 - 24 10 : 56 : 51.000000000 + 0100 @@ - 1 , 6 + 1 , 6 @@ < ?php - $link = mysql_connect ( 'localhost' , 'app_user' , 'yorkshirepud' ); + $link = mysql_connect ( 'localhost' , 'lorna' , 'candyfloss' ); $rhyme = &quot;Mary Had A Little Lamb&quot; ; echo $rhyme ;
  • 58. grep lorna@taygete:~/talks$ diff - u misc.php.old misc.php > patch .txt
  • 59. patch patch applies diff files
  • 60. patch lorna@taygete:~/talks$ cat example.php < ?php $link = mysql_connect ( 'localhost' , 'app_user' , 'yorkshirepud' ); ? > lorna@taygete:~/talks$ patch example.php < patch .txt patching file example.php lorna@taygete:~/talks$ cat example.php < ?php $link = mysql_connect ( 'localhost' , 'lorna' , 'candyfloss' ); ? > lorna@taygete:~/talks$
  • 61. tar Tape ARchive for gluing together files, for transfer lorna@taygete:~/talks$ ls cherries.jpg example.php long_file.txt orange.txt temp test .sql.gz what.jpg credits.txt index.php misc.php patch .txt test .sql thing.jpg lorna@taygete:~/talks$ tar - zcf talks.tgz * lorna@taygete:~/talks$ ls cherries.jpg example.php long_file.txt orange.txt talks.tgz test .sql thing.jpg credits.txt index.php misc.php patch .txt temp test .sql.gz what.jpg lorna@taygete:~/talks$
  • 62. nano widely available lightweight editor designed as a non-pine equivalent to pico (PIne COmposer) instructions are on-screen
  • 63. nano
  • 64. wc word count for counting lines lorna@taygete:~/tek09$ wc - l linux - fu_content.txt 283 linux - fu_content.txt
  • 65. tail looking at the end of a file tail -n50 access.log tail -f access.log
  • 66. screen opening several sessions in one window can detach, log out, come back
  • 67. screen protects against connection dropping saves logging into the same server many times use .screenrc for config
  • 69. man man pages are the manual man <command> name synopsis (example arguments) description (all the switches) examples, if you are lucky some tools use &quot;info&quot; instead
  • 70. man lorna@taygete:~$ man pwd PWD(1) User Commands PWD(1) NAME pwd - print name of current/working directory SYNOPSIS pwd [OPTION] DESCRIPTION Print the full filename of the current working directory. --help display this help and exit --version output version information and exit NOTE: your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shellâÀÙs documentation for details about the options it supports.
  • 73. log files /var/log /var/log/apache2/access.log
  • 74. apache config ubuntu, debian /etc/apache2/sites-available redhat /etc/httpd/httpd.conf
  • 75. /usr/local for stuff that you've installed/added
  • 77. ps Process Status shows what is running, pid, user
  • 78. ps ps ax ps aux use with grep 6761 ? Ss 0 : 00 / usr / sbin / apache2 - k start 8009 ? S 0 : 00 / usr / sbin / apache2 - k start 8010 ? S 0 : 00 / usr / sbin / apache2 - k start 8011 ? S 0 : 00 / usr / sbin / apache2 - k start 8012 ? S 0 : 00 / usr / sbin / apache2 - k start 8013 ? S 0 : 00 / usr / sbin / apache2 - k start 24209 pts / 4 S + 0 : 00 grep apache
  • 79. top show current top processes sort by zxc z for colour x for column highlight c to show full command < > to change which column we're sorting by ** q to quit
  • 80. check apache is running use grep - look for &quot;apache&quot; or &quot;httpd&quot; if not: apache2ctl restart service httpd restart
  • 81. check mysql is running use grep if not: /etc/init.d/mysql start
  • 83. mkdir mkdir make directory lorna@taygete:~/temp$ ls lorna@taygete:~/temp$ mkdir examples lorna@taygete:~/temp$ ls examples
  • 84. mv and cp move and copy files lorna@taygete:~/temp$ ls cherries.jpg lorna@taygete:~/temp$ mv cherries.jpg oranges.jpg lorna@taygete:~/temp$ ls oranges.jpg lorna@taygete:~/temp$ cp oranges.jpg cherries.jpg lorna@taygete:~/temp$ ls cherries.jpg oranges.jpg lorna@taygete:~/temp$ cp /etc/php5/cli/php.ini php-cli.ini lorna@taygete:~/temp$ ls cherries.jpg oranges.jpg php-cli.ini
  • 85. rm remove files/directories cherries.jpg examples oranges.jpg lorna@taygete:~/temp$ rm oranges.jpg lorna@taygete:~/temp$ touch examples/dewdrops.txt lorna@taygete:~/temp$ rm examples/ rm: cannot remove `examples/': Is a directory lorna@taygete:~/temp$ rmdir examples rmdir: failed to remove `examples': Directory not empty lorna@taygete:~/temp$ rm -rf examples lorna@taygete:~/temp$ ls cherries.jpg
  • 86. ln link - creates a symlink or alias between directories lorna@taygete:~/Documents$ ln - s / home / lorna / downloads temp lorna@taygete:~/Documents$ cd temp lorna@taygete:~/Documents/temp$ pwd / home / lorna / Documents / temp lorna@taygete:~/Documents/temp$ ls FlickrDownload - 0.4 highlight - 2.7 . tar .gz libmemcached - 0.26 . tar .gz ZendFramework - 1.7.6 - minimal FlickrDownload - 0.4 . tar .gz key.txt lorna_andean_explorer_large.jpg ZendFramework - 1.7.6 - minimal. tar .gz highlight - 2.7 libmemcached - 0.26 sun - presenter - screen - linuxintel.oxt lorna@taygete:~/Documents/temp$
  • 87. cURL great for services flickr example curl -X POST http://api.flickr.com/services/rest/ -d method=flickr.photos.getRecent -d api_key=853b05c9... -d per_page=5
  • 88. cURL < ?xml version = &quot;1.0&quot; encoding = &quot;utf-8&quot; ? > < rsp stat = &quot;ok&quot; > < photos page = &quot;1&quot; pages = &quot;200&quot; perpage = &quot;5&quot; total = &quot;1000&quot; > < photo id = &quot;3359907386&quot; owner = &quot;24259661@N03&quot; secret = &quot;abcd3374c4&quot; server = &quot;3593&quot; farm = &quot;4&quot; title = &quot;Sandford 2009&quot; ispublic = &quot;1&quot; isfriend = &quot;0&quot; isfamily = &quot;0&quot; /> < photo id = &quot;3359907364&quot; owner = &quot;12383345@N06&quot; secret = &quot;0e5637d188&quot; server = &quot;3607&quot; farm = &quot;4&quot; title = &quot;DSC00159&quot; ispublic = &quot;1&quot; isfriend = &quot;0&quot; isfamily = &quot;0&quot; /> < photo id = &quot;3359907350&quot; owner = &quot;84656095@N00&quot; secret = &quot;3ca7085d12&quot; server = &quot;3461&quot; farm = &quot;4&quot; title = &quot;green&quot; ispublic = &quot;1&quot; isfriend = &quot;0&quot; isfamily = &quot;0&quot; /> < photo id = &quot;3359088077&quot; owner = &quot;20633056@N04&quot; secret = &quot;3d03f2b935&quot; server = &quot;3654&quot; farm = &quot;4&quot; title = &quot;03c&quot; ispublic = &quot;1&quot; isfriend = &quot;0&quot; isfamily = &quot;0&quot; /> < photo id = &quot;3359088059&quot; owner = &quot;33581202@N07&quot; secret = &quot;efa70c71f0&quot; server = &quot;3607&quot; farm = &quot;4&quot; title = &quot;DSCF4768&quot; ispublic = &quot;1&quot; isfriend = &quot;0&quot; isfamily = &quot;0&quot; /> </ photos > </ rsp >