/usr/sbin
NameSizeModeActions
accessdb148080755editdlrm
add-shell10530755editdlrm
addgroup434320755editdlrm
adduser434320755editdlrm
agetty1101520755editdlrm
aspell-autobuildhash137080755editdlrm
badblocks434320755editdlrm
blkdiscard352080755editdlrm
blkid434320755editdlrm
blkzone925520755editdlrm
blockdev434320755editdlrm
bootlogd434320755editdlrm
cfdisk434320755editdlrm
chcpu474960755editdlrm
check_forensic9520755editdlrm
chgpasswd680160755editdlrm
chmem720720755editdlrm
chpasswd973680755editdlrm
chroot516240755editdlrm
convertquota806880755editdlrm
cron600640755editdlrm
ctrlaltdel434320755editdlrm
cytune434320755editdlrm
debugfs434320755editdlrm
delgroup212090755editdlrm
deluser212090755editdlrm
depmod434320755editdlrm
dpkg-preconfigure45630755editdlrm
dpkg-reconfigure45360755editdlrm
dumpe2fs434320755editdlrm
e2fsck434320755editdlrm
e2image434320755editdlrm
e2label434320755editdlrm
e2undo434320755editdlrm
edquota893600755editdlrm
faillock227760755editdlrm
fdformat434320755editdlrm
fdisk434320755editdlrm
findfs434320755editdlrm
fsck434320755editdlrm
fsck.cramfs434320755editdlrm
fsck.ext2434320755editdlrm
fsck.ext3434320755editdlrm
fsck.ext4434320755editdlrm
fsck.ext4dev434320755editdlrm
fsck.minix434320755editdlrm
fsck.nfs434320755editdlrm
fsfreeze147280755editdlrm
fstab-decode145760755editdlrm
fstrim884560755editdlrm
getty434320755editdlrm
groupadd434320755editdlrm
groupdel434320755editdlrm
groupmod434320755editdlrm
grpck639280755editdlrm
grpconv596720755editdlrm
grpunconv596720755editdlrm
halt434320755editdlrm
httxt2dbm145760755editdlrm
hwclock434320755editdlrm
iconvconfig311280755editdlrm
ifconfig434320755editdlrm
ifdown434320755editdlrm
ifup434320755editdlrm
init434320755editdlrm
insmod434320755editdlrm
insserv434320755editdlrm
installkernel434320755editdlrm
invoke-rc.d434320755editdlrm
ipmaddr434320755editdlrm
iptunnel434320755editdlrm
isosize434320755editdlrm
ispell-autobuildhash158950755editdlrm
killall5434320755editdlrm
ldattach352080755editdlrm
ldconfig9881680755editdlrm
logrotate923280755editdlrm
losetup434320755editdlrm
MAKEDEV434320755editdlrm
mii-tool434320755editdlrm
mke2fs434320755editdlrm
mkfs434320755editdlrm
mkfs.bfs434320755editdlrm
mkfs.cramfs434320755editdlrm
mkfs.ext2434320755editdlrm
mkfs.ext3434320755editdlrm
mkfs.ext4434320755editdlrm
mkfs.ext4dev434320755editdlrm
mkfs.minix434320755editdlrm
mkhomedir_helper146000755editdlrm
mkswap434320755editdlrm
modinfo434320755editdlrm
modprobe434320755editdlrm
nameif434320755editdlrm
newusers1095360755editdlrm
nologin229120755editdlrm
pam-auth-update214410755editdlrm
pam_getenv28900755editdlrm
pam_namespace_helper4670755editdlrm
pam_timestamp_check145840755editdlrm
pivot_root434320755editdlrm
plipconfig434320755editdlrm
policy-rc.d210755editdlrm
poweroff434320755editdlrm
pwck597840755editdlrm
pwconv555600755editdlrm
pwhistory_helper227760755editdlrm
pwunconv555760755editdlrm
quotacheck1141280755editdlrm
quotaoff852000755editdlrm
quotaon852000755editdlrm
quotastats144160755editdlrm
quota_nld848480755editdlrm
rarp434320755editdlrm
raw434320755editdlrm
rdev434320755editdlrm
readprofile434320755editdlrm
reboot434320755editdlrm
remove-default-ispell29320755editdlrm
remove-default-wordlist29310755editdlrm
remove-shell11110755editdlrm
repquota853600755editdlrm
resize2fs434320755editdlrm
rmmod434320755editdlrm
rmt647040755editdlrm
rmt-tar647040755editdlrm
route434320755editdlrm
rpc.rquotad891680755editdlrm
rtcwake556880755editdlrm
runlevel434320755editdlrm
runuser843600755editdlrm
select-default-ispell33030755editdlrm
select-default-wordlist32840755editdlrm
sendmail19630755editdlrm
service92150755editdlrm
setquota976160755editdlrm
sfdisk434320755editdlrm
shadowconfig434320755editdlrm
shutdown434320755editdlrm
slattach434320755editdlrm
split-logfile24150755editdlrm
start-stop-daemon444640755editdlrm
startpar434320755editdlrm
sulogin434320755editdlrm
swaplabel188240755editdlrm
swapoff515840755editdlrm
swapon434320755editdlrm
switch_root434320755editdlrm
sysctl434320755editdlrm
tarcat9360755editdlrm
tune2fs434320755editdlrm
tunelp434320755editdlrm
unix_chkpwd432562755editdlrm
unix_update432560755editdlrm
update-ca-certificates56720755editdlrm
update-default-aspell10280755editdlrm
update-default-ispell99100755editdlrm
update-default-wordlist76800755editdlrm
update-dictcommon-aspell10280755editdlrm
update-dictcommon-hunspell7820755editdlrm
update-fonts-alias58520755editdlrm
update-fonts-dir40760755editdlrm
update-fonts-scale62440755editdlrm
update-gsfontmap3900755editdlrm
update-info-dir17000755editdlrm
update-passwd434320755editdlrm
update-rc.d434320755editdlrm
update-shells40660755editdlrm
useradd434320755editdlrm
userdel434320755editdlrm
usermod434320755editdlrm
vigr745200755editdlrm
vipw745200755editdlrm
warnquota975200755editdlrm
wipefs515920755editdlrm
xqmstats144160755editdlrm
zic638160755editdlrm
zramctl1377360755editdlrm
Edit: /usr/sbin/update-shells (4066B)
#!/bin/sh # SPDX-License-Identifier: GPL-2.0-or-later # Copyright 2021 Helmut Grohne # A "hashset" is a shell variable containing a sequence of elements separated # and surrounded by hash (#) characters. None of the elements may contain a # hash character. The character is thus chosen, because it initiates a comment # in /etc/shells. All variables ending in _SHELLS in this file are hashsets. set -e # Check whether hashset $1 contains element $2. hashset_contains() { case "$1" in *"#$2#"*) return 0 ;; *) return 1 ;; esac } log() { if [ "$VERBOSE" = 1 ]; then echo "$*" fi } ROOT=${DPKG_ROOT:-} VERBOSE=0 NOACT=0 while [ $# -gt 0 ]; do case "$1" in --help) cat <&2 exit 1 fi ROOT=$1 ;; --verbose) VERBOSE=1 ;; *) echo "unrecognized option $1" 1>&2 exit 1 ;; esac shift done PKG_DIR="$ROOT/usr/share/debianutils/shells.d" STATE_FILE="$ROOT/var/lib/shells.state" TEMPLATE_ETC_FILE="$ROOT/usr/share/debianutils/shells" TARGET_ETC_FILE="$ROOT/etc/shells" SOURCE_ETC_FILE="$TARGET_ETC_FILE" NEW_ETC_FILE="$TARGET_ETC_FILE.tmp" NEW_STATE_FILE="$STATE_FILE.tmp" if ! test -e "$SOURCE_ETC_FILE"; then SOURCE_ETC_FILE="$TEMPLATE_ETC_FILE" fi PKG_SHELLS='#' LC_COLLATE=C.UTF-8 # glob in reproducible order for f in "$TEMPLATE_ETC_FILE" "$PKG_DIR/"*; do test -f "$f" || continue while IFS='#' read -r line _; do [ -n "$line" ] || continue if ! hashset_contains "$PKG_SHELLS" "$line"; then PKG_SHELLS="$PKG_SHELLS$line#" fi realshell=$(dpkg-realpath --root "$ROOT" "$(dirname "$line")")/$(basename "$line") if ! hashset_contains "$PKG_SHELLS" "$realshell"; then PKG_SHELLS="$PKG_SHELLS$realshell#" fi done < "$f" done STATE_SHELLS='#' if [ -e "$STATE_FILE" ] ; then while IFS='#' read -r line _; do [ -n "$line" ] && STATE_SHELLS="$STATE_SHELLS$line#" done < "$STATE_FILE" fi cleanup() { rm -f "$NEW_ETC_FILE" "$NEW_STATE_FILE" } trap cleanup EXIT : > "$NEW_ETC_FILE" ETC_SHELLS='#' while IFS= read -r line; do shell=${line%%#*} # copy all comment lines, packaged shells and local additions if [ -z "$shell" ] || hashset_contains "$PKG_SHELLS" "$shell" || ! hashset_contains "$STATE_SHELLS" "$shell"; then if [ -z "$shell" ] || ! hashset_contains "$ETC_SHELLS" "$shell"; then echo "$line" >> "$NEW_ETC_FILE" ETC_SHELLS="$ETC_SHELLS$shell#" fi else log "removing shell $shell" fi done < "$SOURCE_ETC_FILE" : > "$NEW_STATE_FILE" saved_IFS=$IFS IFS='#' set -f # shellcheck disable=SC2086 # word splitting intended, globbing disabled set -- ${PKG_SHELLS###} set +f IFS=$saved_IFS for shell; do echo "$shell" >> "$NEW_STATE_FILE" # add shells that are neither already present nor locally removed if ! hashset_contains "$ETC_SHELLS" "$shell" && ! hashset_contains "$STATE_SHELLS" "$shell"; then echo "$shell" >> "$NEW_ETC_FILE" log "adding shell $shell" fi done if [ "$NOACT" = 0 ]; then if [ -e "$STATE_FILE" ]; then chmod --reference="${STATE_FILE}" "${NEW_STATE_FILE}" || chmod $(stat -c %a "${STATE_FILE}") "${NEW_STATE_FILE}" chown --reference="${STATE_FILE}" "${NEW_STATE_FILE}" || chown $(stat -c %U "${STATE_FILE}") "${NEW_STATE_FILE}" else chmod 0644 "$NEW_STATE_FILE" fi chmod --reference="${SOURCE_ETC_FILE}" "${NEW_ETC_FILE}" || chmod $(stat -c %a "${SOURCE_ETC_FILE}") "${NEW_ETC_FILE}" chown --reference="${SOURCE_ETC_FILE}" "${NEW_ETC_FILE}" || chown $(stat -c %U "${SOURCE_ETC_FILE}") "${NEW_ETC_FILE}" sync -d "$NEW_ETC_FILE" "$NEW_STATE_FILE" mv -Z "${NEW_ETC_FILE}" "${TARGET_ETC_FILE}" || mv "${NEW_ETC_FILE}" "${TARGET_ETC_FILE}" sync "$TARGET_ETC_FILE" sync "$(dirname "$TARGET_ETC_FILE")" mv "$NEW_STATE_FILE" "$STATE_FILE" sync "$STATE_FILE" sync "$(dirname "$STATE_FILE")" trap "" EXIT fi