Difference between revisions of "Ubuntu Server Setup"
Jump to navigation
Jump to search
Line 207: | Line 207: | ||
== | == Using SMTP to send email== | ||
<pre> | <pre> | ||
apt-get install php-pear | |||
pear install Mail | |||
pear install Net_SMTP | |||
restart apache | |||
## you have to include this in your code. | |||
require_once 'Mail.php'; | |||
## there is a lot more info you have to provide. do a search or pear mail | |||
</pre> | </pre> | ||
== | == Giving Root Privileges to another Account == | ||
<pre> | <pre> | ||
edit /etc/sudoers.tmp | |||
#User previlege specification | |||
root ALL=(ALL:ALL)ALL | |||
# copy the settings of the root and adapt it to your username | |||
alex ALL=(ALL:ALL)ALL | |||
</pre> | </pre> | ||
== | == Installing Node.js == | ||
<pre> | <pre> | ||
sudo apt-get install python-software-properties | |||
add-apt-repository ppa:chris-lea/node.js | |||
apt-get update | |||
apt-get install nodejs npm | |||
</pre> | </pre> | ||
== | == Search Repositories == | ||
<pre> | <pre> | ||
sudo apt-cache search python | |||
</pre> | will search the cached repo of all python</pre> | ||
== | == Changing Mac Address Linux == | ||
<pre> | <pre> | ||
ifconfig wlan0 down | |||
ifconfig wlan0 hw ether de:ad:be:ef:co:fe | |||
ifconfig wlan0 up | |||
ifconfig wlan0 | grep HWaddr | |||
</pre> | </pre> | ||
== == | == Repair Perl Locale Errors on Ubuntu == | ||
<pre> | <pre> | ||
sudo apt-get install language-pack-en-base | |||
sudo dpkg-reconfigure locales | |||
if that dosent work then try this | |||
export LANGUAGE=en_US.UTF-8 | |||
export LANG=en_US.UTF-8 | |||
export LC_ALL=en_US.UTF-8 | |||
locale-gen en_US.UTF-8 | |||
apt-get install locales | |||
dpkg-reconfigure locales | |||
</pre> | </pre> | ||
== == | == Remove Old host keys from Known_hosts == | ||
<pre> | <pre> | ||
ssh-keygen -f "/root/.ssh/known_hosts" -R 192.168.20.133 | |||
</pre> | </pre> | ||
== | == Sync Time with ntp server == | ||
<pre> | <pre> | ||
Using the command line, you can use dpkg-reconfigure tzdata. | |||
dpkg-reconfigure tzdata | |||
Follow instructions | |||
install ntp | |||
sudo apt-get install ntp | |||
</pre> | </pre> | ||
== | == Setting up a Cron Job == | ||
<pre> | <pre> | ||
Using cron | |||
Use the personal crontab to setup your jobs | |||
type | |||
crontab -e ** use the -e switch, do not edit the file directly | |||
Everthing is the same as below except the 6th space in the personal crontab is the field to execute as oposed to the user to run the job | |||
example | |||
* * * * * /backup/script.sh | |||
as opposed to | |||
* * * * * root /backup/script.sh | |||
crontab -l - shows scheduled jobs | |||
crontab -r remove the current crontab file | |||
In the /etc directory you will probably find some sub directories called | |||
'cron.hourly', 'cron.daily', 'cron.weekly' and 'cron.monthly'. If you place | |||
a script into one of those directories it will be run either hourly, daily, | |||
weekly or monthly, depending on the name of the directory. | |||
If you want more flexibility than this, you can edit a crontab (the name | |||
for cron's config files). The main config file is normally /etc/crontab. | |||
On a default RedHat install, the crontab will look something like this: | |||
root@pingu # cat /etc/crontab | |||
SHELL=/bin/bash | |||
PATH=/sbin:/bin:/usr/sbin:/usr/bin | |||
MAILTO=root | |||
HOME=/ | |||
# run-parts | |||
01 * * * * root run-parts /etc/cron.hourly | |||
02 4 * * * root run-parts /etc/cron.daily | |||
22 4 * * 0 root run-parts /etc/cron.weekly | |||
42 4 1 * * root run-parts /etc/cron.monthly | |||
The first part is almost self explanatory; it sets the variables for cron. | |||
SHELL is the 'shell' cron runs under. If unspecified, it will default to | |||
the entry in the /etc/passwd file. | |||
PATH contains the directories which will be in the search path for cron | |||
e.g if you've got a program 'foo' in the directory /usr/cog/bin, it might | |||
be worth adding /usr/cog/bin to the path, as it will stop you having to use | |||
the full path to 'foo' every time you want to call it. | |||
MAILTO is who gets mailed the output of each command. If a command cron is | |||
running has output (e.g. status reports, or errors), cron will email the output | |||
to whoever is specified in this variable. If no one if specified, then the | |||
output will be mailed to the owner of the process that produced the output. | |||
HOME is the home directory that is used for cron. If unspecified, it will | |||
default to the entry in the /etc/passwd file. | |||
Now for the more complicated second part of a crontab file. | |||
An entry in cron is made up of a series of fields, much like the /etc/passwd | |||
file is, but in the crontab they are separated by a space. There are normally | |||
seven fields in one entry. The fields are: | |||
minute hour dom month dow user cmd | |||
minuteThis controls what minute of the hour the command will run on, | |||
and is between '0' and '59' | |||
hourThis controls what hour the command will run on, and is specified in | |||
the 24 hour clock, values must be between 0 and 23 (0 is midnight) | |||
domThis is the Day of Month, that you want the command run on, e.g. to | |||
run a command on the 19th of each month, the dom would be 19. | |||
monthThis is the month a specified command will run on, it may be specified | |||
numerically (0-12), or as the name of the month (e.g. May) | |||
dowThis is the Day of Week that you want a command to be run on, it can | |||
also be numeric (0-7) or as the name of the day (e.g. sun). | |||
userThis is the user who runs the command. | |||
cmdThis is the command that you want run. This field may contain | |||
multiple words or spaces. | |||
Fields | |||
.---------------- minute (0 - 59) | |||
| .------------- hour (0 - 23) | |||
| | .---------- day of month (1 - 31) | |||
| | | .------- month (1 - 12) OR jan,feb,mar,apr ... | |||
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat | |||
| | | | | | |||
* * * * * | |||
If you don't wish to specify a value for a field, just place a * in the | |||
field. | |||
e.g. | |||
01 * * * * root echo "This command is run at one min past every hour" | |||
17 8 * * * root echo "This command is run daily at 8:17 am" | |||
17 20 * * * root echo "This command is run daily at 8:17 pm" | |||
00 4 * * 0 root echo "This command is run at 4 am every Sunday" | |||
* 4 * * Sun root echo "So is this" | |||
42 4 1 * * root echo "This command is run 4:42 am every 1st of the month" | |||
01 * 19 07 * root echo "This command is run hourly on the 19th of July" | |||
Notes: | |||
Under dow 0 and 7 are both Sunday. | |||
If both the dom and dow are specified, the command will be executed when | |||
either of the events happen. | |||
e.g. | |||
* 12 16 * Mon root cmd | |||
Will run cmd at midday every Monday and every 16th, and will produce the | |||
same result as both of these entries put together would: | |||
* 12 16 * * root cmd | |||
* 12 * * Mon root cmd | |||
Vixie Cron also accepts lists in the fields. Lists can be in the form, 1,2,3 | |||
(meaning 1 and 2 and 3) or 1-3 (also meaning 1 and 2 and 3). | |||
e.g. | |||
59 11 * * 1,2,3,4,5 root backup.sh | |||
Will run backup.sh at 11:59 Monday, Tuesday, Wednesday, Thursday and Friday, | |||
as will: | |||
59 11 * * 1-5 root backup.sh | |||
Cron also supports 'step' values. | |||
A value of */2 in the dom field would mean the command runs every two days | |||
and likewise, */5 in the hours field would mean the command runs every | |||
5 hours. | |||
e.g. | |||
* 12 10-16/2 * * root backup.sh | |||
is the same as: | |||
* 12 10,12,14,16 * * root backup.sh | |||
*/15 9-17 * * * root connection.test | |||
Will run connection.test every 15 mins between the hours or 9am and 5pm | |||
Lists can also be combined with each other, or with steps: | |||
* 12 1-15,17,20-25 * * root cmd | |||
Will run cmd every midday between the 1st and the 15th as well as the 20th | |||
and 25th (inclusive) and also on the 17th of every month. | |||
* 12 10-16/2 * * root backup.sh | |||
is the same as: | |||
* 12 10,12,14,16 * * root backup.sh | |||
When using the names of weekdays or months, it isn't case sensitive, but only | |||
the first three letters should be used, e.g. Mon, sun or Mar, jul. | |||
Comments are allowed in crontabs, but they must be preceded with a '#', and | |||
must be on a line by them self. | |||
</pre> | </pre> | ||
Revision as of 22:53, 7 August 2016
Turn on Mod Rewrite
1. a2enmod rewrite 2. restart apache server 3. edit vhost file AllowOverride all
Shell Scripting
• Scripts must be chmod 755 so they can execute • #!/bin/bash (add to the top of the shell script so it can use the bash shell to interpret the script, you can also add python or other shell programs) • Postional Parameters: $0 ... $9 $@ to access all 0-9 // like in a loop • Exit Status return Codes: Range from 0 to 255: 0 = success: Other than 0 = error condition: use man or info to find meanign of exit status &bull, $? contains the return code of the previously executed command ls /not/here echo "$?" Another Code example HOST="google.com" ping -c 1 $HOST # -c 1 means it will send 1 ping if["$?" -eg "0"] then echo "$HOST reachable" else "$HOST unreachable" fi && and || -the second statement only executes if the first one was successfull mkdir /tmp/bak && cp test.txt /tmp/bak/ -the second statement will execute only if the first one fails cp test.txt /tmp/bak/ || cp test.txt /tmp • chain multiple commands together using a ; (semicolon) cp test.txt /tmp/ ; cp test.txt /bak
File Operators (test)
-d FILE -true if is a directory -e FILE True if file exists -f FILE True if file exist and is a regular file -r FILE True if file is readable by you -s FILE True if file exists and is not empty -w FILE True if file is writable by you -x FILE True if file is executable by you -z FILE True if string is empty -n FILE True if string is not empty String1=String2 true if strings are equal String1 != string2 True if the strings are not equal arg1 -eq arg2 equal arg1 -ne arg2 not equal arg1 -lt arg2 less than arg1 -le arg2 less than or equal to arg1 -gt arg2 greater than arg1 -ge arg2 greater than or equal to read -p "Prompt to dispaly" VarableName accepting user input
for loop to rename all jpg files with the date
#!/bin/bash PICTURES=$(ls *.jpg) DATE=$ (date +%F) for PICTURES IN $PICTURES do echo "Renaming ${PICTURE} to ${DATE} - ${PICTURE}" mv $[PICTUE} ${DATE}-${PICTURE} done // Output renaming bear.jpg to 2015-03-06-bear.jpg
Adding exit commands to scripts
#!/bin/bash HOST="google.com" ping -c 1 $HOST IF [ "$?" -ne"0" ] then echo "$HOST unrechale" exit 1 fi exit 0
Creating a Function
function function-name() {# code goes here} Calling a Function function hello() { echo "hello: } hello (you don't need the () just call the name of the function) ** Positional Parameters and passing info to a funciton #!/bin/bash function hello(){ echo "hello $1" } hello robert # robert is passed to the function hello #output is hello Robert ** Outputting miltple calls to a function #!/bin/bahs funciton hello() { for NAME in $@ do echo "Hello $NAME" done } hello robert bob dan Output hello robert bob dan Using Wildcards * -matches zero or more characters *.txt a* a*.txt ? - matches exactly one character ?.txt a? a?.txt [] character class - matches any of the characters included between the brackets. Matches exactly one character. [aeiou]* exampld: ls -la [abge]* ca[nt] matches:(it will match either the n or the t) can, cat, candy, catch [!] Matches any characters NOT included between the brackets. Matches exactly one character. [!aeiou]* would match below bacause it does not start with any of those letters baseball, cricket Select a range [a-g]* matches files that start with a,b,c,d,e,f,g [3-6]* matches all files start with 3,4,5,6 Using predefined Character Classes [[:alpha:]] [[:alnum:]] [[:digit:]] [[:lower:]] [[:upper:]] [[:space:]] #!/bin/bash cd /var/www/bash # there's a space after the "if", space afer ! then a space after "[", space before "]" if [ ! -d /var/www/bash/text/ ] then mkdir /var/www/bash/text fi for FILE in *.txt do echo "Copying $FILE" cp $FILE /var/www/bash/text done Case Statements
Apache Commands
- List apache packages and versions
- dpkg -l | grep apache
- shows version of ubnuntu
- cat /etc/issue
- shows version of ubuntu
- cat /etc/*-release
- give detail status of the service
- apachectl status
- Gives info on where config file is located
- apachectl -V
- Search the entire server for the file
- find / | grep "apache2\.conf"
- Info for each line in the .conf File
- Displays Config Info about all Virtual Hosts
- apachectl -t -D DUMP_VHOSTS
- Display All Modules form Apache
- apachectl -t -D DUMP_MODULES
- Enable and Disable Modules
- Directory for Modules
- /etc/apache2/modes-available and /etc/apache2/mods-enabled
- a2enmod and a2dismod will enable of disable modules
- Find where the apache error log is located
- grep -Ri ErrorLog /etc/apache2
- Watch Error log in realtime
- tail -f error.log
- Tools to Analize log files
- AWStats - awstats.sourceforge.net
- GoAccess - Terminal app
- goaccess.prosoftcorp.com
Using SMTP to send email
apt-get install php-pear pear install Mail pear install Net_SMTP restart apache ## you have to include this in your code. require_once 'Mail.php'; ## there is a lot more info you have to provide. do a search or pear mail
Giving Root Privileges to another Account
edit /etc/sudoers.tmp #User previlege specification root ALL=(ALL:ALL)ALL # copy the settings of the root and adapt it to your username alex ALL=(ALL:ALL)ALL
Installing Node.js
sudo apt-get install python-software-properties add-apt-repository ppa:chris-lea/node.js apt-get update apt-get install nodejs npm
Search Repositories
sudo apt-cache search python will search the cached repo of all python
Changing Mac Address Linux
ifconfig wlan0 down ifconfig wlan0 hw ether de:ad:be:ef:co:fe ifconfig wlan0 up ifconfig wlan0 | grep HWaddr
Repair Perl Locale Errors on Ubuntu
sudo apt-get install language-pack-en-base sudo dpkg-reconfigure locales if that dosent work then try this export LANGUAGE=en_US.UTF-8 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 locale-gen en_US.UTF-8 apt-get install locales dpkg-reconfigure locales
Remove Old host keys from Known_hosts
ssh-keygen -f "/root/.ssh/known_hosts" -R 192.168.20.133
Sync Time with ntp server
Using the command line, you can use dpkg-reconfigure tzdata. dpkg-reconfigure tzdata Follow instructions install ntp sudo apt-get install ntp
Setting up a Cron Job
Using cron Use the personal crontab to setup your jobs type crontab -e ** use the -e switch, do not edit the file directly Everthing is the same as below except the 6th space in the personal crontab is the field to execute as oposed to the user to run the job example * * * * * /backup/script.sh as opposed to * * * * * root /backup/script.sh crontab -l - shows scheduled jobs crontab -r remove the current crontab file In the /etc directory you will probably find some sub directories called 'cron.hourly', 'cron.daily', 'cron.weekly' and 'cron.monthly'. If you place a script into one of those directories it will be run either hourly, daily, weekly or monthly, depending on the name of the directory. If you want more flexibility than this, you can edit a crontab (the name for cron's config files). The main config file is normally /etc/crontab. On a default RedHat install, the crontab will look something like this: root@pingu # cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly The first part is almost self explanatory; it sets the variables for cron. SHELL is the 'shell' cron runs under. If unspecified, it will default to the entry in the /etc/passwd file. PATH contains the directories which will be in the search path for cron e.g if you've got a program 'foo' in the directory /usr/cog/bin, it might be worth adding /usr/cog/bin to the path, as it will stop you having to use the full path to 'foo' every time you want to call it. MAILTO is who gets mailed the output of each command. If a command cron is running has output (e.g. status reports, or errors), cron will email the output to whoever is specified in this variable. If no one if specified, then the output will be mailed to the owner of the process that produced the output. HOME is the home directory that is used for cron. If unspecified, it will default to the entry in the /etc/passwd file. Now for the more complicated second part of a crontab file. An entry in cron is made up of a series of fields, much like the /etc/passwd file is, but in the crontab they are separated by a space. There are normally seven fields in one entry. The fields are: minute hour dom month dow user cmd minuteThis controls what minute of the hour the command will run on, and is between '0' and '59' hourThis controls what hour the command will run on, and is specified in the 24 hour clock, values must be between 0 and 23 (0 is midnight) domThis is the Day of Month, that you want the command run on, e.g. to run a command on the 19th of each month, the dom would be 19. monthThis is the month a specified command will run on, it may be specified numerically (0-12), or as the name of the month (e.g. May) dowThis is the Day of Week that you want a command to be run on, it can also be numeric (0-7) or as the name of the day (e.g. sun). userThis is the user who runs the command. cmdThis is the command that you want run. This field may contain multiple words or spaces. Fields .---------------- minute (0 - 59) | .------------- hour (0 - 23) | | .---------- day of month (1 - 31) | | | .------- month (1 - 12) OR jan,feb,mar,apr ... | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat | | | | | * * * * * If you don't wish to specify a value for a field, just place a * in the field. e.g. 01 * * * * root echo "This command is run at one min past every hour" 17 8 * * * root echo "This command is run daily at 8:17 am" 17 20 * * * root echo "This command is run daily at 8:17 pm" 00 4 * * 0 root echo "This command is run at 4 am every Sunday" * 4 * * Sun root echo "So is this" 42 4 1 * * root echo "This command is run 4:42 am every 1st of the month" 01 * 19 07 * root echo "This command is run hourly on the 19th of July" Notes: Under dow 0 and 7 are both Sunday. If both the dom and dow are specified, the command will be executed when either of the events happen. e.g. * 12 16 * Mon root cmd Will run cmd at midday every Monday and every 16th, and will produce the same result as both of these entries put together would: * 12 16 * * root cmd * 12 * * Mon root cmd Vixie Cron also accepts lists in the fields. Lists can be in the form, 1,2,3 (meaning 1 and 2 and 3) or 1-3 (also meaning 1 and 2 and 3). e.g. 59 11 * * 1,2,3,4,5 root backup.sh Will run backup.sh at 11:59 Monday, Tuesday, Wednesday, Thursday and Friday, as will: 59 11 * * 1-5 root backup.sh Cron also supports 'step' values. A value of */2 in the dom field would mean the command runs every two days and likewise, */5 in the hours field would mean the command runs every 5 hours. e.g. * 12 10-16/2 * * root backup.sh is the same as: * 12 10,12,14,16 * * root backup.sh */15 9-17 * * * root connection.test Will run connection.test every 15 mins between the hours or 9am and 5pm Lists can also be combined with each other, or with steps: * 12 1-15,17,20-25 * * root cmd Will run cmd every midday between the 1st and the 15th as well as the 20th and 25th (inclusive) and also on the 17th of every month. * 12 10-16/2 * * root backup.sh is the same as: * 12 10,12,14,16 * * root backup.sh When using the names of weekdays or months, it isn't case sensitive, but only the first three letters should be used, e.g. Mon, sun or Mar, jul. Comments are allowed in crontabs, but they must be preceded with a '#', and must be on a line by them self.