Learning the command line

1,392 views

Published on

An introduction to the Unix command line with a focus on uses for web developers given at Code for Miami MeetUp in April 2014.

Published in: Software, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,392
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Learning the command line

  1. 1. Learning the Command Line ...the first thing that Apple's hackers had done when they'd got the MacOS up and running--probably even before they'd gotten it up and running--was to re-create the Unix interface, so that they would be able to get some useful work done... -- In the Beginning was the Command Line Neal Stephenson http://www.slideshare.net/aramonc/learning-the-command-line-33146569
  2. 2. Follow along... $>mkdir -p ~/www/wp_site/news && wget http://wordpress.org/latest.zip && unzip latest.zip -d ~/www/wp_site/news Chaining commands with & Make news directory under /var/www/wp_site, then download latest version of WordPress, then extract the contents of the archive to /var/www/wp_site/news
  3. 3. ● Developer at ServerGrove ● All around nerd ● Systems Administrator for 7 years ● @aramonc in all the places About Me
  4. 4. More than 40% of all web servers use *nix Why bother? Debian Ubuntu CentOS/RHEL SmartOS* Servers do not use graphical interfaces *Not really Linux, still Unix based
  5. 5. 30,000 Web Sites Hacked A Day Why bother?
  6. 6. ● Increased speed & flexibility ● Muscle memory ● Large pool of freely available utilities ● *nix Command Line utilities are mostly standard Why bother?
  7. 7. What if I mess up?
  8. 8. Getting to the Command Line Windows Localhost: Cygwin Webhost: SSH via PuTTY OSX, *nix Localhost: Terminal, xterm, etc Webhost: SSH via the above
  9. 9. Navigating Folders = Directory Tree
  10. 10. Where are you right now? $>pwd /Users/adrian_sg/www/wp_site/news Print Working Directory ● /Users/adrian_sg/www/wp_site/news = a path ● / not ● Starts with / (root) = absolute
  11. 11. What’s in here? $>ls index.php wp-includes license.txt wp-links-opml.php readme.html wp-load.php wp-activate.php wp-login.php wp-admin wp-mail.php wp-blog-header.php wp-settings.php wp-comments-post.php wp-signup.php wp-config-sample.php wp-trackback.php LiSt
  12. 12. What’s in here? $>ls -la total 320 drwxr-xr-x 21 adrian_sg wheel 714 Feb 28 22:07 . drwxr-xr-x 3 root wheel 102 Feb 28 21:57 .. -rw-r--r--@ 1 adrian_sg wheel 640 Mar 05 20:14 .htaccess -rw-r--r--@ 1 adrian_sg wheel 418 Sep 24 20:18 index.php -rw-r--r--@ 1 adrian_sg wheel 19929 Jan 18 2013 license.txt -rw-r--r--@ 1 adrian_sg wheel 7185 Jan 13 13:16 readme.html drwxr-xr-x@ 88 adrian_sg wheel 2992 Jan 23 15:17 wp-admin drwxr-xr-x@ 5 adrian_sg wheel 170 Jan 23 15:17 wp-content -rw-r--r--@ 1 adrian_sg wheel 2932 Sep 24 20:18 wp-cron.php LiSt
  13. 13. Moving around... $>cd wp-admin $>pwd ~/www/wp_site/wp-admin $>cd /var/www/wp_site $>pwd ~/www/wp_site $>cd wp-content/themes/twentyfourteen $>pwd ~/www/wp_site/wp-content/themes/twentyfourteen Change Directory
  14. 14. Moving around... $>cd .. $>pwd ~/www/wp_site $>cd ~/ $>pwd /Users/adrian_sg $>cd - $>pwd ~/www/wp_site Change Directory
  15. 15. Where is this thing? $>find . -iname xml* ~/www/wp_site/xmlrpc.php $>find . -mtime 3 Find . (dot) means current directory -mtime in 24 hour increments of modified date
  16. 16. Where is this thing? $>grep theme ./* ./index.php: * wp-blog-header.php...the theme. grep: ./wp-admin: Is a directory ./wp-settings.php:require(ABSPATH.WPINC.'/theme.php'); ./wp-settings.php:do_action( 'setup_theme' ); Globally search a Regular Expression and Print
  17. 17. Where is this thing? $>grep -R theme ./* ./wp-admin/update.php: $parent_file='themes.php'; ./wp-admin/update.php: $submenu_file='themes.php'; ./wp-admin/update.php: $nonce='install-theme_'.$theme; Globally search a Regular Expression and Print
  18. 18. Can I change things? $>ls -l total 320 -rw-r--r--@ 1 adrian_sg wheel 418 Sep 24 20:18 index.php -rw-r--r--@ 1 adrian_sg wheel 19929 Jan 18 2013 license.txt -rw-r--r--@ 1 adrian_sg wheel 7185 Jan 13 13:16 readme.html drwxr-xr-x@ 88 adrian_sg wheel 2992 Jan 23 15:17 wp-admin drwxr-xr-x@ 5 adrian_sg wheel 170 Jan 23 15:17 wp-content -rw-r--r--@ 1 adrian_sg wheel 2932 Sep 24 20:18 wp-cron.php drwxr-xr-x@ 122 adrian_sg wheel 4148 Jan 23 15:17 wp-includes -rw-r--r--@ 1 adrian_sg wheel 2359 Oct 24 18:58 wp-load.php Owners, Groups, & Permissions
  19. 19. Can I change things? Permissions r = Read w = Write x = Execute (run a script or open a directory) Three levels of permissions: Owner, Group, Everyone else
  20. 20. Can I change things? Owner = User ● Sometimes your user ● Sometimes root ● Sometimes www-data (Apache user)
  21. 21. Can I change things? Group ● Permissions for a set of users ● Users have own group ● Most users only belong to own group
  22. 22. Can I change things? Permissions Owner Group EveryoneIs Dir.? rwx r-x r-xd $>ls -l drwxr-xr-x@ 88 adrian_sg wheel 2992 Jan 23 15:17 wp-admin adrian_sg wheel
  23. 23. How do I change this thing? $>mkdir -p useless/stuff $>ls -l -rw-r--r--@ 1 adrian_sg wheel 418 Sep 24 20:18 index.php -rw-r--r--@ 1 adrian_sg wheel 19929 Jan 18 2013 license.txt -rw-r--r--@ 1 adrian_sg wheel 7185 Jan 13 13:16 readme.html drwxr-xr-x 2 adrian_sg wheel 68 Mar 3 22:04 useless -rw-r--r--@ 1 adrian_sg wheel 4892 Oct 4 10:12 wp-activate.php MaKe DIRectory
  24. 24. How do I change this thing? $>mv readme.html useless/stuff/readme $>ls -l -rw-r--r--@ 1 adrian_sg wheel 418 Sep 24 20:18 index.php -rw-r--r--@ 1 adrian_sg wheel 19929 Jan 18 2013 license.txt drwxr-xr-x 2 adrian_sg wheel 68 Mar 3 22:04 useless -rw-r--r--@ 1 adrian_sg wheel 4892 Oct 4 10:12 wp-activate.php MoVe
  25. 25. How do I change this thing? $>cp wp-config-sample.php wp-config.php $>ls -l -rw-r--r--@ 1 adrian_sg wheel 4795 Sep 5 21:38 wp-comments-post.php -rw-r--r--@ 1 adrian_sg wheel 3087 Oct 24 18:58 wp-config-sample.php -rw-r--r--@ 1 adrian_sg wheel 3087 Mar 3 21:59 wp-config.php drwxr-xr-x@ 5 adrian_sg wheel 170 Jan 23 15:17 wp-content CoPy ● cp -a keeps same permissions as original
  26. 26. When everything goes wrong... $>less /var/log/apache2/error_log Read the log file
  27. 27. When everything goes wrong... Read the log file ● (up arrow) to scroll towards the top ● (down arrow) to scroll towards the bottom ● (space) next page ● p previous page ● q(uit) to exit ● / <expression> to search for <expression> ● n to search again
  28. 28. But I only care about the last error... $>tail -n 5 /var/log/apache2/error_log [Mon Mar 03 10:28:01 2014] [notice] Digest: generating secret for digest authentication ... [Mon Mar 03 10:28:01 2014] [notice] Digest: done [Mon Mar 03 10:28:01 2014] [notice] Apache/2.2.26 (Unix) DAV/2 PHP/5.5.4 mod_ssl/2.2.26 OpenSSL/0.9.8y configured -- resuming normal operations [Mon Mar 03 13:40:08 2014] [notice] child pid 8870 exit signal Bus error (10) [Mon Mar 03 18:02:20 2014] [notice] caught SIGTERM, shutting down Read the last few lines of the log file
  29. 29. I only care about the current error... $>tail -f /var/log/apache2/error_log [Mon Mar 03 10:28:01 2014] [notice] Digest: generating secret for digest authentication ... [Mon Mar 03 10:28:01 2014] [notice] Digest: done [Mon Mar 03 10:28:01 2014] [notice] Apache/2.2.26 (Unix) DAV/2 PHP/5.5.4 mod_ssl/2.2.26 OpenSSL/0.9.8y configured -- resuming normal operations [Mon Mar 03 13:40:08 2014] [notice] child pid 8870 exit signal Bus error (10) [Mon Mar 03 18:02:20 2014] [notice] caught SIGTERM, shutting down [Mon Mar 03 20:18:01 2014] [notice] Apache/2.2.26 (Unix) DAV/2 PHP/5.5.4 mod_ssl/2.2.26 OpenSSL/0.9.8y configured -- resuming normal operations Read the log file as it happens ● -f is interactive ● Ctrl+C to exit interactive
  30. 30. Who is currently on my site? $>tail -f /var/log/apache2/*access_log ::1 - - [26/Dec/2013:09:35:23 -0500] "OPTIONS * HTTP/1.0" 200 - 127.0.0.1 - - [26/Dec/2013:09:35:34 -0500] "GET / HTTP/1.1" 200 44 127.0.0.1 - - [26/Dec/2013:09:35:34 -0500] "GET /favicon.ico HTTP/1.1" 404 209 127.0.0.1 - - [26/Dec/2013:09:36:40 -0500] "GET / HTTP/1.1" 304 - 127.0.0.1 - - [26/Dec/2013:09:36:42 -0500] "GET / HTTP/1.1" 304 - Read the access log as it happens
  31. 31. How do I change this thing $>nano wp-config.php Nano text editor
  32. 32. How do I change this thing $>nano wp-config.php ^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos ^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Text ^T To Spell Nano text editor
  33. 33. Putting it all together $>tail -n 10000 /var/log/apache2/error_log | grep “Mar 01” | less Deep filtering with the pipe statement Look for any log entry that occurred on March 1st within the last ten thousand lines of the error log and display it in a way I can easily navigate
  34. 34. Putting it all together $>mkdir -p wp-content/uploads && echo - e "RemoveHandler .php .phtml .php3 php4nRemoveType .php .phtml .php3 php4" > wp-content/uploads/.htaccess Creating files without a text editor Make a new uploads directory in wp-content, then create a .htaccess file in uploads with the contents of “RemoveHandler .php .phtml .php3 php4 RemoveType .php .phtml .php3 php4”
  35. 35. Resources ● Usage Share of Server OSes ● In The Beginning Was the Command Line ● linuxcommand.org ● 5-Minute Essential Shell Tutorial ● PuTTY ● Cygwin
  36. 36. Questions?
  37. 37. Thank you! http://www.slideshare.net/aramonc/learning-the-command-line-33146569

×