mirror of
https://github.com/robbyrussell/oh-my-zsh.git
synced 2026-09-28 22:16:05 +02:00
Compare commits
12
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b20d95c390 | ||
|
|
74965c9609 | ||
|
|
1b2d741f19 | ||
|
|
4ccc63333c | ||
|
|
40bddc3c1a | ||
|
|
8d421b6309 | ||
|
|
7d1b2a25ca | ||
|
|
86ef6555e0 | ||
|
|
32d7277ac3 | ||
|
|
e0d3557e14 | ||
|
|
b6830a53d5 | ||
|
|
fa82d8a3eb |
@@ -5,6 +5,7 @@ plugins/eza/ @pepoluan
|
|||||||
plugins/genpass/ @atoponce
|
plugins/genpass/ @atoponce
|
||||||
plugins/git-lfs/ @hellovietduc
|
plugins/git-lfs/ @hellovietduc
|
||||||
plugins/gitfast/ @felipec
|
plugins/gitfast/ @felipec
|
||||||
|
plugins/hermes/ @Uhm-why
|
||||||
plugins/kube-ps1/ @mcornella
|
plugins/kube-ps1/ @mcornella
|
||||||
plugins/kubectl/ @mcornella
|
plugins/kubectl/ @mcornella
|
||||||
plugins/kubectx/ @mcornella
|
plugins/kubectx/ @mcornella
|
||||||
|
|||||||
+82
-2
@@ -131,9 +131,89 @@ if [[ -z "$ZSH_COMPDUMP" ]]; then
|
|||||||
ZSH_COMPDUMP="${ZDOTDIR:-$HOME}/.zcompdump-${SHORT_HOST}-${ZSH_VERSION}"
|
ZSH_COMPDUMP="${ZDOTDIR:-$HOME}/.zcompdump-${SHORT_HOST}-${ZSH_VERSION}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Construct zcompdump OMZ metadata
|
# Resolve the commit $ZSH is checked out at into $REPLY by reading the git
|
||||||
zcompdump_revision="#omz revision: $(builtin cd -q "$ZSH"; git rev-parse HEAD 2>/dev/null)"
|
# directory, so that no git process is forked on every startup.
|
||||||
|
# Handles .git files (worktrees, submodules), worktree common dirs, detached
|
||||||
|
# HEADs and packed refs. Returns 1 if anything is unexpected.
|
||||||
|
_omz_git_head() {
|
||||||
|
local gitdir="$ZSH/.git" common head ref
|
||||||
|
local -a lines
|
||||||
|
REPLY=
|
||||||
|
|
||||||
|
# .git may be a file pointing at the real git dir
|
||||||
|
if [[ -f "$gitdir" ]]; then
|
||||||
|
read -r head 2>/dev/null < "$gitdir" || return 1
|
||||||
|
[[ "$head" = "gitdir: "* ]] || return 1
|
||||||
|
gitdir="${head#gitdir: }"
|
||||||
|
[[ -n "$gitdir" ]] || return 1
|
||||||
|
[[ "$gitdir" = /* ]] || gitdir="$ZSH/$gitdir"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# worktrees keep their refs in the common git dir
|
||||||
|
common="$gitdir"
|
||||||
|
if [[ -f "$gitdir/commondir" ]]; then
|
||||||
|
read -r common 2>/dev/null < "$gitdir/commondir" || return 1
|
||||||
|
[[ "$common" = /* ]] || common="$gitdir/$common"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ -r "$gitdir/HEAD" ]] || return 1
|
||||||
|
read -r head 2>/dev/null < "$gitdir/HEAD" || return 1
|
||||||
|
|
||||||
|
if [[ "$head" = ref:\ * ]]; then
|
||||||
|
ref="${head#ref: }"
|
||||||
|
|
||||||
|
# Only use well-formed full ref names as paths. Besides matching Git's ref
|
||||||
|
# rules, this prevents a malformed HEAD from escaping the git directory.
|
||||||
|
[[ "$ref" = refs/?* \
|
||||||
|
&& "$ref" != *..* \
|
||||||
|
&& "$ref" != *//* \
|
||||||
|
&& "$ref" != */ \
|
||||||
|
&& "$ref" != */.* \
|
||||||
|
&& "$ref" != *.lock \
|
||||||
|
&& "$ref" != *.lock/* \
|
||||||
|
&& "$ref" != *. \
|
||||||
|
&& "$ref" != *'@{'* \
|
||||||
|
&& "$ref" != *[[:cntrl:]\ \~\^\:\?\*\[\\]* \
|
||||||
|
]] || return 1
|
||||||
|
|
||||||
|
case "$ref" in
|
||||||
|
# These namespaces are private to each worktree and are never resolved
|
||||||
|
# from the common directory or its packed-refs file.
|
||||||
|
refs/bisect/*|refs/worktree/*|refs/rewritten/*)
|
||||||
|
[[ -r "$gitdir/$ref" ]] || return 1
|
||||||
|
read -r REPLY 2>/dev/null < "$gitdir/$ref" || return 1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if [[ -r "$common/$ref" ]]; then
|
||||||
|
read -r REPLY 2>/dev/null < "$common/$ref" || return 1
|
||||||
|
elif [[ -r "$common/packed-refs" ]]; then
|
||||||
|
lines=("${(@f)$(<"$common/packed-refs")}")
|
||||||
|
REPLY="${lines[(r)* ${(b)ref}]%% *}"
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
# detached HEAD: the file holds the commit itself
|
||||||
|
REPLY="$head"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# only an object ID is a usable answer: a symbolic ref, a malformed file or
|
||||||
|
# a missed packed entry all fall through to the git fallback instead
|
||||||
|
[[ -n "$REPLY" && -z "${REPLY//[0-9a-f]/}" ]] \
|
||||||
|
&& (( ${#REPLY} == 40 || ${#REPLY} == 64 ))
|
||||||
|
}
|
||||||
|
|
||||||
|
# Construct zcompdump OMZ metadata. The helper reports through $REPLY, so
|
||||||
|
# call it in a scope that keeps that out of the global namespace.
|
||||||
|
() {
|
||||||
|
local REPLY
|
||||||
|
_omz_git_head || REPLY="$(builtin cd -q "$ZSH"; git rev-parse HEAD 2>/dev/null)"
|
||||||
|
typeset -g zcompdump_revision="#omz revision: $REPLY"
|
||||||
|
}
|
||||||
zcompdump_fpath="#omz fpath: $fpath"
|
zcompdump_fpath="#omz fpath: $fpath"
|
||||||
|
unset -f _omz_git_head
|
||||||
|
|
||||||
# Check whether the zcompdump file carries the current OMZ metadata lines
|
# Check whether the zcompdump file carries the current OMZ metadata lines
|
||||||
_omz_compdump_has_metadata() {
|
_omz_compdump_has_metadata() {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ plugins=(... docker-compose)
|
|||||||
|-----------|----------------------------------|----------------------------------------------------------------------------------|
|
|-----------|----------------------------------|----------------------------------------------------------------------------------|
|
||||||
| dco | `docker-compose` | Docker-compose main command |
|
| dco | `docker-compose` | Docker-compose main command |
|
||||||
| dcb | `docker-compose build` | Build containers |
|
| dcb | `docker-compose build` | Build containers |
|
||||||
| dcc | `docker-compose config` | Parse, resolve and render compose file in canonical format |
|
| dcc | `docker-compose config` | Parse, resolve and render compose file in canonical format |
|
||||||
| dce | `docker-compose exec` | Execute command inside a container |
|
| dce | `docker-compose exec` | Execute command inside a container |
|
||||||
| dcps | `docker-compose ps` | List containers |
|
| dcps | `docker-compose ps` | List containers |
|
||||||
| dcrestart | `docker-compose restart` | Restart container |
|
| dcrestart | `docker-compose restart` | Restart container |
|
||||||
@@ -35,3 +35,6 @@ plugins=(... docker-compose)
|
|||||||
| dcpull | `docker-compose pull` | Pull image of a service |
|
| dcpull | `docker-compose pull` | Pull image of a service |
|
||||||
| dcstart | `docker-compose start` | Start a container |
|
| dcstart | `docker-compose start` | Start a container |
|
||||||
| dck | `docker-compose kill` | Kills containers |
|
| dck | `docker-compose kill` | Kills containers |
|
||||||
|
| dcv | `docker-compose version` | Show version information |
|
||||||
|
| dcsts | `docker-compose stats` | Show stats of containers |
|
||||||
|
| dci | `docker-compose images` | List images |
|
||||||
|
|||||||
@@ -24,5 +24,8 @@ alias dclF="$dccmd logs -f --tail 0"
|
|||||||
alias dcpull="$dccmd pull"
|
alias dcpull="$dccmd pull"
|
||||||
alias dcstart="$dccmd start"
|
alias dcstart="$dccmd start"
|
||||||
alias dck="$dccmd kill"
|
alias dck="$dccmd kill"
|
||||||
|
alias dcv="$dccmd version"
|
||||||
|
alias dcsts="$dccmd stats"
|
||||||
|
alias dci="$dccmd images"
|
||||||
|
|
||||||
unset dccmd
|
unset dccmd
|
||||||
|
|||||||
@@ -45,6 +45,36 @@ If `yes`, always add `-h` flag to add a header row for each column.
|
|||||||
|
|
||||||
Default: `no`
|
Default: `no`
|
||||||
|
|
||||||
|
### `links`
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
zstyle ':omz:plugins:eza' 'links' yes|no
|
||||||
|
```
|
||||||
|
|
||||||
|
If `yes`, always add `-H` flag to show hard links for each file.
|
||||||
|
|
||||||
|
Default: `no`
|
||||||
|
|
||||||
|
### `octal`
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
zstyle ':omz:plugins:eza' 'octal' yes|no
|
||||||
|
```
|
||||||
|
|
||||||
|
If `yes`, always add `-o` flag to show file permissions as octal numbers.
|
||||||
|
|
||||||
|
Default: `no`
|
||||||
|
|
||||||
|
### `inodes`
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
zstyle ':omz:plugins:eza' 'inodes' yes|no
|
||||||
|
```
|
||||||
|
|
||||||
|
If `yes`, always add `-i` flag to show the inode for each file.
|
||||||
|
|
||||||
|
Default: `no`
|
||||||
|
|
||||||
### `show-group`
|
### `show-group`
|
||||||
|
|
||||||
```zsh
|
```zsh
|
||||||
|
|||||||
@@ -21,6 +21,15 @@ function _configure_eza() {
|
|||||||
if zstyle -t ':omz:plugins:eza' 'header'; then
|
if zstyle -t ':omz:plugins:eza' 'header'; then
|
||||||
_EZA_HEAD+=("h")
|
_EZA_HEAD+=("h")
|
||||||
fi
|
fi
|
||||||
|
if zstyle -t ':omz:plugins:eza' 'links'; then
|
||||||
|
_EZA_HEAD+=("H")
|
||||||
|
fi
|
||||||
|
if zstyle -t ':omz:plugins:eza' 'octal'; then
|
||||||
|
_EZA_HEAD+=("o")
|
||||||
|
fi
|
||||||
|
if zstyle -t ':omz:plugins:eza' 'inodes'; then
|
||||||
|
_EZA_HEAD+=("i")
|
||||||
|
fi
|
||||||
zstyle -s ':omz:plugins:eza' 'size-prefix' _val
|
zstyle -s ':omz:plugins:eza' 'size-prefix' _val
|
||||||
case "${_val:l}" in
|
case "${_val:l}" in
|
||||||
binary)
|
binary)
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ function frontend() {
|
|||||||
codepen 'https://codepen.io/search/pens?q='
|
codepen 'https://codepen.io/search/pens?q='
|
||||||
compassdoc 'http://compass-style.org/search?q='
|
compassdoc 'http://compass-style.org/search?q='
|
||||||
cssflow 'http://www.cssflow.com/search?q='
|
cssflow 'http://www.cssflow.com/search?q='
|
||||||
dartlang 'https://api.dartlang.org/apidocs/channels/stable/dartdoc-viewer/dart:'
|
dartlang $(_frontend_fallback 'dart.dev')
|
||||||
emberjs $(_frontend_fallback 'emberjs.com/')
|
emberjs $(_frontend_fallback 'emberjs.com/')
|
||||||
flowtype $(_frontend_fallback 'flow.org/en/docs/')
|
flowtype $(_frontend_fallback 'flow.org/en/docs/')
|
||||||
fontello 'http://fontello.com/#search='
|
fontello 'http://fontello.com/#search='
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ plugin is loaded, which is usually when you start up a new terminal emulator.
|
|||||||
|
|
||||||
The cache is stored at:
|
The cache is stored at:
|
||||||
|
|
||||||
- `$ZSH/plugins/gh/_gh` completions script
|
- `$ZSH_CACHE_DIR/completions/_gh` completions script
|
||||||
|
|
||||||
- `$ZSH_CACHE_DIR/gh_version` version of GitHub CLI, used to invalidate
|
If an update fails, the last successfully generated completion script is kept.
|
||||||
the cache.
|
|
||||||
|
|||||||
@@ -13,6 +13,12 @@ fi
|
|||||||
|
|
||||||
zmodload -F zsh/files b:zf_mv
|
zmodload -F zsh/files b:zf_mv
|
||||||
() {
|
() {
|
||||||
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_gh"
|
local completion_file="$ZSH_CACHE_DIR/completions/_gh"
|
||||||
zf_mv -f -- =( gh completion --shell zsh ) "$TMPPREFIX"
|
local completion_tmp="${completion_file}.$$.${RANDOM}"
|
||||||
|
|
||||||
|
if gh completion --shell zsh >| "$completion_tmp" && [[ -s "$completion_tmp" ]]; then
|
||||||
|
zf_mv -f -- "$completion_tmp" "$completion_file"
|
||||||
|
fi
|
||||||
|
|
||||||
|
command rm -f -- "$completion_tmp"
|
||||||
} &|
|
} &|
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# GitLab CLI plugin
|
||||||
|
|
||||||
|
This plugin adds completion for the [GitLab CLI](https://docs.gitlab.com/cli/).
|
||||||
|
|
||||||
|
To use it, add `glab` to the plugins array in your zshrc file:
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
plugins=(... glab)
|
||||||
|
```
|
||||||
|
|
||||||
|
This plugin does not add any aliases.
|
||||||
|
|
||||||
|
## Cache
|
||||||
|
|
||||||
|
This plugin caches the completion script at `$ZSH_CACHE_DIR/completions/_glab`.
|
||||||
|
|
||||||
|
The cache is regenerated in the background whenever the plugin is loaded, which
|
||||||
|
usually happens when you start a new Zsh session.
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Autocompletion for the GitLab CLI (glab).
|
||||||
|
if (( ! $+commands[glab] )); then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If the completion file doesn't exist yet, we need to autoload it and
|
||||||
|
# bind it to `glab`. Otherwise, compinit will have already done that.
|
||||||
|
if [[ ! -f "$ZSH_CACHE_DIR/completions/_glab" ]]; then
|
||||||
|
typeset -g -A _comps
|
||||||
|
autoload -Uz _glab
|
||||||
|
_comps[glab]=_glab
|
||||||
|
fi
|
||||||
|
|
||||||
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_glab"
|
||||||
|
zf_mv -f -- =( glab completion -s zsh ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
@@ -15,7 +15,6 @@ function gradle-or-gradlew() {
|
|||||||
|
|
||||||
# if gradlew found, run it instead of gradle
|
# if gradlew found, run it instead of gradle
|
||||||
if [[ -f "$project_root/gradlew" ]]; then
|
if [[ -f "$project_root/gradlew" ]]; then
|
||||||
echo "executing gradlew instead of gradle"
|
|
||||||
"$project_root/gradlew" "$@"
|
"$project_root/gradlew" "$@"
|
||||||
else
|
else
|
||||||
command gradle "$@"
|
command gradle "$@"
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# hermes plugin
|
||||||
|
|
||||||
|
This plugin adds completions for the Hermes AI agent.
|
||||||
|
|
||||||
|
To use it, add `hermes` to the plugin array in your zshrc file:
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
plugins=(... hermes)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
hermes <TAB>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common Workflows
|
||||||
|
|
||||||
|
```zsh
|
||||||
|
# First time setup/updating overall config
|
||||||
|
hermes setup
|
||||||
|
|
||||||
|
# Starting the tui chat
|
||||||
|
hermes
|
||||||
|
|
||||||
|
# Changing default model
|
||||||
|
hermes model
|
||||||
|
```
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
if (( ! $+commands[hermes] )); then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -f "$ZSH_CACHE_DIR/completions/_hermes" ]]; then
|
||||||
|
typeset -g -A _comps
|
||||||
|
autoload -Uz _hermes
|
||||||
|
_comps[hermes]=_hermes
|
||||||
|
fi
|
||||||
|
|
||||||
|
zmodload -F zsh/files b:zf_mv
|
||||||
|
() {
|
||||||
|
local TMPPREFIX="$ZSH_CACHE_DIR/completions/_hermes"
|
||||||
|
zf_mv -f -- =( hermes completion zsh < /dev/null 2> /dev/null ) "$TMPPREFIX"
|
||||||
|
} &|
|
||||||
@@ -19,4 +19,6 @@ Provided aliases:
|
|||||||
- `ot`: generates a MFA code based on the given key and copies it to the clipboard
|
- `ot`: generates a MFA code based on the given key and copies it to the clipboard
|
||||||
(on Linux it relies on xsel, on MacOS X it uses pbcopy instead).
|
(on Linux it relies on xsel, on MacOS X it uses pbcopy instead).
|
||||||
|
|
||||||
The plugin uses `$HOME/.otp` to store its internal files.
|
The plugin stores its internal files in `$OTP_HOME`, which can be set in your zshrc.
|
||||||
|
If `$OTP_HOME` is not set it defaults to either `$HOME/.otp` or `$XDG_DATA_HOME/otp`,
|
||||||
|
depending on whether `~/.otp` already exists, or whether `$XDG_DATA_HOME` is set.
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
export OTP_HOME=~/.otp
|
if [[ -z "$OTP_HOME" ]]; then
|
||||||
|
if [[ ! -d "$HOME/.otp" ]] && [[ -n "$XDG_DATA_HOME" ]]; then
|
||||||
|
export OTP_HOME="$XDG_DATA_HOME/otp"
|
||||||
|
else
|
||||||
|
export OTP_HOME=~/.otp
|
||||||
|
fi
|
||||||
|
fi
|
||||||
mkdir -p $OTP_HOME
|
mkdir -p $OTP_HOME
|
||||||
|
|
||||||
function ot () {
|
function ot () {
|
||||||
|
|||||||
@@ -33,10 +33,10 @@ plugins=(... systemadmin)
|
|||||||
| killit | Kills any process that matches a regular expression passed to it |
|
| killit | Kills any process that matches a regular expression passed to it |
|
||||||
| tree | List contents of directories in a tree-like format (if tree isn't installed) |
|
| tree | List contents of directories in a tree-like format (if tree isn't installed) |
|
||||||
| sortcons | Sort connections by state |
|
| sortcons | Sort connections by state |
|
||||||
| con80 | View all 80 Port Connections |
|
| con80 | View all connections on ports 80 and 443, or on the ports given as arguments (`con80 8080`) |
|
||||||
| sortconip | On the connected IP sorted by the number of connections |
|
| sortconip | On the connected IP sorted by the number of connections |
|
||||||
| req20 | List the top 20 requests on port 80 |
|
| req20 | List the top 20 requests on ports 80 and 443, or on the ports given as arguments (`req20 8080`) |
|
||||||
| http20 | List the top 20 connections to port 80 based on tcpdump data |
|
| http20 | List the top 20 connections to ports 80 and 443 based on tcpdump data, or to the ports given as arguments |
|
||||||
| timewait20 | List the top 20 time_wait connections |
|
| timewait20 | List the top 20 time_wait connections |
|
||||||
| syn20 | List the top 20 SYN connections |
|
| syn20 | List the top 20 SYN connections |
|
||||||
| port_pro | Output all processes according to the port number |
|
| port_pro | Output all processes according to the port number |
|
||||||
|
|||||||
@@ -65,60 +65,90 @@ fi
|
|||||||
|
|
||||||
# Sort connection state
|
# Sort connection state
|
||||||
function sortcons() {
|
function sortcons() {
|
||||||
{
|
if (( $+commands[ss] )); then
|
||||||
LANG= ss -nat | awk 'NR > 1 {print $1}' \
|
LANG= ss -nat | awk 'NR > 1 {print $1}'
|
||||||
|| LANG= netstat -nat | awk 'NR > 2 {print $6}'
|
else
|
||||||
} | sort | uniq -c | sort -rn
|
LANG= netstat -nat | awk 'NR > 2 {print $6}'
|
||||||
|
fi | sort | uniq -c | sort -rn
|
||||||
}
|
}
|
||||||
|
|
||||||
# View all 80 Port Connections
|
function _systemadmin_validate_ports() {
|
||||||
|
local port
|
||||||
|
for port in "$@"; do
|
||||||
|
if [[ $port != <0-65535> || ( $port == 0* && $port != 0 ) ]]; then
|
||||||
|
print -u2 "systemadmin: invalid port '$port' (expected 0 to 65535 without leading zeros)"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# View all connections on the given ports (default 80 and 443)
|
||||||
function con80() {
|
function con80() {
|
||||||
{
|
local -a ports=("$@")
|
||||||
LANG= ss -nat || LANG= netstat -nat
|
(( $# )) || ports=(80 443)
|
||||||
} | grep -E ":80[^0-9]" | wc -l
|
_systemadmin_validate_ports "${ports[@]}" || return
|
||||||
|
if (( $+commands[ss] )); then
|
||||||
|
LANG= ss -nat
|
||||||
|
else
|
||||||
|
LANG= netstat -nat
|
||||||
|
fi | grep -E ":(${(j:|:)ports})([[:space:]]|$)" | wc -l
|
||||||
}
|
}
|
||||||
|
|
||||||
# On the connected IP sorted by the number of connections
|
# On the connected IP sorted by the number of connections
|
||||||
function sortconip() {
|
function sortconip() {
|
||||||
{
|
if (( $+commands[ss] )); then
|
||||||
LANG= ss -ntu | awk 'NR > 1 {print $6}' \
|
LANG= ss -ntu | awk 'NR > 1 {print $6}'
|
||||||
|| LANG= netstat -ntu | awk 'NR > 2 {print $5}'
|
else
|
||||||
} | cut -d: -f1 | sort | uniq -c | sort -n
|
LANG= netstat -ntu | awk 'NR > 2 {print $5}'
|
||||||
|
fi | cut -d: -f1 | sort | uniq -c | sort -n
|
||||||
}
|
}
|
||||||
|
|
||||||
# top20 of Find the number of requests on 80 port
|
# top20 of Find the number of requests on the given ports (default 80 and 443)
|
||||||
function req20() {
|
function req20() {
|
||||||
{
|
local -a ports=("$@")
|
||||||
LANG= ss -tn | awk '$4 ~ /:80$/ {print $5}' \
|
(( $# )) || ports=(80 443)
|
||||||
|| LANG= netstat -tn | awk '$4 ~ /:80$/ {print $5}'
|
_systemadmin_validate_ports "${ports[@]}" || return
|
||||||
} | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -n 20
|
if (( $+commands[ss] )); then
|
||||||
|
LANG= ss -tn
|
||||||
|
else
|
||||||
|
LANG= netstat -tn
|
||||||
|
fi | awk -v ports="${(j:|:)ports}" '$4 ~ ":("ports")$" {print $5}' \
|
||||||
|
| awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -n 20
|
||||||
}
|
}
|
||||||
|
|
||||||
# top20 of Using tcpdump port 80 access to view
|
# top20 of Using tcpdump to view access to the given ports (default 80 and 443)
|
||||||
function http20() {
|
function http20() {
|
||||||
sudo tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | head -n 20
|
local -a ports=("$@")
|
||||||
|
(( $# )) || ports=(80 443)
|
||||||
|
_systemadmin_validate_ports "${ports[@]}" || return
|
||||||
|
sudo tcpdump -i eth0 -tnn -c 1000 "dst port ${(j: or :)ports}" | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr | head -n 20
|
||||||
}
|
}
|
||||||
|
|
||||||
# top20 of Find time_wait connection
|
# top20 of Find time_wait connection
|
||||||
function timewait20() {
|
function timewait20() {
|
||||||
{
|
if (( $+commands[ss] )); then
|
||||||
LANG= ss -nat | awk 'NR > 1 && /TIME-WAIT/ {print $5}' \
|
LANG= ss -nat
|
||||||
|| LANG= netstat -nat | awk 'NR > 2 && /TIME_WAIT/ {print $5}'
|
else
|
||||||
} | sort | uniq -c | sort -rn | head -n 20
|
LANG= netstat -nat
|
||||||
|
fi | awk '/TIME[-_]WAIT/ {print $5}' | sort | uniq -c | sort -rn | head -n 20
|
||||||
}
|
}
|
||||||
|
|
||||||
# top20 of Find SYN connection
|
# top20 of Find SYN connection
|
||||||
function syn20() {
|
function syn20() {
|
||||||
{
|
if (( $+commands[ss] )); then
|
||||||
LANG= ss -an | awk '/SYN/ {print $5}' \
|
LANG= ss -an
|
||||||
|| LANG= netstat -an | awk '/SYN/ {print $5}'
|
else
|
||||||
} | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -n20
|
LANG= netstat -an
|
||||||
|
fi | awk '/SYN/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | head -n20
|
||||||
}
|
}
|
||||||
|
|
||||||
# Printing process according to the port number
|
# Printing process according to the port number
|
||||||
function port_pro() {
|
function port_pro() {
|
||||||
LANG= ss -ntlp | awk "NR > 1 && /:${1:-}/ {print \$6}" | sed 's/.*pid=\([^,]*\).*/\1/' \
|
if (( $+commands[ss] )); then
|
||||||
|| LANG= netstat -ntlp | awk "NR > 2 && /:${1:-}/ {print \$7}" | cut -d/ -f1
|
LANG= ss -ntlp | awk "NR > 1 && /:${1:-}/ {print \$6}" | sed 's/.*pid=\([^,]*\).*/\1/'
|
||||||
|
else
|
||||||
|
LANG= netstat -ntlp | awk "NR > 2 && /:${1:-}/ {print \$7}" | cut -d/ -f1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# top10 of gain access to the ip address
|
# top10 of gain access to the ip address
|
||||||
|
|||||||
Reference in New Issue
Block a user