Bash
Version vom 20. Juli 2022, 12:07 Uhr von Geist (Diskussion | Beiträge) (→Create/Add new USER useradd)
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 Simple Script Jail
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
Delete USER userdel
$ userdel [OPTIONS] USERNAME $ userdel -r username
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]