# -*- Shell-script -*- # Copyright (C) 2007 - 2013 Steve Youngs # # A collection of Zsh functions that I use day to day for maintaining # and administering my machines. These come in very handy if you set up # one of your users as a "package manager". There is a corresponding # _zsh-pkgtools file that provides completion for most of what is here. H-pkg () { cat< -- print the source repo location of PKG with optional 2nd arg non-nil, also print repo type. pkgsu [PKGUSR] -- switch to user PKGUSR. pkg_install [DESCRIPTION] [USER] [GROUP] -- install a new package, DESCRIPTION must be quoted. pkg_ldconfig -- Run ldconfig. xtar [FILE] -- extract tarball FILE. sets tar(1) options based on file type. vtar [FILE] -- view the contents of tarball FILE. sets tar(1) options based on file type. ctar [FILE] [DIRECTORY] -- create a tarball FILE of DIRECTORY. Compression is automatically chosen from the filename. EOF } fpkg () { if [[ $ARGC -lt 1 || $ARGC -gt 1 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [REGEXP]" >&2 return 1 else sed -n '/^install:/,$p' /etc/group|cut -d: -f1| \ grep -i --colour ${argv[1]} fi } ppkg () { if [[ $ARGC -lt 1 || $ARGC -gt 1 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [NAME]" >&2 return 1 else pinky -l $argv[1]|less fi } cpkg () { if [[ $ARGC -lt 1 || $ARGC -gt 1 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [CMD]" >&2 return 1 else find $path -type f -regex "^.*/$argv[1].*$" \ -printf "%f -- (%u:%g)\n"|grep --colour '(.*)' fi } lpkg () { sed -n '/^install/p' /etc/group|cut -d: -f4|tr ',' '\n'|less } upkg() { if [[ $ARGC -lt 1 || $ARGC -gt 1 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [PKG]" >&2 return 1 else grep --colour 'Last_Updated:.*' ~$argv[1]/.project fi } Lpkg () { for pkg in $(sed -n '/^install/p' /etc/group|cut -d: -f4|tr ',' '\n'); do printf "${pkg}\t\t\t$(upkg ${pkg}|cut -d' ' -f3-)\n" done|less } vpkg() { if [[ $ARGC -lt 1 || $ARGC -gt 1 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [PKG]" >&2 return 1 else grep --colour 'Version: ' ~$argv[1]/.project fi } ipkg() { if [[ $ARGC -lt 1 || $ARGC -gt 1 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [PKG]" >&2 return 1 else local top=$(grep -n "Install Notes" ~$argv[1]/.project|cut -d: -f1) local bot=$(grep -n "General Notes" ~$argv[1]/.project|cut -d: -f1) sed -n ${top},${bot}p ~$argv[1]/.project fi } gpkg() { if [[ $ARGC -lt 1 || $ARGC -gt 1 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [PKG]" >&2 return 1 else local top=$(grep -n "General Notes" ~$argv[1]/.project|cut -d: -f1) local bot=$(grep -n "CONTENTS" ~$argv[1]/.project|cut -d: -f1) sed -n ${top},${bot}p ~$argv[1]/.project fi } dpkg() { if [[ $ARGC -lt 1 || $ARGC -gt 1 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [PKG]" >&2 return 1 else grep --colour 'Deps: ' ~$argv[1]/.project fi } wpkg() { if [[ $ARGC -lt 1 || $ARGC -gt 1 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [PKG]" >&2 return 1 else grep --colour 'Web_Site: ' ~$argv[1]/.project fi } pkgrepo() { if [[ $ARGC -lt 1 || $ARGC -gt 2 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [PKG] " >&2 return 1 else grep --colour 'Repo_Location: ' ~$argv[1]/.project [[ -n "$argv[2]" ]] && grep --colour 'Repo_Type: ' ~$argv[1]/.project fi } xtar() { if [[ $ARGC -lt 1 || $ARGC -gt 1 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [FILE]" >&2 return 1 fi local opts local type local fname=$argv[1] type=$(file ${fname}|cut -d' ' -f2) case $type in (tar) opts=xf ;; (gzip) opts=zxf ;; (bzip2) opts=jxf ;; (xz) opts=Jxf ;; (*) # try lzma if lzmainfo ${fname} &>/dev/null; then opts=(--lzma -xf) else printf "Unknown file type: %s\n" $type >&2 return 2 fi ;; esac tar ${opts} ${fname} } vtar() { if [[ $ARGC -lt 1 || $ARGC -gt 1 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [FILE]" >&2 return 1 fi local opts local type local fname=$argv[1] type=$(file ${fname}|cut -d' ' -f2) case $type in (tar) opts=tvvvf ;; (gzip) opts=ztvvvf ;; (bzip2) opts=jtvvvf ;; (xz) opts=Jtvvvf ;; (*) # lzma. Here because lzmainfo is too stupid if lzmainfo ${fname} &>/dev/null; then opts=(--lzma -tvvvf) else printf "Unknown file type: %s\n" $type >&2 return 2 fi ;; esac tar ${opts} ${fname}|less } ctar() { if [[ $ARGC -ne 2 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [FILE] [DIRECTORY]" >&2 return 1 fi local opts opts=(--create --owner=0 --group=0 --auto-compress --file) tar ${opts} $1 $2 } pkgsu() { if [[ $ARGC -lt 1 || $ARGC -gt 1 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [PKGUSR]" >&2 return 1 else ssh -l root localhost -t su $argv[1] fi } pkg_install() { if [[ $ARGC -lt 3 || $ARGC -gt 3 ]]; then echo Invalid or missing argument >&2 echo "Usage: $0 [DESCRIPTION] [USER] [GROUP]" >&2 return 1 else ssh -l root localhost -t install_package \ ${argv[1]} $argv[2] $argv[3] fi } alias pkg_ldconfig='ssh -l root localhost -t ldconfig' ### End