• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Linux-Fu for PHP Developers
 

Linux-Fu for PHP Developers

on

  • 8,996 views

A tour of the main tools I use from the linux command line in my line of work as a PHP developer

A tour of the main tools I use from the linux command line in my line of work as a PHP developer

Statistics

Views

Total Views
8,996
Views on SlideShare
7,877
Embed Views
1,119

Actions

Likes
21
Downloads
259
Comments
1

5 Embeds 1,119

http://www.lornajane.net 1100
http://www.slideshare.net 10
http://a0.twimg.com 7
http://beta.lornajane.net 1
http://translate.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • whats nice for me having looked at this is that I know all these commands so as a php developer maybe I'm doing something right :-D
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Linux-Fu for PHP Developers Linux-Fu for PHP Developers Presentation Transcript

    • 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_instruction advent_web_services.rtf linux-fu_geekup.txt using_the_commu 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.rt -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_no -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.tx
    • 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_not 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 lorna@taygete:~$ cd /etc lorna@taygete:/etc$ cd cron.d lorna@taygete:/etc/cron.d$ cd .. to go up a level lorna@taygete:/etc/cron.d$ cd .. lorna@taygete:/etc$
    • cd cd ~ to go home lorna@taygete:/etc$ cd ~ lorna@taygete:~$ pwd /home/lorna lorna@taygete:~$ cd - to go back to where you came from 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 inquot; – input to a program, usually command line arguments stdout quot;standard outquot; – output, usually to your screen
    • stdin/stdout photo credit: ppdigital
    • pipe quot;chainingquot; 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.0quot;?>'; echo quot;nquot;; } } --More--
    • file redirection operators a.k.a. quot;pointy bracketsquot; < 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: lorna@taygete:~/talks$ lorna@taygete:~/talks$ mysqldump --compact -u root -p test | gzip > test.sql.gz Enter password: lorna@taygete:~/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 lorna@taygete:~$ 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.rt -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_no -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.tx
    • 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.rt lrwxrwxrwx 1 lorna lorna 22 2009-03-16 12:04 downloads -> /home/lor -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 lorna 28205 2008-12-04 11:37 memcache.rtf -rw-r--r-- 1 lorna lorna 9939 2009-03-09 15:23 netball_cancellation.p -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.tx
    • 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.rt lrwxrwxrwx 1 lorna lorna 22 2009-03-16 12:04 downloads -> /home/lor -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.p -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.tx
    • 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 Pagennquot;; print_r($_POST); ?>
    • cURL checking actual browser response headers/content curl -I http://localhost 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 (that's a capital i)
    • 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. --2009-04-24 10:40:16-- http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2009-02-14. 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.7M) [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 [1770
    • 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 = N $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 | 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 bstract Phergie/Plugin/Drink.php:class Phergie_Plugin_Drink extends Phergie_Plu act_Command Phergie/Plugin/ModuleList.php:class Phergie_Plugin_ModuleList extends P ugin_Abstract_Command Phergie/Plugin/Debug.php:class Phergie_Plugin_Debug extends Phergie_Plu act_Command Phergie/Plugin/Twitter/twitter.class.php:class Twitter { Phergie/Plugin/Twitter/laconica.class.php:class Twitter_Laconica extend {
    • grep Recursive and case insensitive lorna@rivendell:~/svndir/snapshot$ grep -Ri 'select * from' * lib/Model/Miscinfo.class.php: $row = $dbh->read('select * fro lib/Model/Transaction.class.php: $row = $dbh->read('select * >quote($transaction_id).' limit 1'); lib/Model/Transaction.class.php: $row = $dbh->read('select * >quote($transaction_id).' and account_id = '.$dbh->quote($account_id).' lib/Model/Transaction.class.php: $sql = 'select * from trans lib/Model/Transaction.class.php: $sql = 'select * from trans lib/Model/File.class.php: $row = $dbh->read('select * from fi lib/Model/Account.class.php: $row = $dbh->read('select * fro lib/DBL/Database.class.php: * $rows = $db->read('select * from aTable')
    • find powerful quot;grepquot; 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 3c3 < $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 Lambquot;; 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.s credits.txt index.php misc.php patch.txt test.sql thing. lorna@taygete:~/talks$ tar -zcf talks.tgz * lorna@taygete:~/talks$ ls cherries.jpg example.php long_file.txt orange.txt talks.tgz test. credits.txt index.php misc.php patch.txt temp test. 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;infoquot; instead
    • man lorna@taygete:~$ man pwd PWD(1) User Commands 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 Please refer to your shellâÀÙs documentation for details about t
    • Questions? 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;apachequot; or quot;httpdquot; 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 temp mcached-0.26.tar.gz ZendFramework-1.7.6-minimal _andean_explorer_large.jpg ZendFramework-1.7.6-minimal.tar.gz resenter-screen-linuxintel.oxt
    • 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.0quot; encoding=quot;utf-8quot; ?> <rsp stat=quot;okquot;> <photos page=quot;1quot; pages=quot;200quot; perpage=quot;5quot; total=quot;1000quot;> <photo id=quot;3359907386quot; owner=quot;24259661@N03quot; secret=quot;abcd3374c4quot; server=quot;3593quot; farm=quot;4quot; title=quot;Sandford 2009quot; ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; /> <photo id=quot;3359907364quot; owner=quot;12383345@N06quot; secret=quot;0e5637d188quot; server=quot;3607quot; farm=quot;4quot; title=quot;DSC00159quot; ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; /> <photo id=quot;3359907350quot; owner=quot;84656095@N00quot; secret=quot;3ca7085d12quot; server=quot;3461quot; farm=quot;4quot; title=quot;greenquot; ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; /> <photo id=quot;3359088077quot; owner=quot;20633056@N04quot; secret=quot;3d03f2b935quot; server=quot;3654quot; farm=quot;4quot; title=quot;03cquot; ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; /> <photo id=quot;3359088059quot; owner=quot;33581202@N07quot; secret=quot;efa70c71f0quot; server=quot;3607quot; farm=quot;4quot; title=quot;DSCF4768quot; ispublic=quot;1quot; isfriend=quot;0quot; isfamily=quot;0quot; /> </photos> </rsp>