{"id":26194114,"url":"https://github.com/fl64/snippets","last_synced_at":"2026-05-16T18:11:09.322Z","repository":{"id":61769148,"uuid":"451501223","full_name":"fl64/snippets","owner":"fl64","description":null,"archived":false,"fork":false,"pushed_at":"2023-04-23T15:40:24.000Z","size":47,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-12T01:55:06.428Z","etag":null,"topics":["bash","snippets"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fl64.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-01-24T14:39:01.000Z","updated_at":"2024-09-28T02:00:48.000Z","dependencies_parsed_at":"2023-01-22T06:19:59.364Z","dependency_job_id":null,"html_url":"https://github.com/fl64/snippets","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/fl64/snippets","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fl64%2Fsnippets","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fl64%2Fsnippets/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fl64%2Fsnippets/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fl64%2Fsnippets/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fl64","download_url":"https://codeload.github.com/fl64/snippets/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fl64%2Fsnippets/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272631632,"owners_count":24967104,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-29T02:00:10.610Z","response_time":87,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bash","snippets"],"created_at":"2025-03-12T01:55:07.708Z","updated_at":"2026-05-16T18:11:04.300Z","avatar_url":"https://github.com/fl64.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Snippets\n\n## Testing\n\nUseful services for testing online\n\n- jq ployground https://jqplay.org/\n- another jq ployground https://jqterm.com/?query=.\n- go template https://repeatit.io/\n- go https://goplay.space/\n- k8s YAML generator https://k8syaml.com/\n\nUpload from CLI\n\n- https://bashupload.com/\n- https://0x0.st/\n- https://transfer.sh/\n- https://hastebin.com/about.md\n\n## CLI\n\n### Bash\n\nRedirect\n\n```bash\n# Redirect stderr to stdout\ncmd 2\u003e\u00261\n# Redirect stdout to stderr\ncmd 1\u003e\u00262\n## stderr and stdout to file\ncmd 1\u003ecombined.log 2\u003e\u00261\n```\n\nShow unix time 2 months ago\n\n```bash\ndate +%s -d '2 months ago'\n```\n\nShow time in format YYYY-MM-DD-hh-mm-ss\n\n```bash\ndate \"+%F-%H-%M-%s\"\n```\n\nfind files accessed 5 min ago\n\n```bash\nfind . -cmin -5\n```\n\nfind logs for 2 days and tar it\n\n```bash\nfind logs/ -mtime -2 -type f | xargs -d \"\\n\" tar cvfz $(date \"+%F-%H-%M-%S\")-logs.tar.gz\n```\n\nfind Revision: field in all y(a)ml files\n\n```bash\nfind . -name '*.yml' -o -name '*.yaml' -print0 | xargs -0 grep 'Revision:' | grep -v depricated\n```\n\nfind all catalogs with helm charts and lint them\n\n```bash\nfind apps/ -mindepth 1 -maxdepth 1  -type d | xargs -I %HELMCHART% bash -c \"helm dependency build %HELMCHART% \u0026\u0026 helm lint --with-subcharts --debug %HELMCHART%\"\n```\n\nfind | grep and check\n\n```bash\nfind . -name '*.yml' -o -name '*.yaml' -print0 | xargs -0 grep -E '(R|r)evision: .+' | grep -vE '(depricated|HEAD)' || EXIT_CODE=$?\n```\n\nfind and delete\n\n```bash\nfind / -name .terraform -exec rm -rf {} \\;\nfind . -name \".terraform\" -print0 | xargs -I {} -0 rm -rf \"{}\"\n```\n\nloop over array vars with suffix\n\n```bash\ndeclare -A HTTP_CHECK_1=([addr]=google.com [port]=443)\ndeclare -A HTTP_CHECK_2=([addr]=example.com [port]=383)\n\ndeclare -A SIP_CHECK_1=([addr]=1.1.1.1 [port]=5060)\ndeclare -A SIP_CHECK_2=([addr]=2.2.2.2  [port]=5060)\n\nfor _CHECK in $(compgen -v | grep -xE '(HTTP|SIP)_CHECK_.*'); do\n   declare -n p=\"$_CHECK\"\n   echo \"${p[addr]}\"\ndone\n```\n\nread template into the var\n\n```bash\nread -r -d '' VAULT_CONF \u003c\u003cEOF\n{ \"cluster_name\":\n  {\n    \"config\":\n      {\n        \"token_reviewer_jwt\": \"${JWT_TOKEN}\",\n        \"kubernetes_host\": \"https://${ENDPOINTS}\",\n        \"kubernetes_ca_cert\": \"${K8S_CA}\"\n      }\n  }\n}\nEOF\n\necho ${VAULT_CONF} | jq\n```\n\nlogging to syslog\n\n```bash\nexec \u003e \u003e(tee \u003e(logger  -p local0.notice -t $(basename \"$0\")))\nexec 2\u003e \u003e(tee \u003e\u00262 \u003e(logger  -p local0.error -t $(basename \"$0\")))\n```\n\nwait for changes and do something (POST for example)\n\n```bash\nwhile true; do\n   inotifywait \"$(readlink -f $1)\"\n   echo \"[$(date +%s)] Trigger refresh\"\n   curl -sSL -X POST \"$2\" \u003e /dev/null\ndone\n```\n\nread ssh keys from variables starting from 'SSHKEY\\_'\n\n```bash\nfor key in \"${!SSHKEY_@}\"; do\n    ssh-add \u003c(echo \"${!key}\")\ndone\n```\n\nheredoc to var\n\n```bash\nread -r -d '' CONFIG \u003c\u003cEOF\n{ \"cluster_name\":\n  {\n    \"config\":\n      {\n        \"p1\": \"${VAR1}\",\n        \"p2\": \"${VAR2}\",\n      }\n  }\n}\nEOF\n```\n\nsort by semver\n\n```bash\nprintf \"1.0\\n2.0\\n2.12\\n2.10\\n1.2\\n1.10\" | sort -t \".\" -k1,1n -k2,2n -k3,3n\n```\n\ntrap a signal\n\n```bash\n#!/bin/bash\n\ntrap \"echo 'Terminating';exit\" INT TERM\n\necho \"PID: $$\"\nwhile true\ndo\n    echo \"$(date +'%H:%M')\"\n    sleep 10\ndone\n```\n\ntrap a signal v2\n\n```bash\ntrap _term SIGINT SIGTERM\n\n_term() {\n  echo 'Terminating'\n  exit\n}\n\n```\n\nrandom number in range\n\n```bash\nshuf -i 10-70 -n 1\n```\n\nfill up 90% memory\n\n```bash\nstress-ng --vm-bytes $(awk '/MemFree/{printf \"%d\\n\", $2 * 0.9;}' \u003c /proc/meminfo)k --vm-keep -m 1\n```\n\nset default editor\n\n```bash\nexport EDITOR='subl -w'\nansible-vault edit ...\n```\n\nget script working dir\n\n```bash\nSCRIPT_DIR=$( cd -- \"$( dirname -- \"${BASH_SOURCE[0]}\" )\" \u0026\u003e /dev/null \u0026\u0026 pwd )\n```\n\nscript execution time\n\n```bash\nstart=$(date +%s)\nsleep 10\nend=$(date +%s)\ndiffSeconds=\"$(($end-$start))\"\ndiffTime=$(date -d @${diffSeconds} +\"%H:%M:%S\" -u)\necho \"Diff in seconds: ${diffSeconds}.\"\necho \"Diff time(H:M:S): ${diffTime}.\"\n```\n\npassing parameters to bash when executing a script fetched by curl\n\n```bash\ncurl http://example.com/script.sh | bash -s -- arg1 arg2\n\n```\n\n### Ecnryption\n\nEncrypt/decrypt file with AES\n\n```bash\necho \"secret\" | openssl enc -aes-256-cbc -a -e -iter 1000 -k \"password\"\n\necho \"U2FsdGVkX19qISwjfyH5M9eNCFnEh5XfUHBBA7yfNkQ=\" | openssl enc -aes-256-cbc -a -d -iter 1000 -k \"password\"\n```\n\n### system\n\njournalctl get docker logs\n\n```bash\njournalctl -u docker -o json | jq -cMr 'select(has(\"CONTAINER_ID\") | not) | .MESSAGE'\n```\n\nboot\n\n```bash\njournalctl --list-boots\njournalctl -b -1 #last boot\n```\n\npriority\n\n```bash\njournalctl -b -1  -p \"emerg\"..\"crit\" # output all messages with priority between emergency and critical from last boot\njournalctl -b -1  -p 0..2 the same\njournalctl -p 4 # from error level error\n```\n\ntime\n\n```bash\njournalctl -n 50 --since \"1 hour ago\" # last 50 messages logged within the last hour\njournalctl --since \"2015-06-26 23:15:00\" --until \"2015-06-26 23:20:00\" # system time spec: https://www.freedesktop.org/software/systemd/man/systemd.time.html\n```\n\nreverse\n\n```bash\njournalctl -u docker -r # list in reverse order\n```\n\n### git\n\ngit diff to folder\n\n```bash\ngit -C some/code/app diff --relative HEAD~   # relative path in patch file\ngit -C some/code/app diff  HEAD~ \u003e app.patch # full path\ngit apply app.patch\n```\n\nusing oath2 token instead of password\n\n```bash\ngit config --global url.\"https://oauth2:${TOKEN}@gitlab.com/\".insteadOf https://gitlab.com/\n```\n\ncreate MR on gitlab\n\n```bash\ngit push \\\n    -o merge_request.create \\\n    -o merge_request.target=master \\\n    -o merge_request.title=\"switch to ${CI_COMMIT_TAG}\" \\\n    -o merge_request.description=\"${DESCRIPTION//$'\\n'/\u003cbr /\u003e}\" \\\n    \"https://oauth2:${TOKEN}@gitlab.com/${DEST_GROUP}/${DEST_REPO}.git\" \\\n    \"${NEW_BRANCH}\"\n```\n\ndelete tag localy and remotely\n\n```bash\ngit tag -d v1.0.0\ngit push origin :refs/tags/v1.0.0\n```\n\ndelete tag localy and remotely v2\n\n```bash\ngit push --delete origin v1.0.0\ngit tag -d v1.0.0\n```\n\n### networking\n\nssh ignore known hosts for vagrant\n\n```bash\nssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i .vagrant/machines/test00/virtualbox/private_key vagrant@192.168.56.99\n```\n\nscan ssh keys\n\n```bash\nssh-keyscan -p 2222 gitlab.example.ru\n```\n\nopen remote server port on local machine\n\n```bash\nssh \u003cremote_host\u003e -N -f -L \u003clocal_port\u003e:127.0.0.1:\u003crepote_port\u003e\n```\n\ncheck port verbosely\n\n```bash\nnc -vzw 2 server.example.com 8500\n```\n\nget ssl certificate from web\n\n```bash\necho | openssl s_client -showcerts -servername 10.3.0.17 -connect 10.3.0.17:443 2\u003e/dev/null | openssl x509 -inform pem -noout -text\n```\n\ncurl via ip\n\n```bash\ncurl https://example.com --resolve 'example.com:443:192.0.2.17'\n```\n\ncurl and untar\n\n```bash\nsudo bash -c \"curl -L https://github.com/cilium/cilium-cli/releases/download/v0.12.4/cilium-linux-amd64.tar.gz | tar -xz -C /usr/local/bin/\"\n```\n\nsend email with curl\n\n```bash\ncurl --ssl-reqd \\\n  --url 'smtps://smtp.gmail.com:465' \\\n  --user 'username@gmail.com:password' \\\n  --mail-from 'username@gmail.com' \\\n  --mail-rcpt 'john@example.com' \\\n  --upload-file /dev/null\n```\n\nget all TCP-packets with RST flag https://serverfault.com/questions/217605/how-to-capture-ack-or-syn-packets-by-tcpdump\n\n```bash\ntcpdump \"tcp[tcpflags] \u0026 (tcp-rst) != 0\"\ntcpdump \"(net 10.1.2.0/24 or 10.2.2.0/24) and tcp[tcpflags] \u0026 (tcp-rst) != 0\"\n```\n\nfind pattern in network traffic\n\n```bash\nngrep -iq \"/ping.*user-agent\" \"port 80\" -W byline\n```\n\n### docker\n\nremove all older than\n\n```bash\ndocker system prune --filter 'until=168h' --all -f\n```\n\ndocker image format\n\n```bash\ndocker images --format \"{{ .ID}} {{.Repository }}:{{ .Tag}}\"\n```\n\n### k8s\n\ngit images\n\n```bash\nkubectl get pods --all-namespaces -o jsonpath=\"{.items[*].spec.containers[*].image}\" |\\\ntr -s '[[:space:]]' '\\n' |\\\nsort |\\\nuniq -c\n```\n\nk8s delete ns with finalizers\n\n```bash\nNAMESPACE=argocd-system\nkubectl proxy \u0026\nkubectl get namespace $NAMESPACE -o json |jq '.spec = {\"finalizers\":[]}' \u003etemp.json\ncurl -k -H \"Content-Type: application/json\" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize\n```\n\nwait for some res\n\n```bash\nkubectl wait --for condition=ready -l node-role.kubernetes.io/control-plane node\nkubectl wait --for condition=ready -l node-role.kubernetes.io/master node\nkubectl wait --for condition=ready node --all --timeout=10s\nkubectl wait --for=condition=ready pod -l app=someapp\nkubectl wait --for=condition=complete --timeout=30s  job/some-job\n```\n\nexec to some shell\n\n```bash\nkubectl exec -i -t -n default pt-test-pod -c test-pod \"--\" sh -c \"clear; (bash || ash || sh)\"\n```\n\nlimits requests\n\n```bash\nkubectl get pods -o=custom-columns=NAME:spec.containers[*].name,MEMREQ:spec.containers[*].resources.requests.memory,MEMLIM:spec.containers[*].resources.limits.memory,CPUREQ:spec.containers[*].resources.requests.cpu,CPULIM:spec.containers[*].resources.limits.cpu\n```\n\nget cadvisor metrics\n\n```bash\nkubectl proxy --port 8888 \u0026 curl -s http://localhost:8888/api/v1/nodes/${NODE_NAME}/proxy/metrics/cadvisor\n```\n\nheredoc apply\n\n```bash\ncat \u003c\u003cEOF | kubectl apply -f -\napiVersion: v1\nkind: Pod\nmetadata:\n  name: httpbin\n  namespace: demo-service\n  labels:\n    app: httpbin\nspec:\n  containers:\n  - name: httpbin\n    image: kennethreitz/httpbin\n    ports:\n      - containerPort: 80\nEOF\n```\n\n### yc\n\nremove all yc profile by mask\n\n```bash\nyc config profile list | grep \"${PROFILE_NAME}\" | xargs -L 1 yc config profile delete\n```\n\nget cloud-id\n\n```bash\nyc --profile=\"${PROFILE_NAME}\" config get cloud-id\n```\n\nget k8s cluster id\n\n```bash\nyc --profile=\"${PROFILE_NAME}\" managed-kubernetes cluster list --format json | jq '.[].id' -r\n```\n\nget instances ids for yc k8s node group\n\n```bash\nyc managed-kubernetes node-group list-nodes \"group-1a\" --profile=\"${PROFILE_NAME}\" --format json | jq '.[].kubernetes_status.id'\n```\n\n### tf\n\nedit terraform state\n\n```bash\nterraform state pull \u003e tf.state\nvi tf.state # (don't forget increase serial)\nterraform state push tf.state\n```\n\n## Jq\n\nselect records with .level is \"info|error|warn\" and .msg is not contain \"deprecated\"\n\n```bash\njq '. | select(.level | test(\"info|error|warn\")) | select(.msg | test(\".+deprecated.+\") | not )\n```\n\nselect records with worker label exist and have addr type InternalIP\n\n```bash\njq '.items[] | select(.metadata.labels.\"node-role.kubernetes.io/worker\"!=null) | .status.addresses | .[] | select (.type==\"InternalIP\") | .address' -r\n```\n\nusing args\n\n```bash\njq --arg name \"istiod-v1x13\" '.items[] | .metadata | select( .name | test($name)) | .name' -r\njq --arg revision v1x13 '.items[] | select( .spec.revision == $revision ) | .metadata.name' -r\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffl64%2Fsnippets","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffl64%2Fsnippets","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffl64%2Fsnippets/lists"}