From: eliot Date: Sun, 24 May 2020 10:46:23 +0000 (+0200) Subject: (no commit message) X-Git-Url: https://git.g-eek.se/?a=commitdiff_plain;h=be3da4a2babe22912d5f93ade6bc90c41c0957d0;p=inbyggd-frihet-wiki.git --- diff --git a/linux-intro/meeting0.txt.mdwn b/linux-intro/meeting0.txt.mdwn index 855b243..1d85a84 100644 --- a/linux-intro/meeting0.txt.mdwn +++ b/linux-intro/meeting0.txt.mdwn @@ -1,152 +1,152 @@ -#!/usr/bin/env bash - -#Copy file contents into Clipboard ("ctrl+c") -xclip -sel c < file - - -### Buffers and redirect ### - -#buffers 0=STDIN, 1=STDOUT, 2=STDERR, then 3 up to 9 are available for use - -#exec without command argument will redirect IO for current program e.g. -#send stdout to /dev/null via file descriptor 9 -exec 9>/dev/null 1>&9 -#restore stdout so we can see it -exec &>/dev/tty - -# example of redirect, get use to this //Gustav -cat < my_file.txt > my_new_file.txt - -### Man pages ### - -man #regular man pages -help #for help bash -apropos #search man pages (man) - -### Symlinks and inodes ### - -readlink #shows symlink info, also see f flag - -#hardlink points to underlying inode so multiple can exist, and as long as any do exist the inode cannot be overwritten -#hardlink cannot point to folder as this would create loops -#however, symbolic (soft) links can point to folders since `readlink` shows the real path. - - -#use `stat` to see amount of (hard) links to a file, and other such info -stat -readlink -ln a b -ln -s a b - -### Bash shortcuts ### - -#0th argument of last command -echo !:0 - -#return from last command ("error code") for C errors see errno -echo $? - - -### grep, sed, awk - -#the tools grep, sed, and awk are usually available on a Linux system and can be used for different purposes, - # although it's often a matter of taste. -# These tools all use regular expressions (regex), - # awk - extended regex - # sed - regex (-E for extended) - # grep - regex (-E for extened) - -# grep together with the default programs in Linux (core utilities) can perform many basic operations - # grep, cut, wc, head, tail, strings, ... - # These can also be used together with sed, awk, or other tools -# sed is good for a lot of things, especially text modification e.g. search and replace stuff - # example: find all headers (# ## ### etc) and add AS MANY # to the end of line -# awk, can use more advanced statements as well as variables and arrays to count and sum results, - # thereby easily maintain data over multiple lines. - # awk also supports delimiters to further split the rows into smaller fields. - - -####### The rest of this document shows examples of text manipulation ####### - - -### SED append corresponding nr of '#' ### - -#save starting '#' (at least 1) to group and append last to line -#s/ for search and replace -#\) group hits for later use as \1 and \2 ('#' and rest of text) -#Note that spaces have a meaning for the matching -#find rows starting with AT LEAST one '#' and save as first group, - # the rest '.*' (all chars) to the end of row ($) save as second group. - # Finally the text is printed as \1 \2 \1, i.e. the starting '#' are repeated at the end. - -sed -i "s/^\(##*\)\(.*\)$/\1\2 \1/" example_doc.txt - -#extended regex -sed -i -E "s/^(#+)(.*)$/\1\2 \1/" example_doc.txt - - -### Find users with bash as shell ### - -#use cut to get first word before delimiter : -grep "/bin/bash" /etc/passwd | cut -d \: -f 1 - -#find lines ending with 'bash', each hit perform search and replace -sed -E "/.*bash$/ { s/^(\w*).*$/\1/;p };d" < /etc/passwd - -#set separator ':', match regex, and print first string (before separator) -awk -F: '/bash/{ print $1 }' < /etc/passwd - - -### Lines without word ### - -grep -v "daemon" /etc/group - -sed -E "/daemon/d" < /etc/group - -awk '!/daemon/' < /etc/group - - -### Count hits and show relevant lines ### - -#print matching lines numbers -awk '/localhost/{print "Line " NR " matches"}' < /etc/hosts - -# Count nr of hits (i) and matching line numbers (NR) -# TODO this seems broken! -#awk '/localhost/{i=0}{i++} /localhost/{print "Line " NR " matches"} END {print i " hits"}' < /etc/hosts - - -### List files with numbers (exclude folders) ### - -#ls -p to list folders with / at the end -ls -p /etc/ | grep -v ".*/$"| grep "[0-9]" - -ls -p /etc/ | awk "! /.*\/$/ && /[0-9]/" - -#delete lines ending in /, then print remaning lines which contains at least a number, delete all lines -ls -p /etc/ | sed -E "/\/$/ d; /[0-9]/ p; d" - - -### SUM variables with awk ### - -#If third argument delimted by : only contains digits add it to sum -awk -F ':' '$3 ~ /^[0-9]+$/ {sum+=$3} END {print sum}' < /etc/passwd - - -### AWK DIV ### - -#BEGIN { -# # Things to be done before you start processing rows. -#} -#{ -# # Things to be done for each row. -#} -#END { -# # Things to be done after processing the last row. -#} - - -### Div ### - -#simple find exact filename -ls /usr/share/doc -R | grep "^README$" + #!/usr/bin/env bash + + #Copy file contents into Clipboard ("ctrl+c") + xclip -sel C < file + + + ### Buffers and redirect ### + + #buffers 0=STDIN, 1=STDOUT, 2=STDERR, then 3 up to 9 are available for use + + #exec without command argument will redirect IO for current program e.g. + #send stdout to /dev/null via file descriptor 9 + exec 9>/dev/null 1>&9 + #restore stdout so we can see it + exec &>/dev/tty + + # example of redirect, get use to this //Gustav + cat < my_file.txt > my_new_file.txt + + ### Man pages ### + + man #regular man pages + help #for help bash + apropos #search man pages (man) + + ### Symlinks and inodes ### + + readlink #shows symlink info, also see f flag + + #hardlink points to underlying inode so multiple can exist, and as long as any do exist the inode cannot be overwritten + #hardlink cannot point to folder as this would create loops + #however, symbolic (soft) links can point to folders since `readlink` shows the real path. + + + #use `stat` to see amount of (hard) links to a file, and other such info + stat + readlink + ln a b + ln -s a b + + ### Bash shortcuts ### + + #0th argument of last command + echo !:0 + + #return from last command ("error code") for C errors see errno + echo $? + + + ### grep, sed, awk + + #the tools grep, sed, and awk are usually available on a Linux system and can be used for different purposes, + # although it's often a matter of taste. + # These tools all use regular expressions (regex), + # awk - extended regex + # sed - regex (-E for extended) + # grep - regex (-E for extened) + + # grep together with the default programs in Linux (core utilities) can perform many basic operations + # grep, cut, wc, head, tail, strings, ... + # These can also be used together with sed, awk, or other tools + # sed is good for a lot of things, especially text modification e.g. search and replace stuff + # example: find all headers (# ## ### etc) and add AS MANY # to the end of line + # awk, can use more advanced statements as well as variables and arrays to count and sum results, + # thereby easily maintain data over multiple lines. + # awk also supports delimiters to further split the rows into smaller fields. + + + ####### The rest of this document shows examples of text manipulation ####### + + + ### SED append corresponding nr of '#' ### + + #save starting '#' (at least 1) to group and append last to line + #s/ for search and replace + #\) group hits for later use as \1 and \2 ('#' and rest of text) + #Note that spaces have a meaning for the matching + #find rows starting with AT LEAST one '#' and save as first group, + # the rest '.*' (all chars) to the end of row ($) save as second group. + # Finally the text is printed as \1 \2 \1, i.e. the starting '#' are repeated at the end. + + sed -i "s/^\(##*\)\(.*\)$/\1\2 \1/" example_doc.txt + + #extended regex + sed -i -E "s/^(#+)(.*)$/\1\2 \1/" example_doc.txt + + + ### Find users with bash as shell ### + + #use cut to get first word before delimiter : + grep "/bin/bash" /etc/passwd | cut -d \: -f 1 + + #find lines ending with 'bash', each hit perform search and replace + sed -E "/.*bash$/ { s/^(\w*).*$/\1/;p };d" < /etc/passwd + + #set separator ':', match regex, and print first string (before separator) + awk -F: '/bash/{ print $1 }' < /etc/passwd + + + ### Lines without word ### + + grep -v "daemon" /etc/group + + sed -E "/daemon/d" < /etc/group + + awk '!/daemon/' < /etc/group + + + ### Count hits and show relevant lines ### + + #print matching lines numbers + awk '/localhost/{print "Line " NR " matches"}' < /etc/hosts + + # Count nr of hits (i) and matching line numbers (NR) + # TODO this seems broken! + #awk '/localhost/{i=0}{i++} /localhost/{print "Line " NR " matches"} END {print i " hits"}' < /etc/hosts + + + ### List files with numbers (exclude folders) ### + + #ls -p to list folders with / at the end + ls -p /etc/ | grep -v ".*/$"| grep "[0-9]" + + ls -p /etc/ | awk "! /.*\/$/ && /[0-9]/" + + #delete lines ending in /, then print remaning lines which contains at least a number, delete all lines + ls -p /etc/ | sed -E "/\/$/ d; /[0-9]/ p; d" + + + ### SUM variables with awk ### + + #If third argument delimted by : only contains digits add it to sum + awk -F ':' '$3 ~ /^[0-9]+$/ {sum+=$3} END {print sum}' < /etc/passwd + + + ### AWK DIV ### + + #BEGIN { + # # Things to be done before you start processing rows. + #} + #{ + # # Things to be done for each row. + #} + #END { + # # Things to be done after processing the last row. + #} + + + ### Div ### + + #simple find exact filename + ls /usr/share/doc -R | grep "^README$"