Difference between revisions of "Linux Tools"

From Healthcare Robotics Wiki
Jump to: navigation, search
(command line tools: find, sed, rename)
(command line tools: find, sed, rename)
Line 38: Line 38:
''' And rename: '''
''' And rename: '''
# Rename JPG to jpg for all the files in a folder: ''rename 's/JPG/jpg/' *''
# Rename JPG to jpg for all the files in a folder: ''rename 's/JPG/jpg/' *''
''' Use netcat to test ports'''
# nc -l 1234
# nc 1234
== bash scripting ==
== bash scripting ==

Revision as of 16:22, 22 June 2010

vim tips and tricks


To be able to ssh to another machine without needing to type your passwd:

Generate keys: $ ssh-keygen -t rsa -b 1024

Use the default file name and empty pass phrase for password less authentication. This will generate keys in

$ .ssh/id_rsa.pub

Then secure shell copy to another host as authorized_keys

$ scp ~/.ssh/id_rsa.pub <machine name>:~/.ssh/authorized_keys

Instructions copied from: http://pr.willowgarage.com/wiki/GB_ssh-keygen

Additional keys can be named authorized_keys2 and so on.

command line tools: find, sed, rename

The find command is pretty nifty:

  1. find all directories whose name does not contain svn: find . ! -path "*.svn*" -type d
  2. remove .svn folders, e.g. after copying a directory which is a local copy of a subversion repository: rm -rvf `find . -name "*.svn"`
  3. recursively remove all the .pycs: alias rmpyc='rm -vf *.pyc; rm -vf `find . -name *.pyc`'
  4. remove the pesky .pycs from the repository: svn rm `find . -name "*.pyc"`
  5. list all pkl files with the word grasp but not the word choose: find . -name '*grasp*.pkl' -and ! -name '*choose*.pkl'
  6. avoid initial ./ in file name: find * -name "pull_trajec*.pkl"

So is sed:

  1. replace update_path with load_manifest. (-i is doing an in-place replace, Advait believes): sed -i 's/update_path/load_manifest/' `find . -name "*.py"`
  2. look at the insert_license.sh script in gt-ros-pkg for some more examples of using sed.

And rename:

  1. Rename JPG to jpg for all the files in a folder: rename 's/JPG/jpg/' *

Use netcat to test ports

  1. nc -l 1234
  2. nc 1234

bash scripting

  1. padding zeros before file or directory names: mkdir `printf "%03d %04d" 5 6`
  2. counters in bash scripts: N=1 ... let N=$N+1
  3. listing only the directory names: ls */ -d
  4. http://tldp.org/LDP/abs/html/refcards.html

udev for persistent device naming

Steps in brief

  • sudo lsusb -v >pre # with device being unplugged
  • sudo lsusb -v >post # with device being plugged in
  • diff pre post (or use meld for a nicer graphical tool for comparing files) # you can read the Serial Number on the line "iSerial" etc.
  • Now edit the udev rules in /etc/udev/rules.d/10-ROBOT.rules
  • sudo /etc/init.d/udev restart
  • ls /dev/robot -- to check whether the devices appear.

Sample file

Here is a sample 10-ROBOT.rules file that we use on our robot.

BUS=="usb", KERNEL=="ttyUSB*", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="6001", SYSFS{serial}=="A7003N1b", SYMLINK+="robot/servo0"
BUS=="usb", KERNEL=="ttyUSB*", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="6001", SYSFS{serial}=="ftDXR6FS", SYMLINK+="robot/zenither" 
SUBSYSTEMS=="usb", KERNEL=="ttyACM*", PROGRAM="/home/advait/ros/pkgs/ros-pkg-trunk/stacks/laser_drivers/hokuyo_node/bin/getID /dev/ttyACM%n q", ATTRS{manufacturer}=="Hokuyo Data Flex for USB", ATTRS{product}=="URG-Series USB Driver", SYMLINK+="robot/hokuyo_%c"
BUS=="usb", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="e729", SYSFS{serial}=="00000215", SYMLINK+="robot/segway_front" BUS=="usb", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="e729", SYSFS{serial}=="00000201", SYMLINK+="robot/segway_back"
SUBSYSTEM!="usb", GOTO="robot_rules_end" ACTION!="add", GOTO="robot_rules_end" ATTRS{idVendor}=="0403", ATTRS{idProduct}=="e729", MODE="0660", GROUP="plugdev" LABEL="robot_rules_end"

More information

Linux & Mac Hardware

  • fix mac function keys in ubuntu: link