Linux-Fu for PHP Developers
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Linux-Fu for PHP Developers

  • 9,316 views
Uploaded on

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • 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
No Downloads

Views

Total Views
9,316
On Slideshare
8,195
From Embeds
1,121
Number of Embeds
6

Actions

Shares
Downloads
262
Comments
1
Likes
21

Embeds 1,121

http://www.lornajane.net 1,101
http://www.slideshare.net 10
http://a0.twimg.com 7
http://beta.lornajane.net 1
http://translate.googleusercontent.com 1
https://www.linkedin.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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)
  • 3. Linux-Fu
  • 4. Outline basic commands first utilities access permissions useful utilities
  • 5. Linux Philosophy
  • 6. Basic Commands
  • 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_instruction advent_web_services.rtf linux-fu_geekup.txt using_the_commu 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.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
  • 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_not 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 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$
  • 13. 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
  • 14. First Utilities
  • 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 inquot; – input to a program, usually command line arguments stdout quot;standard outquot; – output, usually to your screen
  • 19. stdin/stdout photo credit: ppdigital
  • 20. pipe quot;chainingquot; 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.0quot;?>'; echo quot;nquot;; } } --More--
  • 22. 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
  • 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: lorna@taygete:~/talks$ lorna@taygete:~/talks$ mysqldump --compact -u root -p test | gzip > test.sql.gz Enter password: lorna@taygete:~/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$
  • 26. Access
  • 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 lorna@taygete:~$ scp cherries.jpg lorna@rivendell.local:fruit.jpg lorna@rivendell.local's password: cherries.jpg 100% 162KB 162.3KB/s 00:00
  • 31. scp lorna@taygete:~$ scp cherries.jpg lorna@rivendell.local: lorna@rivendell.local's password: cherries.jpg 100% 162KB 162.3KB/s 00:00
  • 32. 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
  • 33. sftp SSH File Transfer Protocol similar to FTP many FTP clients handle SFTP more secure easy to set up, part of SSH server
  • 34. Permissions
  • 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.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
  • 36. Permissions
  • 37. Permissions
  • 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.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
  • 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.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
  • 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
  • 43. sudo http://xkcd.com/149/
  • 44. Useful Utilities
  • 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 Pagennquot;; print_r($_POST); ?>
  • 47. 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)
  • 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. --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
  • 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 = N $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 | 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 {
  • 54. 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')
  • 55. find powerful quot;grepquot; 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 3c3 < $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 Lambquot;; 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.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$
  • 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
  • 68. screen
  • 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;infoquot; instead
  • 70. 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
  • 71. Questions? http://joind.in/201
  • 72. File Locations
  • 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
  • 76. Processes
  • 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;apachequot; or quot;httpdquot; if not: apache2ctl restart service httpd restart
  • 81. check mysql is running use grep if not: /etc/init.d/mysql start
  • 82. Basic Commands
  • 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 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
  • 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.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>