Linux-Fu for PHP Developers

Embed Size (px)

DESCRIPTION

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

Citation preview

  • 1. Linux-Fu for PHP Developers

2. About MeLorna 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. Outlinebasic commands first utilities access permissions useful utilities 5. Linux Philosophy 6. Basic Commands 7. pwdPrint Working Directory - shows you where you arelorna@taygete:~/Documents$ pwd /home/lorna/Documents 8. lslist files -a for all including hidden fileslorna@taygete:~/Documents$ ls -a.jam_labels.pdfnetball.. libmemcache_install_notes.txt tek_instructionadvent_web_services.rtf linux-fu_geekup.txtusing_the_commugirlgeek_post2.txt memcache.odtjam_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-2317:33 .. -rw-r--r-- 1 lorna lorna 16790 2008-12-0422: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-2016:08 jam_labels.odt -rw-rw-rw- 1 lorna lorna 6747 2008-12-25 21:35 jam_labels.pdf -rw-r--r-- 1 lorna lorna316 2009-03-19 19:28 libmemcache_install_no -rw-r--r-- 1 lorna lorna189 2009-02-08 16:02 linux-fu_geekup.txt -rw-r--r-- 1 lorna lorna 33275 2008-12-0411:37 memcache.odt -rw-r-xr-- 1 lorna users 28205 2008-12-0411:37 memcache.rtf drwxr-xr-x 2 lorna lorna 4096 2009-04-24 09:37 netball -rw-r--r-- 1 lorna lorna940 2008-12-09 09:43 tek_instructions.txt -rw-r--r-- 1 lorna lorna461 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-1012: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-2521: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-2409:37 netball 11. lsls to list contents of a different directory 12. cdChange Directory cd

  • 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. cdcd ~ 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. touchcreates 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. catoutputs a file to your terminal cat lorna@taygete:~/talks$ cat orange.txt Oranges are not the only fruit (name of a book) lorna@taygete:~/talks$ 17. less/morepager for viewing longer content more less use less it really is more in this case 18. stdin/stdoutstdin quot;standard inquot; input to a program, usually command line arguments stdout quot;standard outquot; output, usually to your screen 19. stdin/stdoutphoto credit: ppdigital 20. pipequot;chainingquot; operator output of one program pushed along the pipe to the input of the next 21. pipecat orange.txt index.php | more lorna@taygete:~/talks$ cat orange.txt index.php | more Oranges are not the only fruit (name of a book) > directs stdout to the named file>> appends to the file rather than truncating it before outputting 23. file redirection operatorslorna@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 operatorslorna@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 stdinlorna@taygete:~/talks$ mysql -u root -p test < test.sqlEnter password:lorna@taygete:~/talks$ 26. Access 27. telnetnot now used much for server access useful for direct port access telnet 28. sshSecure SHell prompts for password, you arrive at command prompt 29. scpsecure copy copies files over a one-off ssh connection if you have ssh access, this is available scp source and/or target can be remote paths 30. scplorna@taygete:~$ scp cherries.jpg [email protected]:fruit.jpg [email protected]'s password: cherries.jpg 100% 162KB 162.3KB/s00:00 31. scplorna@taygete:~$ scp cherries.jpg [email protected]: [email protected]'s password: cherries.jpg 100% 162KB 162.3KB/s00:00 32. scplorna@taygete:~$ scp -r talks [email protected]:talks/ [email protected]'s password: thing.jpg100% 162KB 162.3KB/s00:00 credits.txt100% 68 0.1KB/s 00:00 index.php100% 1670.2KB/s 00:00 cherries.jpg 100% 162KB 162.3KB/s00:00 orange.txt 100% 44 0.0KB/s 00:00 misc.php 100% 59 0.1KB/s 00:00 long_file.txt100% 2383 2.3KB/s 00:00 what.jpg 100% 162KB 162.3KB/s00:00 33. sftpSSH File Transfer Protocol similar to FTP many FTP clients handle SFTP more secure easy to set up, part of SSH server 34. Permissions 35. Permissions10 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-2317:33 .. -rw-r--r-- 1 lorna lorna 16790 2008-12-0422: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-2016:08 jam_labels.odt -rw-rw-rw- 1 lorna lorna 6747 2008-12-25 21:35 jam_labels.pdf -rw-r--r-- 1 lorna lorna316 2009-03-19 19:28 libmemcache_install_no -rw-r--r-- 1 lorna lorna189 2009-02-08 16:02 linux-fu_geekup.txt -rw-r--r-- 1 lorna lorna 33275 2008-12-0411:37 memcache.odt -rw-r-xr-- 1 lorna users 28205 2008-12-0411:37 memcache.rtf drwxr-xr-x 2 lorna lorna 4096 2009-04-24 09:37 netball -rw-r--r-- 1 lorna lorna940 2008-12-09 09:43 tek_instructions.txt -rw-r--r-- 1 lorna lorna461 2008-11-28 22:49 using_the_community.tx 36. Permissions 37. Permissions 38. chmodchange permissions chmod class: u,g,o,a (user, group, other, all) operator: +, -, = mode: r,w,x, or any combination 39. chmodadd 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 lorna22 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. chownchown 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 lorna22 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. rootsuperuser don't log in as root log in, then su (substitute user) may need root privileges, to perform certain actions 42. sudoavoids using root account gives root for a single command 43. sudohttp://xkcd.com/149/ 44. Useful Utilities 45. cURLtool for talking to the world over http lorna@taygete:~$ curl http://localhost Example Home PageArray ( ) 46. cURL 47. cURLchecking 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. cURLposting variables lorna@taygete:~$ curl -X POST http://localhost -d fruit=apple -d user=lornajane Example Home PageArray ( [fruit] => apple [user] => lornajane ) 49. wgetweb 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.2s2009-04-24 10:40:18 (1.39 MB/s) - `dokuwiki-2009-02-14.tgz' saved [1770 50. wgetto mirror a site wget -m http://lornajane.net to resume large downloads wget -c http://localhost 51. grepfinding things (Global/Regular Expression/Print) grep [options] [pattern] [target] 52. grepdiscover 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. greplook 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. findpowerful quot;grepquot; using file metadata rather than content can search by namefind . -name .htaccess also by modified time, by size, etc ... 56. diffshows 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 @@ lorna@taygete:~/talks$ patch example.php < patch.txt patching file example.php lorna@taygete:~/talks$ cat example.php lorna@taygete:~/talks$ 61. tarTape ARchive for gluing together files, for transferlorna@taygete:~/talks$ lscherries.jpg example.php long_file.txt orange.txt temptest.scredits.txt index.phpmisc.php patch.txt test.sqlthing.lorna@taygete:~/talks$ tar -zcf talks.tgz *lorna@taygete:~/talks$ lscherries.jpg example.php long_file.txt orange.txt talks.tgz test.credits.txt index.phpmisc.phppatch.txttemptest.lorna@taygete:~/talks$ 62. nanowidely available lightweight editor designed as a non-pine equivalent to pico (PIne COmposer) instructions are on-screen 63. nano 64. wcword count for counting lineslorna@taygete:~/tek09$ wc -l linux-fu_content.txt 283 linux-fu_content.txt 65. taillooking at the end of a file tail -n50 access.log tail -f access.log 66. screenopening several sessions in one window can detach, log out, come back 67. screenprotects against connection dropping saves logging into the same server many times use .screenrc for config 68. screen 69. manman pages are the manual man 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 CommandsNAMEpwd - print name of current/working directorySYNOPSISpwd [OPTION]DESCRIPTIONPrint 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 usuallyPlease refer to your shells 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 configubuntu, debian /etc/apache2/sites-available redhat /etc/httpd/httpd.conf 75. /usr/localfor stuff that you've installed/added 76. Processes 77. psProcess Status shows what is running, pid, user 78. psps ax ps aux use with grep6761 ? Ss 0:00 /usr/sbin/apache2 -k start8009 ? S0:00 /usr/sbin/apache2 -k start8010 ? S0:00 /usr/sbin/apache2 -k start8011 ? S0:00 /usr/sbin/apache2 -k start8012 ? S0:00 /usr/sbin/apache2 -k start8013 ? S0:00 /usr/sbin/apache2 -k start 24209 pts/4 S+ 0:00 grep apache 79. topshow 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 runninguse grep - look for quot;apachequot; or quot;httpdquot; if not: apache2ctl restart service httpd restart 81. check mysql is runninguse grep if not: /etc/init.d/mysql start 82. Basic Commands 83. mkdirmkdir make directorylorna@taygete:~/temp$ ls lorna@taygete:~/temp$ mkdir examples lorna@taygete:~/temp$ ls examples 84. mv and cpmove 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. rmremove 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. lnlink - creates a symlink or alias betweendirectoriestemp mcached-0.26.tar.gzZendFramework-1.7.6-minimal _andean_explorer_large.jpg ZendFramework-1.7.6-minimal.tar.gz resenter-screen-linuxintel.oxt 87. cURLgreat 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