first there was the command line

41
First There was 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

Upload: aramonc

Post on 11-Jun-2015

1.370 views

Category:

Technology


0 download

DESCRIPTION

Command line tutorial to be presented at WordCamp Miami 2014

TRANSCRIPT

Page 1: First there was the command line

First There was 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 LineNeal Stephenson

http://www.slideshare.net/aramonc/learning-the-command-line

Page 2: First there was the command line

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

Page 3: First there was the command line

● Developer at ServerGrove● All around nerd● Systems Administrator for

7 years● @aramonc in all the places

About Me

Page 4: First there was the command line

More than 60% of all web servers use *nix

Why bother?

DebianUbuntu

CentOS/RHELSmartOS*

Servers do not use graphical interfaces*Not really Linux, still Unix based

Page 5: First there was the command line

WordPress Powers ~19% of the web

Why bother?

Statistically more likely to be target of attack

Page 6: First there was the command line

● Increased speed & flexibility● Muscle memory● Large pool of freely available utilities● *nix Command Line utilities are mostly

standard

Why bother?

Page 7: First there was the command line

What if I mess up?

Page 8: First there was the command line
Page 9: First there was the command line

Getting to the Command Line

Windows

Localhost:Cygwin

Webhost:SSH via PuTTY

OSX, *nix

Localhost:Terminal, xterm, etc

Webhost:SSH via the above

Page 10: First there was the command line

Navigating Folders = Directory Tree

Page 11: First there was the command line

Where are you right now?

$>pwd/var/www/wp_site

Print Working Directory

● /var/www/wp_site = a path● / not \● Starts with / (root) = absolute

Page 12: First there was the command line

What’s in here?

$>lsindex.php wp-includeslicense.txt wp-links-opml.phpreadme.html wp-load.phpwp-activate.php wp-login.phpwp-admin wp-mail.phpwp-blog-header.php wp-settings.phpwp-comments-post.php wp-signup.phpwp-config-sample.php wp-trackback.php

LiSt

Page 13: First there was the command line

What’s in here?

$>ls -latotal 320drwxr-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.htmldrwxr-xr-x@ 88 adrian_sg wheel 2992 Jan 23 15:17 wp-admindrwxr-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

Page 14: First there was the command line

Moving around...

$>cd wp-admin$>pwd/var/www/wp_site/wp-admin$>cd /var/www/wp_site$>pwd/var/www/wp_site$>cd wp-content/themes/twentyfourteen$>pwd/var/www/wp_site/wp-content/themes/twentyfourteen

Change Directory

Page 15: First there was the command line

Moving around...

$>cd ..$>pwd/var/www/wp_site$>cd ~/$>pwd/Users/adrian_sg$>cd -$>pwd/var/www/wp_site

Change Directory

Page 16: First there was the command line

Where is this thing?

$>find . -iname xml\*

/var/www/wp_site/xmlrpc.php

$>find . -mtime 3

Find

. (dot) means current directory-mtime in 24 hour increments of modified date

Page 17: First there was the command line

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

Page 18: First there was the command line

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

Page 19: First there was the command line

Can I change things?

$>ls -ltotal 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.htmldrwxr-xr-x@ 88 adrian_sg wheel 2992 Jan 23 15:17 wp-admindrwxr-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.phpdrwxr-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

Page 20: First there was the command line

Can I change things?

Permissions

r = Readw = Writex = Execute (run a script or open a directory)

Three levels of permissions: Owner, Group, Everyone else

Page 21: First there was the command line

Can I change things?

Owner = User● Sometimes your user● Sometimes root● Sometimes www-data (Apache user)

Page 22: First there was the command line

Can I change things?

Group● Permissions for a set of users● Users have own group● Most users only belong to own group

Page 23: First there was the command line

Can I change things?

Permissions

Owner Group EveryoneIs Dir.?

rwx r-x r-xd

$>ls -ldrwxr-xr-x@ 88 adrian_sg wheel 2992 Jan 23 15:17 wp-admin

adrian_sg wheel

Page 24: First there was the command line

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.htmldrwxr-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

Page 25: First there was the command line

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.txtdrwxr-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

Page 26: First there was the command line

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.phpdrwxr-xr-x@ 5 adrian_sg wheel 170 Jan 23 15:17 wp-content

CoPy

● cp -a keeps same permissions as original

Page 27: First there was the command line
Page 28: First there was the command line

When everything goes wrong...

$>less

/var/log/apache2/error_log

Read the log file

Page 29: First there was the command line
Page 30: First there was the command line

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

Page 31: First there was the command line

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

Page 32: First there was the command line

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

Page 33: First there was the command line

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 44127.0.0.1 - - [26/Dec/2013:09:35:34 -0500] "GET /favicon.ico HTTP/1.1" 404 209127.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

Page 34: First there was the command line

How do I change this thing

$>nano wp-config.php

Nano text editor

Page 35: First there was the command line
Page 36: First there was the command line

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

Page 37: First there was the command line

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

Page 38: First there was the command line

Putting it all together

$>mkdir -p wp-content/uploads && echo -

e "RemoveHandler .php .phtml .php3

php4\nRemoveType .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 php4RemoveType .php .phtml .php3 php4”

Page 40: First there was the command line

Questions?

Page 41: First there was the command line

Thank you!http://www.slideshare.net/aramonc/learning-the-command-line