Have a look at parted. If you use KDE, you may want to use qtparted.
Oh, and read the manual. Twice. Carefully. Otherwise, you'll probably shoot yourself in the foot.
I don't mean to scare you, but... actually, I do mean to scare you, but only enough to make you careful about using (qt)parted.
The manual should be detailed regarding what it can and can't do--for instance, there are some file systems it can't resize (reiser FS, among others).