Changing line-endings from DOS-style (Windows) to Unix-style (Linux) the easy way with dos2unix

I’m always forgetting about the dos2unix utility.
Probably because I only need once every couple of years.


For the Ubuntu package, here’s the abbreviated apt-cache show dos2unix :

Description-en: convert text file line endings between CRLF and LF
This package contains utilities dos2unix, unix2dos, mac2unix,
unix2mac to convert the line endings of text files between UNIX (LF),
DOS (CRLF) and Mac (CR) formats.
Text files under Windows and DOS typically have two ASCII characters
at the end of each line: CR (carriage return) followed by LF (line
feed). Older Macs used just CR, while UNIX uses just LF. While most
modern editors can read all these formats, there may still be a need
to convert files between them.
This is the classic utility developed in 1989.

Where does an Ubuntu package get installed?

For Debian-based systems,

“You can discover where a package puts its ‘stuff’ by running:
dpkg -L 'packagename'

From the dpkg manpage, here’s the -L option:

-L, --listfiles package-name...
List files installed to your system from package-name.

Credit to Rooke at Askubuntu.

Stripping leading whitespace and comments with sed

In trying to consolidate some bash aliases (found in .bashrc and .bash_aliases), I needed to strip out comments and leading whitespace to sort for unique lines.

To strip spaces, I used
egrep alias .bashrc | sed 's/^[ ]*//'

To remove spaces and tabs in the whitespace (see info on tabs after this example):
egrep alias .bashrc | sed 's/^[ ]*//'
NOTE: In the expression, sed 's/^[ ]*//' , the expression in the brackets is actually a space followed by a tab. At the command line, I had to create the tab by typing Control-V and then hitting TAB on the keyboard. You may need to represent tabs in a different fashion.

To get rid of leading whitespace, comments, and indented comments, I settled on
egrep alias .bashrc | sed 's/^[ ]*//' | egrep -v '^#'

To gather and sort aliases from both .bash and .bash_aliases, then sending to a temporary file:
egrep -h alias .bash[r_][ca]* | sed 's/^[ ]*//' | egrep -v '^#' | sort -u >> tmp

The -h flag tells the first grep not to print the file name.

Getting ‘Scroll Lock’ to work under Linux

I’ve got a couple of keyboards with Scroll Lock keys that are not functional by default under Linux.
For my Ubuntu systems, the following procedure worked to fix the problem. After this, the LED for scroll lock lights and the key function as expected.

The steps are as follows:

  1. Find an unused modifier with xmodmap -p
  2. Use xmodmap to assign Scroll_Lock to this modifier
  3. Make the change persistent by adding it to your .Xmodmap file

First, use xmodmap -p to identify an unused mod key.
For example,

$ xmodmap -p
xmodmap: up to 4 keys per modifier, (keycodes in parentheses):

shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x69)
mod1 Alt_L (0x40), Alt_R (0x6c), Meta_L (0xcd)
mod2 Num_Lock (0x4d)
mod4 Super_L (0x85), Super_R (0x86), Super_L (0xce), Hyper_L (0xcf)
mod5 ISO_Level3_Shift (0x5c), Mode_switch (0xcb)

mod3 is the open modifier. So, we’ll use it with xmodmap -e :

xmodmap -e "add mod3 =Scroll_Lock"

Capitalization is important, so “Scroll_Lock” has to be written exactly as printed.
You can have a space, or no space, after the equal sign.

Check that it works, then add the command content to your home directory (file does not have to exist):

echo "add mod3 =Scroll_Lock" >> ~/.Xmodmap

send man page to text file

Printing a manpage to a text file (perhaps more portable for cross-platform or bedtime reading):

generic Unix/Linux, using `col`:
man rcs | col -b > /tmp/man_rcs.txt

These alternatives would require that you reset PAGER or MANPAGER:
alternative BSD :
export MANPAGER=cat
man pf.conf > man_pf.conf.txt

alternative BSD :
export PAGER=cat
man pf.conf > man_pf.conf.txt

Ubuntu, Debian, Mint, etc. allow all of these alternatives:

-P pager, --pager=pager
Specify which output pager to use. By default, man uses pager -s. This option overrides the $MANPAGER environment variable, which in turn overrides the $PAGER environment variable. It is not used in conjunction with -f or -k.

recovering a complete config from rancid

From time to time, I need to access a complete config stored by the rancid application under CVS, so I can get a good look (more than just the line diffs) at the configuration.

Here are the steps I use to recover an older version of configuration stored by the rancid process in a CVS structure.

1) Find the group that contains the config you want, and get the ‘CVSROOT’ directory info contained in the Root file. This should be in a directory that corresponds to the rancid base install directory — BASEDIR/var/GROUPNAME/configs/CVS/Root. My install base is /usr/local/rancid, so to get a config from my atlanta-zone5 group, I need to look in /usr/local/rancid/var/atlanta-zone5/configs/CVS/Root.

$ cat /usr/local/rancid/var/atlanta-zone5/configs/CVS/Root

2) Next, set and export the CVSROOT variable that you found in step 1.

$ export CVSROOT=/usr/local/rancid/var/CVS

3) Find the version of the file (the configuration revision) you want to get back. This can be done with various CVS front ends, or the command line. For the command line CVS command, go to the configs directory of the group containing the router/switch config you want, then use the ‘cvs log’ command. For example:
$ cd /usr/local/rancid/var/CVS/atlanta-zone5/configs/

4) Look through the log for the version that corresponds to the date you need:
$ cvs log bgp2-rtr | more

5)Go to the directory in which you’ll expand the old config.
$ cd /tmp (or some other directory where you won’t collide with existing files)

6) Check out the version you need using the ‘cvs co’ command in this form:

$ cvs co -r 1.21 GROUP/configs/YOUR_ROUTER
cvs co -r 1.21 atlanta-zone5/configs/bgp2-rtr

The group directory will be restored, and you will have to descend into it to find the exact config you need.

$ cd atlanta-zone5/configs
$ more bgp2-rtr

7) Enjoy your recovered config. Repeat as necessary.

pink noise

Pink noise can be used to mask distracting sounds in the environment around you. It can be useful for providing a neutral sonic background for concentration.

The program speaker-test comes in the alsa-utils package, and provides pink noise by default. This is described by its man page as “perceptually uniform noise”. There are a number of other options, but for a quick noise generator, speaker-test is very handy.

Command line fun for linux : included utilities

obelix@entity:~$ info util-linux-ng

What’s my ubuntu (or debian) version?

I have a  number of machines running various OS releases. Sometimes I need to check what flavor or relase I’m running on the current machine.
While uname -a will show the Linux kernel version, there are a few ways to get more information.
Here are three possibilities:
cat /etc/issue
cat /etc/lsb-release

and my favorite:
lsb_release -a

Here’s some sample output from lsb_release:
$ lsb_release -a
LSB Version: core-2.0-ia32:core-2.0-noarch:core-3.0-ia32:core-3.0-noarch:core-3.1-ia32:core-3.1-noarch:core-3.2-ia32:core-3.2-noarch:core-4.0-ia32:core-4.0-noarch
Distributor ID: Ubuntu
Description: Ubuntu 10.04.1 LTS
Release: 10.04
Codename: lucid

The “lsb” in these commands refers to the Linux Standard Base.  For more information, see the Linux Foundation .


I’ve been looking at a number of different ebooks and e-readers lately.  Lucidor is a project which is a little better looking than some of the older apps, but it is still pretty early in development.

Here’s a copy of lucidor 0.9, which was difficult to find due to problems with the lucidor site:


md5sum:  08faa6b60df2dae654e70431aa2e7626  lucidor_0.9-1_all.deb.gz
sha1sum: 0397853f5c4fe013fe36aed71ec0aa219f7f35f2  lucidor_0.9-1_all.deb.gz

« Previous PageNext Page »