Today I needed to convert a UTF-16 file to UTF-8 and I did it with iconv:
iconv -f UTF-16 -t UTF-8 /path/to/input > /path/to/output
Today I needed to convert a UTF-16 file to UTF-8 and I did it with iconv:
iconv -f UTF-16 -t UTF-8 /path/to/input > /path/to/output
Learned about the chage command today. Can be used to set the expiry of a Linux account. There’s some more information about disabling user accounts.
Reading about Access Keys. Also a good article on Wikipedia.
For Firefox on Linux use: Alt + Shift.
I’ve been getting this error from time to time on my Ubuntu server:
INFO: task dpkg:27497 blocked for more than 120 seconds.
I did some research and it turns out this is related to a bug in the dpkg system, and apparently it’s been fixed already (but not rolled out as part of Ubuntu yet).
Look forward to the fixed being rolled out, because the implication of the bug at the moment is that my system can hang for long periods of time while I’m installing software with apt-get.
Read about the security considerations for find. Find is a *nix tool for searching though directories for files and filtering them to build lists or run commands.
While I’m here I might as well show you my latest find command, I think it’s a beauty. :)
sudo find . \ \( \( \( \! -user jj5 \) -or \( \! -group jj5 \) \) \ -execdir chown jj5:jj5 '{}' \+ \) , \ \( \( -type d \( \! -perm -u+rwx \) \) \ -execdir chmod u+rwx '{}' \+ \) , \ \( \( -type f \( \! -perm -u+rw \) \) \ -execdir chmod u+rw '{}' \+ \)
I was wondering how I could disable the console screen saver on my server (so I can watch progress of stuff in the background) and I found this article, How do I permanently disable Linux’s console screen saver, system-wide?
One of the solutions suggests installing the console-tools package, but there is another solution that looks like it doesn’t need any package installed, so I’m gonna give that a try first. The solution is to edit /etc/kbd/config and specify:
BLANK_TIME=0 POWERDOWN_TIME=0
I’ve configured that now but won’t be able to test for a while as I can’t reboot my server just at the moment.
While I was at it I figured I’d have num lock enabled by default too:
LEDS=+num
Update: I was finally able to reboot my system and test that config, and: it didn’t work.
I tried to apt-get install console-tools, but that make things even worse! I recommend that you don’t try and install console-tools on Ubuntu Lucid, if my experience is anything to go by. Lucky I could still SSH to my server, because there was no console!
In the end I settled on a solution I found over here, being to add the following to /etc/rc.local:
setterm -blank 0 -powersave off -powerdown 0
To disable a user login:
$ sudo passwd -l username
To unlock a disabled user login:
$ sudo passwd -u username
To specify all the secondary groups a user should be in (if they’re already in a group not in this list they will be removed from it) you use:
$ sudo usermod -G grp_a,grp_b username
To append to the list of secondary groups:
$ sudo usermod -a -G grp_c username
To show what users are in a group:
$ grep ^group: /etc/group
E.g. to show which users are in the sudo group:
$ grep ^sudo: /etc/group
You also need to check primary groups by grepping for the gid in the passwd file. For instance the gid for the sudo group is 27, so to see who’s in sudo you also have to:
$ grep 27 /etc/passwd
Of course you should take all of the above with a grain of salt because there are a thousand caveats.
I’ve been learning about approaches to error handling in bash. I found Error handling in BASH, Exit Shell Script Based on Process Exit Code, Writing Robust Bash Shell Scripts and Bash: Error handling all of which contained a nugget of useful information.
Particularly I learned about $LINENO, set -e (equiv: set -o errexit), set -o pipefail, set -E, set -u (equiv: set -o nounset), set -C (equiv: set -o noclobber), #!/bin/bash -eEu, trap, shopt -s expand_aliases, alias, $PIPESTATUS, subshells, unset, and more.
If you call exit without specifying a return code then $? is used, I didn’t know that.
I found this code snippet that demos a relatively race-condition free method of acquiring a lock file:
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null; then trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT critical-section rm -f "$lockfile" trap - INT TERM EXIT else echo "Failed to acquire lockfile: $lockfile." echo "Held by $(cat $lockfile)" fi
If you want to change the modification time of a file on Linux, the command you’re looking for is touch. You can use touch with the -r parameter to specify a reference file who’s date and time information will be used as the basis for a new (or existing) file.
It took me a while, but I finally figured out how to print a number from a bash script properly formatted with commas as thousand’s separators. For those like me who weren’t in the know, the magical incantation is:
printf "%'d" 123456
That will format 123456 as 123,456. Much easier to read when you’re dealing with large numbers such as the sizes of files in gigabytes.
So now if I could only find the Unix command that took a number of bytes and turned it into an approximate value with GB or MB suffixes.