for i in *; do mv $i `echo $i | tr [:upper:] [:lower:]`; done
Thursday, 15 November 2012
Rename files from upper case filename to lower case
The following one line script will rename every file (in the current folder) to lowercase:
Labels:
bash,
Command Line,
Scripting
Possibly Related Posts
Wednesday, 31 October 2012
Ubuntu on a MacBook Pro
This are the steps I followed to get Ubuntu running on a MacBook Pro 9,2.
TIP: Drag and Drop a file from Finder to Terminal to 'paste' the full path without typing and risking type errors.
Create a bootable Ubuntu install flash drive:
Run:
Insert your flash media and run:
Run:
Execute
Using /dev/rdisk instead of /dev/disk may be faster.
If you see the error dd: Invalid number '1m', you are using GNU dd. Use the same command but replace bs=1m with bs=1M.
If you see the error dd: /dev/diskN: Resource busy, make sure the disk is not in use. Start the Disk Utility.app and unmount (don't eject) the drive.
Finally run:
Restart your Mac and press alt while the Mac is restarting to choose the USB-Stick
Follow the on screen instructions.
Download the driver:
Create a Xmodmap conf file
Find Ubuntu Unity Plugin->Behavior->Key to show the launcher and change it to <Primary>space, using the Grab key combination button. It may be also shown as <Control><Primary>space.
You can now have a behavior similar to Mac OS X in Ubuntu 12.04. You can change the virtual desktop using cmd+alt+arrow. You can cut, copy, and paste using cmd+x, cmd+c, and cmd+v and summon the dash with cmd+space.
Install
Note: this procedure requires an .img file that you will be required to create from the .iso file you download.TIP: Drag and Drop a file from Finder to Terminal to 'paste' the full path without typing and risking type errors.
- Download the desired file
- Open the Terminal (in /Applications/Utilities/ or query Terminal in Spotlight)
- Convert the .iso file to .img using the convert option of hdiutil
hdiutil convert -format UDRW -o ~/path/to/target.img ~/path/to/ubuntu.isoNote: OS X tends to put the .dmg ending on the output file automatically.
Create a bootable Ubuntu install flash drive:
Run:
diskutil listto get the current list of devices
Insert your flash media and run:
diskutil listagain and determine the device node assigned to your flash media (e.g. /dev/disk2)
Run:
diskutil unmountDisk /dev/diskN(replace N with the disk number from the last command; in the previous example, N would be 2)
Execute
sudo dd if=/path/to/downloaded.img of=/dev/diskN bs=1m(replace /path/to/downloaded.img with the path where the image file is located; for example, ./ubuntu.img or ./ubuntu.dmg).
Using /dev/rdisk instead of /dev/disk may be faster.
If you see the error dd: Invalid number '1m', you are using GNU dd. Use the same command but replace bs=1m with bs=1M.
If you see the error dd: /dev/diskN: Resource busy, make sure the disk is not in use. Start the Disk Utility.app and unmount (don't eject) the drive.
Finally run:
diskutil eject /dev/diskNand remove your flash media when the command completes
Restart your Mac and press alt while the Mac is restarting to choose the USB-Stick
Follow the on screen instructions.
WiFi
After booting into Ubuntu, the wifi card was not working, to get it to work I connected it to my router with a network cable and followed this steps:Download the driver:
wget http://www.lwfinger.com/b43-firmware/broadcom-wl-5.100.138.tar.bz2And install it:
tar xf broadcom-wl-5.100.138.tar.bz2then add:
sudo apt-get install b43-fwcutter
sudo b43-fwcutter -w "/lib/firmware" broadcom-wl-5.100.138/linux/wl_apsta.o
b43to /etc/modules and reboot
Keyboard and mouse:
This is a little extra to get natural scrolling and OS X like key bindings.Create a Xmodmap conf file
vi ~/.Xmodmapand paste the following inside:
!!Enable Natural scrolling (vertical and horizontal)Under Mac OS X, the combination cmd+space opens Spotlight, to emulate this, install the package compizconfig-settings-manager.
pointer = 1 2 3 5 4 7 6 8 9 10 11 12
!!Swap CMD and CTRL keys
remove control = Control_L
remove mod4 = Super_L Super_R
keysym Control_L = Super_L
keysym Super_L = Control_L
keysym Super_R = Control_L
add control = Control_L Control_R
add mod4 = Super_L Super_R
sudo aptitude install compizconfig-settings-managerOpen it using the ccsm command, or search for it in Dash.
Find Ubuntu Unity Plugin->Behavior->Key to show the launcher and change it to <Primary>space, using the Grab key combination button. It may be also shown as <Control><Primary>space.
You can now have a behavior similar to Mac OS X in Ubuntu 12.04. You can change the virtual desktop using cmd+alt+arrow. You can cut, copy, and paste using cmd+x, cmd+c, and cmd+v and summon the dash with cmd+space.
Possibly Related Posts
Tuesday, 16 October 2012
Installing Oracle 11g R2 Express Edition on Ubuntu 64-bit
This are the steps I took to install Oracle 11g R2 Express Edition on an Ubuntu 12.04 LTS (Precise Pangolin) Server and are based on the tutorial found here:
Download the Oracle 11gR2 express edition installer from the link given below:
Unzip it :
Note: kernel.shmmax = max possible value , e.g. size of physical RAM ( in bytes e.g. 512MB RAM == 512*1024*1024 == 536870912 bytes )
Verify the change :
make some more required changes :
Go to the directory where you created the ubuntu package file in the previous step and enter following commands in terminal :
a) Set-up the environmental variables, add following lines to the bottom of /etc/bash.bashrc :
Download the Oracle 11gR2 express edition installer from the link given below:
http://www.oracle.com/technetwork/products/express-edition/downloads/index.html( You will need to create a free oracle web account if you don't already have it )
Unzip it :
unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zipInstall the following packages :
sudo apt-get install alien libaio1 unixodbc vimThe Red Hat based installer of Oracle XE 11gR2 relies on /sbin/chkconfig, which is not used in Ubuntu. The chkconfig package available for the current version of Ubuntu produces errors and my not be safe to use. So you'll need to create a special chkconfig script, below is a simple trick to get around the problem and install Oracle XE successfully:
sudo vi /sbin/chkconfig(copy and paste the following into the file )
#!/bin/bashSave the above file and provide appropriate execute privilege :
# Oracle 11gR2 XE installer chkconfig hack for Ubuntu
file=/etc/init.d/oracle-xe
if [[ ! `tail -n1 $file | grep INIT` ]]; then
echo >> $file
echo '### BEGIN INIT INFO' >> $file
echo '# Provides: OracleXE' >> $file
echo '# Required-Start: $remote_fs $syslog' >> $file
echo '# Required-Stop: $remote_fs $syslog' >> $file
echo '# Default-Start: 2 3 4 5' >> $file
echo '# Default-Stop: 0 1 6' >> $file
echo '# Short-Description: Oracle 11g Express Edition' >> $file
echo '### END INIT INFO' >> $file
fi
update-rc.d oracle-xe defaults 80 01
#EOF
chmod 755 /sbin/chkconfigOracle 11gR2 XE requires to set the following additional kernel parameters:
sudo vi /etc/sysctl.d/60-oracle.conf(Enter the following)
# Oracle 11g XE kernel parameters(Save the file)
fs.file-max=6815744
net.ipv4.ip_local_port_range=9000 65000
kernel.sem=250 32000 100 128
kernel.shmmax=536870912
Note: kernel.shmmax = max possible value , e.g. size of physical RAM ( in bytes e.g. 512MB RAM == 512*1024*1024 == 536870912 bytes )
Verify the change :
sudo cat /etc/sysctl.d/60-oracle.confLoad new kernel parameters:
sudo service procps startVerify:
sudo sysctl -q fs.file-maxIncrease the system swap space : Analyze your current swap space by following command :
-> fs.file-max = 6815744
free -mMinimum swap space requirement of Oracle 11gR2 XE is 2 GB . In case, your is lesser , you can increase it by following steps in one of my previous posts.
make some more required changes :
sudo ln -s /usr/bin/awk /bin/awkConvert the red-hat ( rpm ) package to Ubuntu-package :
sudo mkdir -p /var/lock/subsys
sudo touch /var/lock/subsys/listener
sudo alien --scripts -d oracle-xe-11.2.0-1.0.x86_64.rpm(this may take a long time)
Go to the directory where you created the ubuntu package file in the previous step and enter following commands in terminal :
sudo dpkg --install oracle-xe_11.2.0-2_amd64.deb
Do the following to avoid getting MEMORY TARGET error ( ORA-00845: MEMORY_TARGET not supported on this system ) :
The reason of doing all this is that on a Ubuntu system /dev/shm is just a link to /run/shm but Oracle requires to have a seperate /dev/shm mount point.
To make the change permanent do the following :
create a file named S01shm_load in /etc/rc2.d :
You can now proceed to the Oracle initialization script
sudo rm -rf /dev/shm(here size will be the size of your RAM in MBs ).
sudo mkdir /dev/shm
sudo mount -t tmpfs shmfs -o size=2048m /dev/shm
The reason of doing all this is that on a Ubuntu system /dev/shm is just a link to /run/shm but Oracle requires to have a seperate /dev/shm mount point.
To make the change permanent do the following :
create a file named S01shm_load in /etc/rc2.d :
sudo vi /etc/rc2.d/S01shm_loadThen copy and paste following lines into the file :
#!/bin/shSave the file and provide execute permissions :
case "$1" in
start) mkdir /var/lock/subsys 2>/dev/null
touch /var/lock/subsys/listener
rm /dev/shm 2>/dev/null
mkdir /dev/shm 2>/dev/null
mount -t tmpfs shmfs -o size=2048m /dev/shm ;;
*) echo error
exit 1 ;;
esac
chmod 755 /etc/rc2.d/S01shm_loadThis will ensure that every-time you start your system, you get a working Oracle environment.
You can now proceed to the Oracle initialization script
sudo /etc/init.d/oracle-xe configureEnter the following configuration information:
- A valid HTTP port for the Oracle Application Express (the default is 8080)
- A valid port for the Oracle database listener (the default is 1521)
- A password for the SYS and SYSTEM administrative user accounts
- Confirm password for SYS and SYSTEM administrative user accounts
- Whether you want the database to start automatically when the computer starts (next reboot).
a) Set-up the environmental variables, add following lines to the bottom of /etc/bash.bashrc :
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xeb) execute your .profile to load the changes:
export ORACLE_SID=XE
export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`
export ORACLE_BASE=/u01/app/oracle
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH
source /etc/bash.bashrcStart the Oracle 11gR2 XE :
sudo service oracle-xe startThe output should be similar to following :
user@machine:~$ sudo service oracle-xe startAnd you're done :)
Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.
user@machine:~$
Possibly Related Posts
Thursday, 27 September 2012
tail -f with highlighting
If you want to highlight something when doing ‘tail -f’ you can use the following command:
\x1b character can also be used as the escape character.
For the full list of control characters on Linux you can look at:
tail -f /var/log/logfile | perl -p -e 's/(something)/\033[7;1m$1\033[0m/g;'or if your terminal supports colours, e.g. linux terminal, you can use this:
tail -f /var/log/logfile | perl -p -e 's/(something)/\033[46;1m$1\033[0m/g;'If you need to highlight multiple words you can use something like this:
tail -f /var/log/logfile | perl -p -e 's/\b(something|something_else)\b/\033[46;1m$1\033[0m/g;'and if you want it to beep on a match use this:
tail -f /var/log/logfile | perl -p -e 's/(something)/\033[46;1m$1\033[0m\007/g;'If you find that perl is too heavy for this you can use sed:
tail -f /var/log/logfile | sed "s/\(something\)/\x1b[46;1m\1\x1b[0m/g"Note, that in the last example you have to actually type “cntl-v cntl-[” in place of “^[”
\x1b character can also be used as the escape character.
For the full list of control characters on Linux you can look at:
man console_codes
Labels:
Command Line,
Scripting,
Unix
Possibly Related Posts
Tuesday, 11 September 2012
Get list of foreign keys in MySQL
Here's a simple query for displaying all foreign keys and their references in a MySQL DB:
select
concat(table_name, '.', column_name) as 'foreign key',
concat(referenced_table_name, '.', referenced_column_name) as 'references'
from
information_schema.key_column_usage
where
referenced_table_name is not null;
Possibly Related Posts
Monday, 10 September 2012
Easy visualisation of database schemas
This is easy using SQLFairy, under Ubuntu, as simple as:
Here's an example for a SQLite DB:
Get the schema dump:
sudo apt-get install sqlfairyNext, dump your database tables, e.g. for MySQL:
mysqldump -u username -p -d mydatabase > mydatabase.sqlFinally, for a PNG image of your schema:
sqlt-graph -f MySQL -o mydatabase.png -t png mydatabase.sqlIf your schema lacks explicit foreign keys, try the –natural-join options (man sqlt-graph, man sqlt-diagram)
Here's an example for a SQLite DB:
Get the schema dump:
echo ".schema" | sqlite3 ~/.liferea_1.4/liferea.db >> liferea.sqlGenerate a SVG diagram with:
sqlt-graph -c --natural-join --from=SQLite -t svg -o liferea_schema.svg liferea.sql
Labels:
Databases
Possibly Related Posts
MySQL Export to CSV
If you need the data from a table or a query in a CSV fiel so that you can open it on any spreadsheet software, like Excel you can use something like the following:
username is your mysql username
password is your mysql password
database is your mysql database
table is the table you want to export
The -B option will delimit the data using tabs and each row will appear on a new line.
The -e option denotes the MySQL command to run, in our case the "SELECT" statement.
The "sed" command used here contains three sed scripts:
s/\t/","/g;s/^/"/ - this will search and replace all occurences of 'tabs' and replace them with a ",".
s/$/"/; - this will place a " at the start of the line.
s/\n//g - this will place a " at the end of the line.
You can find the exported CSV file in the current directory. The name of the file is filename.csv.
However if there are a lot of tables that you need to export, you'll need a script like this:
Name the file something like: export_csv.sh and be sure to make it executable. In Linux, do something like:
To change that behavior, you could easily modify the "OUTFILE" variable to something like:
SELECT id, name, email INTO OUTFILE '/tmp/result.csv'Or you can use sed:
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
ESCAPED BY ‘\\’
LINES TERMINATED BY '\n'
FROM users WHERE 1
mysql -u username -ppassword database -B -e "SELECT * FROM table;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > filename.csvExplanation:
username is your mysql username
password is your mysql password
database is your mysql database
table is the table you want to export
The -B option will delimit the data using tabs and each row will appear on a new line.
The -e option denotes the MySQL command to run, in our case the "SELECT" statement.
The "sed" command used here contains three sed scripts:
s/\t/","/g;s/^/"/ - this will search and replace all occurences of 'tabs' and replace them with a ",".
s/$/"/; - this will place a " at the start of the line.
s/\n//g - this will place a " at the end of the line.
You can find the exported CSV file in the current directory. The name of the file is filename.csv.
However if there are a lot of tables that you need to export, you'll need a script like this:
#!/bin/bashJust be sure to change the configuration section to meet your needs.
#### Begin Configuration ####
DB="mydb"
MYSQL_USER="root"
MYSQL_PASSWD='mypass'
MYSQL_HOST="127.0.0.1"
MYSQL_PORT="3306"
MYSQL="/usr/bin/mysql"
#### End Configuration ####
MYSQL_CMD="$MYSQL -u $MYSQL_USER -p$MYSQL_PASSWD -P $MYSQL_PORT -h $MYSQL_HOST"
TABLES=`$MYSQL_CMD --batch -N -D $DB -e "show tables"`
for TABLE in $TABLES
do
SQL="SELECT * FROM $TABLE;"
OUTFILE=$TABLE.csv
$MYSQL_CMD --database=$DB --execute="$SQL" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > $OUTFILE
done
Name the file something like: export_csv.sh and be sure to make it executable. In Linux, do something like:
chmod +x ./export_csv.shIf you want to have all of the exported files in a certain directory, you could either modify the script or just make the cirectory, "cd" into it, and then run the script. It assumes you want to create the files in the current working directory.
To change that behavior, you could easily modify the "OUTFILE" variable to something like:
OUTFILE="/my_path/$TABLE.csv"
Possibly Related Posts
Subscribe to:
Posts (Atom)