[colug-432] 2014-09-24會議 Scribbles 落書/惡文?
Mike Plemmons
mikeplemmons at gmail.com
Thu Sep 25 23:22:16 EDT 2014
This is a great resource. Thanks for sharing.
On Thu, Sep 25, 2014 at 9:23 PM, <jep200404 at columbus.rr.com> wrote:
> On Wed, 03 Sep 2014 20:54:48 -0400, Scott Merrill <skippy at skippy.net>
> wrote:
>
> > Jim Prior will present on editing the command line and scripting
> > on the command line. Jim will show one or more ways of doing
> > something, and then others will share better ways of do that same
> > thing. This should be an interactive and pretty practical
> > meeting.
> >
> > for f in *.htm; do echo mv -i "$f" "${f%%.htm}.html";done
> > for f in index.*.html; do echo mv -i "$f" "ndx.${f##index.}";done
>
> Release early, release often.
> Fun was had playing around with the command line.
>
> This presentation was inspired by mailing list thread[1], which said in
> part:
>
> > I am no longer shocked at how many do not understand the
> > basic productivity enhancement tools available to them like
>
> > shell history
> > screen
> > commands like watch
> > in place shell programming (basic for loops, etc)
>
> and
>
> > And _most_ only know about the arrow keys for history.
>
> Of those, this presentation was about:
> o searching the history
> o editing the command line
> o loops
> o some long strings of programs piped together
>
> First a little presentation about giving presentations.
>
> The key thing is that the presentation should be easily viewed by
> everyone
> in the audience, including those in the back row.
>
> Resolution
>
> 24 * 80 is about max resolution
>
> Colors
>
> Room lights on projection screens is common and bad, so
> maximize
> the contrast in your content to salvage what contrast is
> available
> to make it easier to see.
>
> GOOD:
>
> white on black
> black on white
>
> TOLERABLE:
>
> pastels on white
>
> BAD, VERY VERY BAD:
>
> colorized text on black
>
> combining multiple commands, especially loops
> In the following "stgfopl" means something that generates filenames, one
> per
> line. Examples could include:
>
> ls *
> ls *.JPG
> find . -type f -name '*.pdf' -print
>
> loops
>
> Here are some common patterns I use:
>
> for i in `seq 1234 4566`;do echo do something with "$i";done
> for f in *.pdf; do echo do something with "$f";done
> stgfopl | while read f; do echo do something with "$f";done
> stgfopl | xargs some command
>
> Most of the rest of this presentation will play with examples of
> those
> common patterns.
>
> I used to have loops like:
>
> i=5;while [ $i -le 10 ]; do echo $i;i=`expr $i + 1`;done
>
> I now usually use seq instead:
>
> for i in `seq 5 10`;do echo $i;done
>
> The former style still has a place where the output of seq is too
> much
> for the shell, of if the iteration is not just simple arithmetic
> sequence. For example, consider the following:
>
> i=1;while [ $i -le `echo '2^32' | bc` ]; do echo $i;i=`expr $i
> + $i`;done
>
> or for following links, such as in a chain of soft links, or a
> linked listg.
>
> find . -name '*.pdf' -print | xargs wc
> find . -name '*.pdf' -print | while read f; do echo do something
> with "$f";done
>
> for i in `seq 2622 2635`; do mv -i
> /media/jep/disk/DCIM/100GEDSC/GEDC`printf '%04d' "$i"`.* .;done
> for i in `seq 2622 2635`; do f=GEDC`printf '%04d' "$i"`.JPG;mv -i
> "$f" "${f%%.JPG}.jpeg" ;done
>
> Study, compare, and contrast:
>
> "${f%%.JPG}"
> "${f%.JPG}"
> "${f##hello.}"
> "${f#hello}"
>
> Some loops go on forever:
>
> while true; do time factor 1111111111111111111;done #32-bit
> while true; do time factor
> 11111111111111111111111111111111111111;done #64-bit
> while true; do date | tr '\n' '\r';sleep .1;done
> watch -n .1 "date | tr '\n' '\r'"
>
> history | sed -e 's/^ *[0-9][0-9]*
> [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]
> //gi' | sort | uniq -c | sort -nr | head
>
> Use echo to see what commands would be like (i.e., dry run) before
> actually
> doing commands.
>
> for f in *.JPG; do echo mv -i "$f" "${f%%.JPG}.jpeg" ;done
> for f in *.JPG; do mv -i "$f" "${f%%.JPG}.jpeg" ;done
>
> classic pipelines
>
> # Find the most common commands.
> # Often there are multiple correct ways to do something.
> history | awk '{print $4}' | sort | uniq -c | sort -n | tail
> history | awk '{print $4}' | sort | uniq -c | sort -n | tac | head
> history | awk '{print $4}' | sort | uniq -c | sort -nr | head
>
> but the focus of this presentation is more complicated stuff,
> particularly loops.
>
> How long of a line is too long?
>
> If it makes your head hurt, it's too long.
> If it slows you down, it's too long.
> Different people tolerate different amounts of complexity.
> If you're repeating some monster command often,
> it might be a good candidate to put into a shell script.
>
> history options
>
> The history can have timestamps. This can help one look for an old command
> that
> one ran some time ago, by narrowing how much of the history one looks at.
> When
> developing scripts, I will often paste multiple lines from them at once.
> The
> command timestamps can document how fast things worked. Hence the following
> line in .bashrc.
>
> HISTTIMEFORMAT="%F %T "
>
> # Comment commands
>
> Temporarily parking a command
>
> In the middle of writing some command, I realize that I need to run
> some other command first, so I put '#' at beginning of line and
> execute
> it, so the history remembers the command I was working on. Then
> run the
> command I needed to do first, then go back in recent history to
> get the
> abandoned command, delete the leading # and execute it.
>
> to document the history
>
> Russ mentioned deliberating executing a comment command, so that it
> ends up in the history to document the following (or preceding)
> commands.
>
> new bash exploit
>
> http://lists.colug.net/pipermail/colug-432/2014-September/003356.html
>
> http://fedoramagazine.org/flaw-discovered-in-the-bash-shell-update-your-fedora-systems/
>
> http://www.zdnet.com/unixlinux-bash-critical-security-hole-uncovered-7000034021/
>
> alias lll='ls -l --full-time'
>
> The --full-time output is easier for downstream programs to sort by
> date
> and/or time. Avoids difficulty of sorting month abbreviations. Also,
> the
> format does not switch for files more than a year old (time of day
> versus
> year). Compare the output of ll versus lll:
>
> jep at presentation:~$ ll -tr /etc
> total 1276
> -rw-r--r-- 1 root root 2064 Nov 23 2006 netscsid.conf
> ...
> -rw-r--r-- 1 root root 1189 Sep 25 20:20 mtab
> jep at presentation:~$ lll -tr /etc
> total 1276
> -rw-r--r-- 1 root root 2064 2006-11-23 14:33:10.000000000 -0500
> netscsid.conf
> ...
> -rw-r--r-- 1 root root 1189 2014-09-25 20:20:46.194351828 -0400
> mtab
> jep at presentation:~$
>
> some nifty things are available in bash, but not Bourne shell
> avoiding them is good for portability
>
> source instead of . (from csh, thanks Rob)
>
> $(command) instead of `command`
>
> $(command) can be nested.
> `command` can not be nested
>
> >(command)
>
> ... | tee "$f" | tee >(md5sum) >(sha1sum) >(sha256sum) /dev/null
> ... | tee "$f" >(gzip >"$f".gz) >(bzip2 >"$f".bz2) /dev/null
> drive=/dev/sr0;readrawcd $drive | tee >(md5sum) >(sha1sum)
> >(sha256sum) >/dev/null;sleep 10;eject $drive;date
> drive=xubuntu-12.04.4-desktop-i386.iso;readrawcd $drive | tee
> >(md5sum) >(sha1sum) >(sha256sum) >/dev/null;sleep 10;eject $drive;date
>
> tees tease: for fun try the above tees without the /dev/null
>
> <(command)
>
> vidf old new
>
> jep at presentation:~$ cat ~/bin/vidf
> # vim -O "$1" "$2" <(diff "$1" "$2")
> vim -O <(diff "$1" "$2") "$1" "$2"
> jep at presentation:~$
>
> $((arithmetic expression)) (e.g., $(($i + 1))
>
> i=5
> echo `expr $i + 1`
> echo `echo "$i + 1" | bc`
> echo `echo "print $i + 1" | python`
> # How to do above with awk instead of python?
>
> Miscellaneous
>
> Begin dangerous commands with '#' or echo while editing them.
> Remove the '#' or echo after one is satisfied that the command is
> correct.
>
>
> # rm -rf / foo
> # rm -rf /foo
> rm -rf /foo
>
> echo rm -rf / foo
> echo rm -rf /foo
> rm -rf /foo
>
> sudo !! is handy for rerunning command with sudo
>
> rm -rf /tmp/*
> sudo !!
>
> cmatrix text "screensave"
>
> On a sacrificial Ubuntu box in an xterm:
>
> sudo apt-get update
> sudo apt-get install cmatrix
> cmatrix
>
> .bashrc
>
> Many programs pay attention to the following:
>
> EDITOR=vim
> export EDITOR
>
> history options: I commented out some of Xubuntu's defaults.
>
> # don't put duplicate lines or lines starting with space in the
> history.
> # See bash(1) for more options
> #HISTCONTROL=ignoreboth
>
> # append to the history file, don't overwrite it
> shopt -s histappend
>
> Jason and Russ, please elaborate on the benefits and drawbacks
> of
> "shopt -s histappend".
>
> # for setting history length see HISTSIZE and HISTFILESIZE in
> bash(1)
> HISTSIZE=400000
> HISTFILESIZE=400000
> # HISTCONTROL=ignoredups:ignorespace
>
> I want all commands in the history. I _do_ want to save the
> duplicate commands. Sometimes repeated commands are necessary
> for
> some task. Having the history remember the repeated commands is
> helpful for repeating the whole sequence again later.
> Sometimes I
> want to see how long each command took. Timestamps for repeated
> commands answer that. My command to show the most common
> commands
> relies upon those duplicate commands being in the
> history.
>
> unset HISTCONTROL
> HISTFILESIZE=400000
> HISTSIZE=400000
> HISTTIMEFORMAT="%F %T "
> export HISTCONTROL
> export HISTFILESIZE
> export HISTSIZE
>
> EMACS is default for editing command line and history.
> set -o vi to select vi for editing command line
>
> git stuff
>
> I need to use git version control more. Good candidates are:
>
> gas price stuff
> .bashrc
> .vimrc
> vidf
>
> I found http://www.git-scm.com/book/en/Git-on-the-Server and other git
> tutorials on that site to be helpful. Rebasing is cool.
>
> locate foo | xargs md5sum | sort
>
> Russ, what the line number and URL for your nasty example from
> https://github.com/herrold/?
>
> Is Apple's default search engine now duckduckgo, not Google anymore?
> Has Apple's canary disappeared?
>
> tmux
>
> Jason, please elaborate on virtue of using ^Q.
>
> tmux pipe-pane -o 'cat >>'$PWD/tmux.output.`date +%Y%m%d-%H%M%S`
>
> Screenkey was used to show what keys were typed to edit the command line
> and
> history. Need to tweak screenkey to:
>
> put it out of the way to waste less space on screen
> make it smaller
> make it persist (a log file would be nice too)
>
> https://launchpad.net/screenkey????
>
> I would be happy with key logger output showing in an xterm window.
>
> # Redirect stdout and stderr with timestamping to log file.
> exec 1> >(timestamper | tee -a log) 2>&1
>
> jep at presentation:~$ cat /home/jep/tools/timestamper.c
> #include <stdlib.h>
> #include <stdio.h>
> #include <unistd.h>
> #include <time.h>
> #include <sys/time.h>
> #include <string.h>
>
> #define False (0)
> #define True (!False)
>
> typedef unsigned char flag;
>
> #define ArrayLength(x) (sizeof(x)/sizeof(*(x)))
>
> void print_timestamp(void)
> {
> char buf[80];
> int i;
> struct timeval now;
> struct tm *b;
>
> gettimeofday(&now,NULL);
> b=localtime(&now.tv_sec);
> i=sprintf(buf,"%04d-%02d-%02d %02d:%02d:%02d.%06d "
> , b->tm_year+1900
> , b->tm_mon+1
> , b->tm_mday
> , b->tm_hour
> , b->tm_min
> , b->tm_sec
> , (unsigned int)now.tv_usec);
>
> write(STDOUT_FILENO,buf,i);
> }
>
> int main(int argc,char *argv[])
> {
> unsigned char buf[1];
> flag please_print_timestamp=True;
> int i;
>
> while ((i=read(STDIN_FILENO,buf,ArrayLength(buf)))>0) {
> if (please_print_timestamp) {
> please_print_timestamp=False;
> print_timestamp();
> }
> write(STDOUT_FILENO,buf,i);
> if (buf[0]=='\n')
> please_print_timestamp=True;
> }
>
> return EXIT_SUCCESS;
> }
> jep at presentation:~/monarch/dev-code$
>
> Impedance matching:
>
> Cracking a whip reminds me of how tsunamis can travel in fast, short,
> long
> waves over vast stretches of deep water, then become tall waves in
> short
> water. What's the electrical analogy to cracking whips and tsunamis?
> It's
> probably a bunch of capacitors dumping into some tuned LC network.
> Hmmm.
> Study microwave strip stuff. It also reminds me of Francis turbines.
>
> wp:is a prefix for wikipedia
> wp:Gödel, Escher, Bach
>
> [1] It got interesting, starting around here:
> http://lists.colug.net/pipermail/colug-432/2014-July/003223.html
> http://lists.colug.net/pipermail/colug-432/2014-July/003225.html
> http://lists.colug.net/pipermail/colug-432/2014-July/thread.html#3223
>
> _______________________________________________
> colug-432 mailing list
> colug-432 at colug.net
> http://lists.colug.net/mailman/listinfo/colug-432
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.colug.net/pipermail/colug-432/attachments/20140925/a2ec3d92/attachment-0001.html
More information about the colug-432
mailing list