2010/09/28

Favorite command line tricks in Linux

The following are a list of commands that have been useful for me on the linux command line. Please use the 'man' command from the terminal to learn how to use the commands.

'>>' text that follows these symbols are to be entered on the command line.

>>man  [command] # prints manual/instructions and options for the linux command. Type 'ctrl' + 'z' to exit the manual. Example >>man find #shows instructions for find command
>>rm [filename]# deletes file
>>cp [filename] [destination]#copies file to destination
>> find #finds files, a very powerful command because its list of files can be piped '|' into another command which allows processing a large number of files at once.
>>xargs [options] command # build and execute command lines from standard input (which is normally the keyboard).

  • -0 #Useful when input items  might  contain  white  space, quote marks, or backslashes.
  • -I #Replace occurrences of replace-str in the initial-arguments with names read from standard  input. Also, unquoted blanks do not terminate input items; instead the separator is the newline charac‐ ter.  Implies -x and -L 1.
  • --max-procs=max-procs # Run up to max-procs processes at a time; the default is 1.  If max-procs is 0, xargs will run  as
    many processes as possible at a time.  Use the -n option with -P; otherwise chances are that only one exec will be done.
    xargs -0 -I "{}" ~/Documents/py/speedup.py "{}"
find -name "*.mp3" -print0 | xargs -0 --max-procs 2 -I "{}" [command] "{}"

Tags: command line, shell, linux, find, arg, man

2010/09/25

Calling another application or process from python

Incomplete and in progress as of 09/25/2010

example taken from gpodder program

I think this allows multiple threading according to the last line
def open_process(command_line):
        log('Running external command: %s', command_line)
        p = subprocess.Popen(command_line, shell=True)
        result = p.wait()
        if result == 127:
            log('Command not found: %s', command_line)
        elif result == 126:
            log('Command permission denied: %s', command_line)
        elif result > 0:
            log('Command returned an error (%d): %s', result, command_line)
        else:
            log('Command finished successfully: %s', command_line)
threading.Thread(target=open_process, args=(command_line,)).start()

2010/09/16

Podcast Time stretching (making playback slower or faster)

Speeding up the playback speed of podcasts by 40%. I can now listen to more podcasts in the same amount of time. I am running Ubuntu linux 10.04. I listen to podcasts on a Sansa clip +. All commands are run from the command line.

You need to install the following programs to for this to work: sox, lame, libid3-3.8.3-dev

Copy the following line into the terminal to install the software.
sudo apt-get install sox lame libid3-3.8.3


I used this link as information.

# decoding an mp3 to wav
# lame --decode "filein.mp3" "fileout.wav"
# process file with soundstretch playing file back 40% faster
# soundstretch "$1.wav" "$1.fast.wav" -tempo=+40
# encode mp3 file using lame
# lame --preset fast medium "$1.fast.wav" "$1.2.mp3"
# copy id3 tags from old file
# id3cp "$1" "$1.2.mp3"  #is not copying id3v2 tags correctly

Note: id3cp would not copy id3v2 tags correctly to the mp3 file. id3cp does copy id3v1 tags correctly for use on the sansa clip +. The command to copy only the id3v1 tag is >> id3cp -1 [source file] [destination file]

 lame --decode DAB\ September\ 14\ -\ 2010.mp3 - | soundstretch stdin stdout -tempo=+40 | lame - dab.20100914.mp3

Lame command line help here.
  • To  read  from stdin, use "-" for <infile>.  To write to stdout, use a "-" for <outfile>.
  • lame --decode DAB\ September\ 14\ -\ 2010.mp3 dab.20100914.wav

Soundstretch command line help here.

  • soundstretch dab.20100912.wav stdout -tempo=+40 | lame - dab.20100912.mp3 
  • Give "stdin" as filename to use standard input pipe.
  • Give "stdout" as filename to use standard output pipe.
Convert file using soundstretch and make the playback 40% faster
f="twit0266.mp3";lame --decode $f $f.wav; soundstretch $f.wav $f.fast.wav -tempo=+40; lame $f.fast.wav $f.fast.mp3; id3cp -1 $f $f.fast.mp3; cp $f ~/podcasts/slow/a/; mv $f.fast.mp3 $f; rm $f.wav $f.fast.wav
  * id3v2 tags are not copied
  * run this from linux command line
  * original mp3 file is moved to home/podcasts/slow/ directory


Convert file using sox and make the playback 40% faster
f="twit0266.mp3";lame --decode $f $f.wav; sox --show-progress $f.wav $f.fast.wav tempo 1.4; lame $f.fast.wav $f.fast.mp3; id3cp -1 $f $f.fast.mp3; cp $f ~/podcasts/slow/a/; mv $f.fast.mp3 $f; rm $f.wav $f.fast.wav
  * id3v2 tags are not copied, id3v1 tags are copied
  * run this from linux command line
  * original mp3 file is moved to home/podcasts/slow/ directory

Running sox by itself on a wave file
 sox --show-progress z.wav zz.wav tempo 1.4 #speed up by 40%

    2010/09/05

    Testing Local Area Network speeds with Ubuntu Linux

    This is a draft and I am still working on this post.

    I am trying to learn how to test my local area network at home (LAN). I am running Ubuntu 10.04 as an NFS version 3 server. My file transfer speeds are slow between my linux netbook (Ubuntu 10.04) and my wife's Macbook pro running Snow Leopard. This will detail my attempt at trouble shooting my LAN. I have only been using Ubuntu exclusively since the beginning of the year having switched from XP. My server has 2 GB of memory running an AMD athlon 64 x2 3600+ with several Terrabytes of storage.

    I am following this thread and used the program iperf to check network speeds.
    iperf is run from the command line and can be found in the Ubuntu repositories. Typing 'man iperf' will explain the options for iperf.


    On my server using iperf to run in server mode
    Code: iperf -s

    On my netbook running as a client

    Code: iperf -c 192.168.1.3 -d -o ~/netbook.wifi-g.txt

    Options explained
      -c <host> = run in client mode connecting to 'host' which is the name or ip address of the server
      -d = do a bidirectional test
    ==============================
    nhfsstone - Network File System benchmark program

    nfsstat - list NFS statistics

    ===============================
     from miegiel http://ubuntuforums.org/member.php?u=514319

    Make sure you're not confusing Mbits and Mbytes. For you network 1byte = 8bit. So a 100Mbit network connection will never let you transfer at a speed greater than 12.5 Mbyte/s. However protocol overhead can account for another 10% speed loss, depending on the used network protocol. In general 10Mbyte/s is a good speed on a 100Mbit/s network.

    ps. Your file browser will probably give you a speed in (M,k) bytes.

    LAN Hardware

    Cable Modem
    CABLE MODEM LINKSYS|CM100 RTL


    Router
    WL ROUTER ASUS|RT-N16 R
    wifi n- Maximum raw data rate of 600 Mbit/s with the use of four spatial streams at a channel width of 40 MHz. This equates to 150 Mbit/s with a single stream (a).
    Switch

    SWITCH ASUS|GX-D1081 R

    Home Server

    • 2 GB of memory running an AMD athlon 64 x2 3600+
    • several Terrabytes of storage
    • NIC INTEL PWLA8391GTBLK GIGABIT 1000 Mbit/s

    Acer Aspire One netbook AO250
    • 10/100 RJ45 lan jack - 100Mbps
    • wifi g - operates at a maximum raw data rate of 54 Mbit/s, or about 19 Mbit/s net throughput (b)


    Online Bit Calculator

     a http://en.wikipedia.org/wiki/IEEE_802.11n-2009
     b http://en.wikipedia.org/wiki/IEEE_802.11g-2003