Bash: Unterschied zwischen den Versionen

Aus robopagex.com
Zur Navigation springen Zur Suche springen
Zeile 289: Zeile 289:
 
  This is intentionally difficult, because you should not do it!  
 
  This is intentionally difficult, because you should not do it!  
 
  Just use the '''passwd''' command.
 
  Just use the '''passwd''' command.
 +
 +
'''$ /sbin/useradd -ms /bin/bash USER'''
 +
Create USER + Homedirectory + Bash as Shell
  
 
== Delete USER '''userdel'''==
 
== Delete USER '''userdel'''==

Version vom 2. Mai 2023, 16:09 Uhr

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 is built-in Linux command that can be found on any Linux system. However, creating new users with this low-level is a tedious task because it doesn't create the home directory and user password by default.
Adduser is not a standard Linux command. It’s essentially a Perl script that uses the useradd command in the background. This high-level utility  is more efficient in properly creating new users on Linux. It gives you the option to create the home directory, and set password along with a few more parameters.
Difference between adduser and useradd commands
adduser vs useradd in Linux 
$ 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 
There is an option for adding an encrypted password via the -p option on useradd
Note that the -p option doesn't allow you to input a plaintext password, it expects you to  encrypt it first. 
This is intentionally difficult, because you should not do it! 
Just use the passwd command.
$ /sbin/useradd -ms /bin/bash USER
Create USER + Homedirectory + Bash as Shell

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/


https://unix.stackexchange.com/a/709895/515538