Linux okosságok

Dátum figyelés

function date_diff()
{
  date='2020-08-12T16:00:10'
  epoch=$(date -d "$date" +%s)
  if [ "$epoch" -lt "$(date -d '1 minute ago' +%s)" ] ; then
#[[ "$(date -d '2024-02-01 17:26:00' +%s)" -lt "$(date +%s)" ]] && echo elmult || echo nem
      echo At least 3 days ago
  else
      echo Too recent
  fi
}

Reboot, ha nem megy a szabályos reboot

# echo s > /proc/sysrq-trigger
# echo u > /proc/sysrq-trigger
# echo s > /proc/sysrq-trigger
# echo b > /proc/sysrq-trigger

This requests the kernel to do:

emergency sync of the block devices; mount readonly of all filesystems; again a sync; force an immediate boot; (you can also use o for poweroff)

dm-* device-ok felderítése

find /dev/ -name "dm-*" -exec readlink -n {} \; -exec echo " -->" {} \;

SCSI (re)scan

#!/bin/sh
for I in `ls -d /sys/class/scsi_device/*`; do
      echo ${I}
      echo "1" > ${I}/device/rescan
done
#!/bin/sh
for I in `ls -d /sys/class/scsi_host/host*`; do
      echo ${I}
      echo "- - -" > ${I}/scan
done

Yum-mal telepített csomagok listázása log fájlból

cat /var/log/yum.log | sed "s#.\+: \?\(.\+\)#\1#" | sort

Disk perf. teszt DD-vel

#!/bin/bash
echo -n "Fajl nev: "
read FNEV
echo -n "Blokk meret (Byte): "
read BS
echo -n "Fajl meret (MByte): "
read FS
COUNT=$((FS*1024*1024 / $BS))
COUNT=$(echo $COUNT | sed 's/\..*$/g/')
echo -n "Diszk irasa (dd if=/dev/zero of=$FNEV bs=$BS count=$COUNT)… "
SEC=$(timex dd if=/dev/zero of=$FNEV bs=$BS count=$COUNT 2>&1 | awk '/real/{print $2}' | awk -F'.' '{print $1}')
echo "$(($FS / $SEC)) MB/s"

BOOT probléma

GRUB menüben a „quiet” paraméter helyére „dracut rdshell”-t betenni

~/.vimrc

set number background=dark
syntax on
highlight Comment    ctermfg=119
highlight Identifier ctermfg=99AA00
set ts=4 sw=4
undolevels=1000

RAID megoldások

MYSQL mentés

Mentés (/etc/mysql/debian.cnf is kell a jelszó miatt):

mysqldump -u root -ptitok --single-transaction --opt --all-databases -R

Visszaállítás:

mysql -u root -ptitok -B adatbazis < mentes.sql

LVM snapshot készítés

lvdisplay -C -olv_name,lv_path --noheadings
lvcreate -s -L 1G -n blabla /dev/vg/blablalv
lvdisplay -C -S lv_role=snapshot

sudo jog másik userhez

non-root-user ALL = (appuser) NOPASSWD: ALL

NMON adatgyűjtés

#!/bin/sh

if [ $? -ne 0 ]; then exit 1; fi
ps -ef | grep '[n]mon ' | awk '{print $2}' | while read PID; do kill $PID; done
find /tmp/nmon/$(hostname)_* -type f -maxdepth 1 -mtime +30 -exec rm -f {} \;
# vagy betomoritve:
# find /tmp/nmon/$(hostname)_* -type f -maxdepth 1 -mtime +30 -print0 | xargs -0 tar zcvf $(hostname)_blabla.tar.gz

# Mintaveteli periodus (masodperc)
INTERVAL=60
# Meres idotartama (ora)
DURA=24

SAMPLES=`expr $DURA \* 3600 / $INTERVAL`
cd /tmp/nmon
nmon -f -s $INTERVAL -c $SAMPLES

Email címek extraktálása AIX alatt

perl -wne'while(/[\w\.\-]+@[\w\.\-]+\w+/g){print "$&\n"}'

Hiányzik az "add-apt-repository":

sudo apt-get install --reinstall python-software-properties && sudo dpkg-reconfigure python-software-properties

Java install:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer
java -version

Mennyi helyet foglal egy bizonyos fájl csoport?

find / -name "*\.trc" -print0 | du --files0-from=- -hc | tail -n1

Milyen felbontásokat támogat a webcam?

$ lsusb
  Bus 001 Device 002: ID 5986:0241 Acer, Inc BisonCam, NB Pro
$ lsusb -s 001:002 -v | egrep "Width|Height"
  wWidth    640
  wHeight   480
  wWidth    1280
  wHeight   1024
...

Helyhasználat listázása fájlrendszerben userenként

find / -printf '%u %k\n' | awk '{arr[$1]+=$2} END {for (i in arr) {print i,arr[i]}}'

SWAP használat listázása processzenként

#!/bin/bash
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
echo "Swappiness: $(cat /proc/sys/vm/swappiness)"
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
let OVERALL=$OVERALL+$SUM
SUM=0
done
echo "Overall swap used: $OVERALL"

Törölt fájlok, amik nem szabadították még fel a helyet

lsof |(sed 1q; grep deleted)
  

Hosszú processz végeztéről értesítő email

#!/bin/bash
MAILTO="rvenyige@pcs.hu,pagoston@pcs.hu"
SSH="ssh -i /home/pagoston/.ssh/id_rsa pagoston@sapeltora "
while [ $($SSH "ps -ef | awk '{print $2}'" | grep -c "$1") -gt 0 ]; do
        sleep 60
done
echo Lefutott | mail -s "Process $1 lefutott (${hostname})" $MAILTO

processz elrejtése a PS kimenetből

/* https://unix.stackexchange.com/a/403918/119298
 * capture calls to a routine and replace with your code
 * gcc -Wall -O2 -fpic -shared -ldl -o shim_main.so shim_main.c
 * LD_PRELOAD=/.../shim_main.so theprogram theargs...
 */
#define _GNU_SOURCE /* needed to get RTLD_NEXT defined in dlfcn.h */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <dlfcn.h>

typedef int (*pfi)(int, char **, char **);
static pfi real_main;

/* copy argv to new location */
char **copyargs(int argc, char** argv){
    char **newargv = malloc((argc+1)*sizeof(*argv));
    char *from,*to;
    int i,len;

    for(i = 0; i<argc; i++){
        from = argv[i];
        len = strlen(from)+1;
        to = malloc(len);
        memcpy(to,from,len);
        memset(from,'\0',len);    /* zap old argv space */
        newargv[i] = to;
        argv[i] = 0;
    }
    newargv[argc] = 0;
    return newargv;
}

static int mymain(int argc, char** argv, char** env) {
    fprintf(stderr, "main argc %d\n", argc);
    return real_main(argc, copyargs(argc,argv), env);
}

int __libc_start_main(pfi main, int argc,
                      char **ubp_av, void (*init) (void),
                      void (*fini)(void),
                      void (*rtld_fini)(void), void (*stack_end)){
    static int (*real___libc_start_main)() = NULL;

    if (!real___libc_start_main) {
        char *error;
        real___libc_start_main = dlsym(RTLD_NEXT, "__libc_start_main");
        if ((error = dlerror()) != NULL) {
            fprintf(stderr, "%s\n", error);
            exit(1);
        }
    }
    real_main = main;
    return real___libc_start_main(mymain, argc, ubp_av, init, fini,
            rtld_fini, stack_end);
}

Hasznos oldalak