Bash: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Geist (Diskussion | Beiträge) |
Geist (Diskussion | Beiträge) |
||
Zeile 344: | Zeile 344: | ||
== RANDOM STRINGS == | == RANDOM STRINGS == | ||
'''$ echo $RANDOM | md5sum | head -c 1; echo; ''' | '''$ echo $RANDOM | md5sum | head -c 1; echo; ''' | ||
− | '''$ tr -dc A-Za-z0-9 </dev/urandom | head -c 1 ; echo '' ''' | + | '''$ tr -dc A-Za-z0-9 </dev/urandom | head -c 1 ; echo ' ' ''' |
https://gist.github.com/earthgecko/3089509 | https://gist.github.com/earthgecko/3089509 |
Version vom 20. Juli 2022, 15:58 Uhr
Inhaltsverzeichnis
- 1 Script
- 2 Command Line
- 3 Count files and directories, summary size and EXCLUDE folders
- 4 Building blocks
- 5 PORT SCAN with bash's built-in /dev/tcp
- 6 watch
- 7 Firefox bash output
- 8 Create Symbolic Links
- 9 List harddisk|usb|volume|partitions
- 10 Create filesystem with mkfs.ext4
- 11 Create/Add new USER useradd
- 12 Delete USER userdel
- 13 rbash | Restricted Bash
- 14 Simple Script Jail
- 15 Disable history
- 16 Disable LASTLOGIN
- 17 type | command check
- 18 RANDOM NUMBERS
- 19 RANDOM STRINGS
Script
$ type script $ chmod +x script $ ./script $ .script $ source script $ bash script
#!/bin/bash
Command Line
Everything is a file 255 Byte The maximum length for a file name is 255 bytes. The maximum combined length of both the file name and path name is 4096 bytes. This length matches the PATH_MAX that is supported by the operating system. Names are case-sensitive
Special chars to avoid in names/filenames
/ Never \ Escaped - Never at beginning [] Escaped {} Escaped * Escaped ' Escaped " Escaped
Wildcards
* asterisk | any char ? question mark | single char [] square brackets | set of single char or a range of chars
List files and folders
$ ls $ ls folder $ ls ./folder $ ls /path/folder $ ls ~/folder $ ls ~/folder/*.jpg $ ls ~/folder/*txt* $ ls -R folder (list of subfolders)
$ ls -l (single column) - regular file _ executable d directory l symbolic link s socket b block device c character device p named pipe
$ ls -m (comma-separated list) $ ls -a (hidden files and folders)
$ ls -F (file type) Symbols and file types * Executable / Directory @ Symbolic link | FIFO = Socket
$ ls --color (content in color) $ dircolors $ dircolors --print-database $ ls -F --color $ la -la $ ls -r $ ls -X (sort by extension) $ ls -t (sort by date) $ ls -S (sort by content) $ ls -h $ ls -laS $ ls -h
$ pwd (current path)
Change directory with cd
$ cd folder $ cd ~ $ cd - $ cd ..
Create and change current time of file touch
create new, empty file $ touch file
update access and modification time for file $ touch file
any desired time for file $ touch -t [[CC]YY]MMDDhhmm[.ss]file
Create directory with mkdir
new directory $ mkdir folder
create directory with subdirectories $ mkdir -p test/sub/folder
create directory and show steps $ mkdir -v test/sub/folder $ mkdir -pv test/sub/folder
Count files and directories, summary size and EXCLUDE folders
bash count files and directory, summary size and EXCLUDE folders that are fuse|sshfs
Full size of a folder with du
get the full size of workdir | no fuse/sshfs in use $ du -hs workdir
get the full size of workdir, excluding mysshfs | fuse/sshfs in use $ du -hs --exclude=mysshf workdir
Count files in folder with find
count files in workdir | no fuse/sshfs in use $ find workdir -type f | wc -l
count files in workdir, excluding mysshfs | no fuse/sshfs in use $ find workdir -type f -not -path "*mysshfs*" | wc -l
count files in workdir, excluding mysshfs | fuse/sshfs in use $ find workdir -path "*/mysshfs/*" -prune -o \( -type f -print \) | wc -l
Count folders in folder with find
count folders in workdir | no fuse/sshfs in use $ find workdir -type d | wc -l
count folders in workdir, excluding mysshfs | no fuse/sshfs in use $ find workdir -type d -not -path "*mysshfs*" | wc -l
count folders in workdir, excluding mysshfs | fuse/sshfs in use $ find workdir -path "*/mysshfs/*" -prune \( -type d -print \) | wc -l
Building blocks
run several commands sequentially with ; and &&
executed sequential no matter if successfully or unsucessfully ; $ ls /home ; ls notfound; ls ~
executed sequential if successfully run next && $ ls /home && ls notfound && ls ~
PORT SCAN with bash's built-in /dev/tcp
check if host response on a give port with bash's built-in /dev/tcp
#!/bin/bash HOST_NAME="127.1" HOST_PORT="80" if ( (exec 3<>/dev/tcp/${HOST_NAME}/${HOST_PORT}) 2> /dev/null); then echo -e "PORT: ${HOST_PORT} | ON" else echo -e "PORT: ${HOST_PORT} | OF" fi exit;
#!/bin/bash HOST_NAME="127.1" for HOST_PORT in {1..1000} do if ( (exec 3<>/dev/tcp/${HOST_NAME}/${HOST_PORT}) 2> /dev/null); then echo -e "PORT: ${HOST_PORT} | ON" else echo -e "PORT: ${HOST_PORT} | OF" fi done exit;
#!/bin/bash HOST_NAME="127.1" declare -A PORT_ON for HOST_PORT in {1..65535} do if ( (exec 3<>/dev/tcp/${HOST_NAME}/${HOST_PORT}) 2> /dev/null); then PORT_ON[${HOST_PORT}]="ON" fi done for i in ${!PORT_ON[*]} do echo -e "$i : ${PORT_ON[$i]}" done exit;
watch
$ watch -t -n 0.1 "grep \"^[c]pu MHz\" /proc/cpuinfo" $ watch -t -n 0.1 "grep \"^[c]pu MHz\" /proc/cpuinfo && free -m"
Firefox bash output
For the usage in bash: $ watch -n 1 "ps aux | grep [f]irefox" $ watch -n 0.1 "ps aux | grep [f]irefox" $ watch -n 1 "ps aux | grep [f]irefox && free -m" $ watch -n 0.1 "ps aux | grep /usr/lib/firefox-esr/firefox" $ watch -n 0.1 "ps aux | grep /usr/lib/firefox-esr/firefox && free -m" $ watch -d -n 0.1 "ps aux | grep [f]irefox"
Load a page and press F5 in the tab(again and again or hold the F5 button pressed) and watch When i kill the a tab with the right pid i get the message in the tab, that the tab is crashed now In Firefox, about:performance
But check also this in bash if i close or open and load a page tab: $ pidof firefox $ pidof firefox-esr $ pgrep firefox get the main/parentid of one or "n" profiles $ pgrep firefox-esr get the main/parentid of one or "n" profiles
Get parentid and childid $ ps aux | grep [f]irefox $ ps aux | grep [f]irefox | grep tab
You see the parentBuildID and something of the child/tab It looks like that you can't close the child/tab only the parentBuildID, if you kill the child/tab the tab will crash but not close(but killed).
$ ps -ef | grep [f]irefox | wc -l $ ps -ef | grep [f]irefox | grep tab | wc -l
Create Symbolic Links
ln|Linux manual page Symlink To a File $ ln -s [OPTIONS] TARGET LINKNAME $ ln -s TARGET LINK_NAME
Symlinks To a Directory $ ln -s /mnt/my_drive/movies ~/my_movies
Overwriting Symlinks To overwrite the destination path of the symlink, use the -f (--force) option $ ln -sf my_file.txt my_link.txt
Removing Symlinks $ unlink symlink_to_remove $ rm symlink_to_remove
List harddisk|usb|volume|partitions
Get label names: $ e2label /dev/sdXx $ /sbin/blkid | grep sdXx' $ blkid /dev/sdXx | awk -F'"' '{print $2}'
Set label name: $ e2label /dev/sdXx MYNAME $ tune2fs -L MYNAME /dev/sdXx
Create filesystem with mkfs.ext4
$ mkfs.ext4 /dev/sda1 -L MYNAME
Create/Add new USER useradd
$ useradd [OPTIONS] USERNAME
$ cat /etc/default/useradd $ ls -la /etc/skel/ $ cat /etc/login.defs
View default options: $ useradd -D
Change the default login shell $ useradd -D -s /bin/bash $ useradd -D | grep -i shell
To create a user without home directory $ useradd -M user
Create a user with changed login shell $ useradd -s /bin/sh user
Option to create a user home directory --create-home -m
$ /sbin/useradd -m -u 10000 USERNAME -s /bin/bash
Delete USER userdel
$ userdel [OPTIONS] USERNAME
Use the -r (--remove) option to force userdel to remove the user’s home directory and mail spool: $ userdel -r username
Kill all user’s running processes $ killall -u username
Another option is to use the -f (--force) option that tells userdel to forcefully remove the user account, even if the user is still logged in or if there are running processes that belong to the user. $ userdel -f username
How to Delete/Remove Users in Linux (userdel Command)
rbash | Restricted Bash
$ rbash $ bash -r
https://www.tecmint.com/rbash-a-restricted-bash-shell-explained-with-practical-examples/ https://www.thegeekdiary.com/rbash-set-restricted-shell-in-linux/
https://www.howtogeek.com/718074/how-to-use-restricted-shell-to-limit-what-a-linux-user-cando/ https://ostechnix.com/how-to-limit-users-access-to-the-linux-system/ https://averagelinuxuser.com/creating-new-user-linux/ https://linuxize.com/post/how-to-create-users-in-linux-using-the-useradd-command/ https://www.howtoforge.com/user_password_creating_with_a_bash_script
Simple Script Jail
This is are the default settings for the USER to login and run a bash shell: $ chsh -s /bin/bash [USER] This for the simple jail: $ chsh -s /home/[USER]/./run [USER]
Disable history
https://linuxconfig.org/how-to-disable-bash-shell-commands-history-on-linux https://www.cyberciti.biz/faq/disable-bash-shell-history-linux/ https://www.thegeeksearch.com/how-to-disable-and-clear-linux-command-line-history/
Disable LASTLOGIN
$ touch /home/user/.hushlogin
https://linuxconfig.org/how-to-disable-last-login-message-on-rhel-linux https://www.heatware.net/linux-unix/linux-how-to-disable-last-login-welcome-message/
type | command check
Check whether a command is built-in or not $ type [COMMAND]
RANDOM NUMBERS
$ echo $RANDOM $ echo $(( $RANDOM % 9 + 0 ))
$ echo $(shuf -i 0-9 -n1)
$ od /dev/urandom -A n -t d -N 1
https://linuxhint.com/generate-random-number-bash/ https://linuxconfig.org/generating-random-numbers-in-bash-with-examples https://www.delftstack.com/howto/linux/random-number-generation-in-bash/
RANDOM STRINGS
$ echo $RANDOM | md5sum | head -c 1; echo; $ tr -dc A-Za-z0-9 </dev/urandom | head -c 1 ; echo ' '
https://gist.github.com/earthgecko/3089509
https://unix.stackexchange.com/questions/230673/how-to-generate-a-random-string https://linuxhint.com/generate-random-string-bash/ https://www.saotn.org/bash-function-to-generate-a-random-alphanumeric-string/