Add ws function: web search
[khome.git] / home / lib / login_functions.sh
index 1f69061..ae4e98e 100644 (file)
@@ -1,5 +1,10 @@
 #
 
+## ws: web search
+ws() {
+    firefox --search "$*"
+}
+
 d() {
     local -r word=$(fzf < /usr/share/dict/words)
     dict "$word"
@@ -256,7 +261,7 @@ _yt() {
     local -r opts="$3"
 
     local -r id=$(youtube-dlc --get-id "$uri")
-    local -r title=$(youtube-dlc --get-title "$uri" | sed 's/[^A-Za-z0-9._-]/_/g')
+    local -r title=$(youtube-dlc --get-title "$uri" | sed 's/[^А-Яа-яA-Za-z0-9._-]/_/g')
     local -r dir="${base_dir}/${title}--${id}"
 
     mkdir -p "$dir"
@@ -536,13 +541,11 @@ status() {
     echo
 
     printf '%smem by proc\n' "$indent_unit"
-    ps -eo rss,cmd \
+    ps -eo rss,comm \
     | awk -v total="$(free | awk '$1 == "Mem:" {print $2; exit}')" '
         NR > 1 {
             rss = $1
-            cmd = $2
-            n = split(cmd, path, "/")  # _may_ be a path
-            proc = path[n]
+            proc = $2
             by_proc[proc] += rss
         }
 
@@ -667,10 +670,10 @@ status() {
 
     echo "${indent_unit}<->"
 
-    printf '%sTCP' "${indent_unit}${indent_unit}"
+    printf '%sTCP\t' "${indent_unit}${indent_unit}"
     sudo -n netstat -tnp \
     | awk 'NR > 2 && $6 == "ESTABLISHED" {print $7}' \
-    | awk -F/ '{print $2}' \
+    | awk '{sub("^[0-9]+/", ""); print}' \
     | sort -u \
     | xargs \
     | column -t
@@ -678,19 +681,75 @@ status() {
     # TODO: iptables summary
 }
 
-ssh_invalid_attempts_from() {
+ssh_invalid_by_addr() {
     awk '
         /: Invalid user/ && $5 ~ /^sshd/ {
-            u=$8
             addr=$10 == "port" ? $9 : $10
             max++
-            curr[addr]++
+            by_addr[addr]++
+        }
+
+        END {
+            for (addr in by_addr)
+                if ((c = by_addr[addr]) > 1)
+                    printf "%d %d %s\n", c, max, addr
+        }
+        ' \
+        /var/log/auth.log \
+        /var/log/auth.log.1 \
+    | sort -n -k 1 \
+    | bar_gauge -v width="$(stty size | awk '{print $2}')" -v num=1 -v ch_right=' ' -v ch_left=' ' -v ch_blank=' ' \
+    | column -t
+}
+
+ssh_invalid_by_day() {
+    awk '
+       BEGIN {
+           m["Jan"] = "01"
+           m["Feb"] = "02"
+           m["Mar"] = "03"
+           m["Apr"] = "04"
+           m["May"] = "05"
+           m["Jun"] = "06"
+           m["Jul"] = "07"
+           m["Aug"] = "08"
+           m["Sep"] = "09"
+           m["Oct"] = "10"
+           m["Nov"] = "11"
+           m["Dec"] = "12"
+       }
+
+       /: Invalid user/ && $5 ~ /^sshd/ {
+           day = m[$1] "-" $2
+           max++
+           by_day[day]++
+       }
+
+       END {
+           for (day in by_day)
+               if ((c = by_day[day]) > 1)
+                   printf "%d %d %s\n", c, max, day
+       }
+        ' \
+        /var/log/auth.log \
+        /var/log/auth.log.1 \
+    | sort -k 3 \
+    | bar_gauge -v width="$(stty size | awk '{print $2}')" -v num=1 -v ch_right=' ' -v ch_left=' ' -v ch_blank=' ' \
+    | column -t
+}
+
+ssh_invalid_by_user() {
+    awk '
+        /: Invalid user/ && $5 ~ /^sshd/ {
+            user=$8
+            max++
+            by_user[user]++
         }
 
         END {
-            for (addr in curr)
-                if ((c = curr[addr]) > 1)
-                    print c, max, addr
+            for (user in by_user)
+                if ((c = by_user[user]) > 1)
+                    printf "%d %d %s\n", c, max, user
         }
         ' \
         /var/log/auth.log \
This page took 0.035638 seconds and 4 git commands to generate.