15 KiB
Basics https://linuxcommandlibrary.com/
-
https://www.howtogeek.com/269509/how-to-run-two-or-more-terminal-commands-at-once-in-linux/
Option One: The Semicolon (;) Operator
The semicolon (;) operator allows you to execute multiple commands in succession, regardless of whether each previous command succeeds. For example, open a Terminal window (Ctrl+Alt+T in Ubuntu and Linux Mint). Then, type the following three commands on one line, separated by semicolons, and press Enter. This will give you a listing of the current directory
Option Two: The Logical AND Operator (&&)
If you want the second command to only run if the first command is successful, separate the commands with the logical AND operator, which is two ampersands ( && ). For example, we want to make a directory called MyFolder and then change to that directory--provided it was successfully created. So, we type the following on the command line and press Enter.
Option Three: The Logical OR Operator (||)
Sometimes you might want to execute a second command only if the first command does not succeed. To do this, we use the logical OR operator, or two vertical bars ( || ). For example, we want to check to see if the MyFolder directory exists ( [ -d ~/MyFolder ] ) and create it if it doesn't ( mkdir ~/MyFolder ). So, we type the following command at the prompt and press Enter. -
bash cheatsheet
A; B # Run A and then B, regardless of success of A A && B # Run B if and only if A succeeded A || B # Run B if and only if A failed A & # Run A in background. A & B & : # Run A in background, then run B in background (regardless of success) and return control to the shell -
locating commands or bin files
which -a gdbwhich: no gdb in (/home/hpm/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/var/lib/snapd/snap/bin)rt
locate -eb '\gdb'ed
/usr/share/gdb /usr/share/bash-completion/completions/gdb /usr/share/glib-2.0/gdb /usr/share/gstreamer-1.0/gdb
-
sed commands usage
https://www.tecmint.com/linux-sed-command-tips-tricks/ https://www.geeksforgeeks.org/sed-command-in-linux-unix-with-examples/ -
List files with full path with ls
ls -lrt -d -1 "$PWD"/{*,.*}
or if u want regular expression then
find /path/to/start/directory -type f | awk -F/ '{print "<a href=\""$0"\">"$NF"</a>"}'
here path to directory is path where those files are stored
type -fmeans to list only files
find /path/to/start/directory -maxdepth 1 -type f -exec sh -c 'echo "<a href=\"{}\">$(basename {})</a>"' \;: this maxdepth flag can be used to list files only in current directroy and not go any deeper in those subdirectories -
cp command to copy folder contents along with hidden files use the period(.) symbol too
cp -ar assets/. backup/a is for archive means preserving metadata to copy files while excluding a file or directoryrsync -av --progress sourcefolder /destinationfolder --exclude thefoldertoexclude --exclude anotherFolderToExcludeNote : files to be excluded should be relative to source directory not the current directory from where this command is executed. -
Changing file name based on pattern
for file in tomp3.cc*; do mv "$file" "${file/tomp3.cc - /}" done -
replacing names through like removing spaces
for f in *\ *; do mv "$f" "${f// /_}"; doneThough it's not recursive, it's quite fast and simple. I'm sure someone here could update it to be recursive. The${f// /_}part utilizes bash's parameter expansion mechanism to replace a pattern within a parameter with supplied string. The relevant syntax is${parameter/pattern/string}. See: https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html or http://wiki.bash-hackers.org/syntax/pe . -
sort file names on basis of names
- ascending order
ls *.jpg | sort -n - descending order
ls *.jpg | sort -nr
- ascending order
-
get ip address
ip addrorifconfig -
cat command
cat notes.txt: to show contents of notes,txt>this will represent the transfer of data from left to right. If left side is empty then transfer from stdin to the file. All content of file will be replaced with stdin or whatever file on left.
cat > notes.txt > hey there >^C > cat notes.txt > hey there>>will append data from left to right instead of truncaing it
cat >> notes.txt > hey there >^C > cat >> notes.txt > how r you >^C > cat notes.txt > hey there > how r you -
aliases and function
- Functions
function packagelist { dpkg -l | grep "$1" | awk '{print $2}' | tr "\n" " " } packagelist gccOutput:
-
Docs Install tldr package to get nicer docs. or tealdeer which is rust based
-
Some utilties info tty is the terminal device a process is connected to it can be a physical terminal or a pseudo terminal
psis a command that displays process information andtailprints to output the last contents of a file by default the last 10 lines
ps -eo user= | sort | uniq -c
one-liner counts the number of processes per user on the system
ps -eo user= extracts only usernames with no header line (the '=' clears the custom header, which suppresses the header line entirely), sort arranges them, uniq -c counts processes per user. Without '=', the header row 'USER' itself would be counted as one entry.
-
Check memory info
free -m -
Check battery status To list devices
upower -eFind battery one and get the resultupower -i /org/freedesktop/UPower/devices/battery_BAT0 -
Check desktop manager
systemctl list-units | grep dm.service- Check whether xorg or wayland display server
echo $XDG_SESSION_TYPE
- Check whether xorg or wayland display server
-
last argument access For eg if u have used
mkdir testThen$_will representtestSocd $_=cd test -
for checking CPU architecture use
uname -m -
zswap compresses ram istead of using storage space
-
search for packages : pinned
find /usr -name '*mingw*' -
script for mounting multiple partitions
#!/bin/bash name1="mint" name2="manjaro" name3="hdd" name4="ssd" # Define partitions and mount points partition1="/dev/sda5" # mint partition2="/dev/sda6" # manjaro partition3="/dev/sda3" # hdd partition4="/dev/nvme0n1p3" # ssd mount_point1="/mnt/$name1" mount_point2="/mnt/$name2" mount_point3="/mnt/$name3" mount_point4="/mnt/$name4" # Check if partitions are not mounted if ! mountpoint -q "$mount_point1"; then mkdir -p /mnt/$name1 # Mount partition1 sudo mount "$partition1" "$mount_point1" echo "Mounted $partition1 at $mount_point1" fi if ! mountpoint -q "$mount_point2"; then mkdir -p /mnt/$name2 # Mount partition2 sudo mount "$partition2" "$mount_point2" echo "Mounted $partition2 at $mount_point2" fi if ! mountpoint -q "$mount_point3"; then mkdir -p /mnt/$name3 # Mount partition3 sudo mount "$partition3" "$mount_point3" echo "Mounted $partition3 at $mount_point3" fi if ! mountpoint -q "$mount_point4"; then mkdir -p /mnt/$name4 # Mount partition4 sudo mount "$partition4" "$mount_point4" echo "Mounted $partition4 at $mount_point4" fi -
size of folders and files The
ducommand in Linux is a powerful utility that allows users to analyze and report on disk usage within directories and files. The basic syntax of the du command is as follows:du [options] [directory/file]eg :du -sh dir_name -
copy all files to next folder with exlcuding some directories say
srcrsync -av --exclude='src' . ~/cache_bkp.here is source and~/cache_bkpis destination -
to prepend text // this way is working
echo -e "your text to prepend\n$(cat sample.txt)" > sample.txtfor large filesecho "your text to prepend" > temp.txt cat sample.txt >> temp.txt mv temp.txt sample.txt
// below way isnt working
cat - stringToBePrepended | tee -a sample.txt.
cat - reads from standard input (in this case, the stringToBePrepended).
Step 2:
Pipes the output of cat - text.txt to the next command.
Step 3: tee -a sample.txt
tee -a appends the input to the sample.txt file.
The -a option tells tee to append to the file instead of overwriting it.
Overall effect:
The cat - text.txt | tee -a sample.txt command reads the contents of text.txt, appends them to sample.txt, and also outputs them to the terminal. This effectively prepends the contents of text.txt to sample.txt.
Harsh Truth
—
Today at 12:20 AM
- Looping thorugh all arguments in bash
for arg in "$@"; do echo "arg: $arg" done - Detecting flags in bash
#!/bin/bash # Loop through all the arguments for arg in "$@"; do case $arg in -a|--optionA) echo "Option A detected!" # handle option A ;; -b|--optionB) echo "Option B detected!" # handle option B ;; *) # Handle positional arguments or invalid flags ;; esac done - sed
sed -i 's/\(<string>\)\.md/\1/' your_file.txtThis command captures the<string>before .md using parentheses and then replaces the entire match (including .md) with just<string>, effectively removing the .md extension when it follows<string>. - Copy multiple files to a directory
cp -t path/to/destination_directory path/to/file1 path/to/file2 ... - Copy multiple directories to a directory(copy
dir1dir2totargetDir)cp -r dir1 dir2 targetDir/ - Move multiple directories to directory
mv -t path/to/destination_directory path/to/file1 path/to/file2 ... - Login to different user
sudo su - <user_name>andexitto exit - User management
https://www.freecodecamp.org/news/how-to-manage-users-in-linux/
-
Adding user
useradd -u 1002 -d /home/john -s /bin/bash johnoruseradd -u 1002 -d /home/john -s /bin/bash john -g johnGroup -c comments -
Getting user names Users and their other informatio separated by colons can be accessed by
cat /etc/passwdTo get only usersawk -F: '{ print $1}' /etc/passwdGet users which can be loginedgetent passwd {1000..60000}1000 is min UID and 60000 is max UID. They may be different so find them usinggrep -E '^UID_MIN|^UID_MAX' /etc/login.defsfollowing for users with uid and gidcut -d: -f1-4 /etc/passwd -
Getting group names
cat /etc/grouporcut -d: -f1 /etc/group | sort(for readable form)- get group names for a user
groups $USERid $USER
- get group names for a user
-
Password setup After creatiing user before login in we can setup password by
sudo passwd john -
Adding permissions By default when user is created he dont have permission to write anything there so he cant create any directory or file too in his own home directory. Before login in type this
sudo chown test:test /home/test -
Adding user to group https://serverfault.com/questions/688685/usermod-ag-vs-gpasswd-a-as-a-best-practice
sudo gpasswd -a $USER groupnameorsudo usermod -aG groupname usernameor for adding user to multiple groupssudo usermod -aG additional_groups usernameadditional_groups: comma separated list of groups -
Ensure group changes to take effect
newgrp group_name -
Allowing user to use sudo Uncomment the line starring
$ sudo ...thensudo usermod -aG sudo usernameso add user to sudo group-aGmeans adding user to group or usesudo usermod -aG wheel usernameif u dont wanna uncomment sudo and use wheel instead wheel will grant user priviledge to use sudo command To remove users from group 'wheel'sudo gpasswd -d username wheel -
Changing ownership
chown -c john file.txt(for users) orchown -c :johnGroup file.txt(for groups)-cfor reporting for directories usechown -R -c john file.txt(for users) -
Running command as different user without login
su - username -c 'command'orsudo -u username command -
Granting permissions to all root access priviledges to the user then add this to sudoers file (location : /etc/sudoers)
username ALL=(ALL:ALL) ALL(very dangerous config so avoid it as much as possible as it will grant nlimited access too) when installing distro first user can use cd or ls command in directories without use of sudo so do thissudo usermod -aG autologin $USERto add ability as same of first user if it doesnt work then check permissions and using chmod change -
Extended partition. access grant of directory can be
drwxr-x--x+here+at end stands for extended permissions means other user cant access its directories even if is setxpermission in others. Extended permissions is honored by fish shell but not bash shell may not honor it. to change it usesetfactland to get its detail usegetfactlTo add extended permissions usesetfacl -R u:user2:wrx /tmpto removesetfacl -bn /tmp -
to check permissions of directory simply instead of all files in it use
ls -ld <dirpath>
-
- For searching files
find /home/user/ | grep filenamehere - launch other user files with this
sudo -e /path/to/other/users/binary-epreserves your current user's environment variables etc. so audio should work - change to new user
sudo su - test - for searching files with particular extension also listing their meta data
find . -type f -name "*.ess" -exec ls -l {} + - for searching with min length 1 mb
find -size +1M - scrolling in terminal
TIL that u can scroll in terminal with
SHIFT+PGUP/PGDOWN - useful commands
to count number of files in current directory
ls | wc -l - tar and cpio
cpio
# creating archive of text files to archive.cpio find *.txt | cpio -o > archive.cpio # extracting content to current directory cpio -i < ../archive.cpio - to search for content recurseively across all files in a directory
grep -r hello <directory_path> - resources, basic command video
https://youtu.be/QhvDvpyvPSE
Nick, tell the beginners use 'trash' instead of 'delete, to retain file availability. Nick, tell the beginners that 'pwd' is NOT password. Nick, tell the beginners that 'cd -' takes them between recent directories. Nick, tell the beginners that Windows says 'folders', but Linux says 'directories'. Nick, tell the beginners that uppercase and lowercase letters denote DIFFERENT things in Linux. arp -ato get list of all otheer ip address of systems connected to same network- find number of files and directories recursively in given directory
find . -type f | wc -lfor filesfind . -type d | wc -lfor directories - to identify distro u r using
cat /etc/os-release - to see disk space left for each partitions
df -h
for resumable downloads use -c in wget
wget -c https://example.com
