UNIX / Linux Command Notes


dc

Summate list of values from stdin.

echo <your_values> | dc -f- -e '[z 1!=b]sa [+ lax]sb 1z >a p'

A note about the dc script is probably useful: The script consists of 2 macros ("a" and "b"), a command to call macro "a", and a command to print the end-result. Macro "a" implements a "while" statement for handling all values on the list; macro "b" is an addition operation and a jump back to the "while" statement. Using these two macros we create a loop to add all values. Two values are added each iteration until all is done and the result can be output by the "p" command.

[z 1!=b]sa Store macro "a" in register "a". When called, the macro places 2 values on the stack: the "z" command puts the current stack depth on the stack, "1" is put literaly on the stack. "!=" compares these two values for unequality and calls macro "b" if this is the case. For the comparison the values are popped from the stack.
[+ lax]sb Store macro "b" in register "b". Pop 2 top-of-stack values, add, and push the result back on the stack. Next call macro "a" (unconditionally). As long as there are two or more values on the stack the comparison performed by macro "a" yields true and another addition will take place.
1z Initialization for the command in the row below:
>a If stack depth greater than 1, start summation by calling macro "a". This check is to prevent looping if the list of values is empty. In this case, the "z" command executed as part of the above initialization will yield the value 1 and we know there was nothing else on the stack so macro "a" should not be called.
p Output result (sits at top of stack).

resize2fs

Accurate Resizing of Filesystem and Partition

First, backup the data on the filesystem you're about to resize and write down the current layout of the partition table. Just in case something goes wrong. Second, be careful.

Determine block size of filesystem (fs_blk_sz):

# dumpe2fs -h <dev> | grep '^Block size:'

Determine the minimum filesystem size (min_sz); the returned value is the size expressed in filesystem blocks:

# resize2fs -P <dev>

Multiply filesystem block size by the minimum filesystem size to get the minimum size of the filesystem in bytes:

echo min_bytes=$((<fs_blk_sz> * <min_sz>))

Unmount the filesystem and force an fsck:

# umount <dev>
# e2fsck -f <dev>

Resize filesystem and ensure its new size (new_sz) is not lower than the minimum filesystem size. By default, the new_sz argument is in filesystem blocks, but may be followed by a letter to change the unit: sectors (s), kilobytes (K), megabytes (M), or gigabytes (G). resize2fs outputs the new size of the filesystem in filesystem blocks. Call this fs_sz.

# resize2fs -p <dev> <new_sz>

Determine filesystem size in 512-byte sectors (fs_sz_512):

# echo fs_sz_512=$((<fs_sz> * <fs_blk_sz> / 512))

Write down start sector of partition you're resizing, call it start_sector.

# fdisk -l <disk>

Determine end sector of resized partition, call it end_sector. The -1 term is used because the end sector is inclusive.

# echo end_sector=$((start_sector + fs_sz_512 - 1))

Run partitioning program (e.g., fdisk) and edit partition table:

# fdisk <disk>

Verify resized filesystem and remount:

# e2fsck -f <dev>
# mount <dev>

Tru64 Installation

Braindead disklabel command on Tru64 cannot zero disk label if a foreign disk label is present. Fixed by low-level formatting the disk then zeroing the disk label, and finally restart the installation.

Wipe disk:


# scu -f /dev/rdisk/dsk1c
scu> format
scu> exit
# disklabel -z dsk1

Copy your installation config to floppy:


# fddisk -fmt /dev/rdisk/floppy0c
# disklabel -wr floppy0 rx23
# newfs /dev/rdisk/floppy0c
# mount /dev/disk/floppy0c /mnt
# cp /var/tmp/install_log_1 /mnt/install.cdf
# chmod 755 /mnt/*

Restart installation:


# cd /
# restart nogui

 ...
 Found file install.cdf on Floppy Diskette
 ...
 Would you like to use the Configuration Description File? (y/n) [y]: y
 Continuing installation...
 Validating the installation CDF
 ...

September 11, 2016 — arthur