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