Monday, January 5, 2015

Usefull linux commands

  • find folderABC -mtime -9 -- show files in and below folder ABC modified less than 9 days ago
  • ps
    • ps aux | grep myprocesspartialname - not no '-' before the options
    • /bin/ps -context -www -p processID -- shows wide command line for the process
  • svn status | grep '^M' -- shows files modified in the current SVN copy
  • svn diff -r HEAD fileABC -- compares the file ABC to its most recent version in the repo
  • zip+unzip:
    • unzip zip-file -d destination-folder  -- unzip a file
  • tar+gzip:
    • tar -ztvf file.tar.gz -- list contents of gzipped tar archive file.tar.gz
    • tar -czf file.tar.gz file1 file2 file3 -- create a gzipped archive file.tar.gz with three files in it
    • tar -xzf tar-file-name.tar.gz
  • bzip2
    • to unpack a bz2 file use command:  bzip2 -dk filename.bz2
  •  vim:
    • search - just like in vi, by hitting / you can search by specifying a regex pattern
    • to search for a whole word: \<...\>
    • to escape a special char, for example to search for a path, do: \/opt\/jboss
    • to cut lines into a vim internal clipboard, use dd command.
    • option :set-nowrap turns of the default, and sometimes annoying, line wrapping
    • to toggle word wrapping, use command:  :set wrap!
    • to do case-ignore search do /\cAlicja, and to do case sensitive search use \C
    • to mark a location type m L, where L is any letter, e.g. m a, and to move back to this location type: ' L (single apostrophe)
    • to place the current line at the top, center or bottom, hit zt, z., or zb.
  •  symbolic link: ln -s target link-name
    To me, it seems backward, but I guess you can say it like this: take target and call it link-name 
  •  folders
    •  remove: rm -r folder-name
      (note: rmdir will delete only an empty folder)
    • copy: cp -r folder-name dest-folder-name
    •  with -f option, you can avoid any questions 
    • by convention: folder/* means contents of the folder, while folder/ means all of the folder 
  • diff files and folders
    •  -wBb file1 file2 -- diff two files with all whitespaces ignored (new lines are not ignored-this is a much more complex problen, even just conceptually) 
    • -r dir1 ird2 -- recursively, shows files found only in one of the trees, for binaries shows message "files different"
  • du which tells "how much of the precious space does a this folder or files use":
    • du -sh my-folder/*  -- shows size of all files and folders in my-folder folder, one number per file/folder
  • df -h  which shows you the list of the files systems and which of them full if any.
  • grep
    •  ignoring the useless Permission denied entries.  Can be done using a redirection: grep my-cat-Lois my-folder/Lois-files 2> /dev/null
    • with a regex.  The simplest regex to find one or more tabs in the file was:
      grep '^This[[:space:]]\+5' parms*.txt
    • show only file name: option -l
    • to search through compressed .bz2 files, use bzgrep instead of grep
    • to search for words, use -w option 
  • su and sudo  -- both can take a user as a parm (superuser by default).  The su switches to that user until you do exit, while sudo is followed by a command, that only this one command is executed in the assumed user context.  
  • chown -R jboss:jboss_grp * --  change ownership of all files in this folder and below to user jboss, group jboss_grp.
  • adduser username -- add a new user. Once the user is created, to add user to the sudo group, repeat the same command with one more argument at the end: sudo
  • passwd user1 -- change password for user1 
  • awk -F '\t' ' /^Product\t/ {print $7} ' file.txt 
    • -F - Tab as a separator (deault: spc)
    • '...'  - program, inline  
    • default program structure: condition action
    •  Together: above command prints 7th (tab-separated) element of all lines of file file.txt that start with 'Product\TAB'
    • a bit more complex script:  { if( $0 ~ /^Fund\t/ && $10 == "False") {print $13} } -- It prints 13th element of the record, but only for lines starting with 'Fund', where the element 10th is 'False'.
    • and, if you need to process mutliple files, one option is a shell script:
      #!/bin/bash
      for var in $(ls /var/GOLL/import/exportPP_*.txt); do
        ls -l $var
        awk -F '\t' ' { if( $0 ~ /^Fund\t/ && $10 == "True") {print $3, $6, "ClosedDate:", $8, $10, $11, $12, $13} }' $var
      done
  • dmsg  show system messages, e.g. out-of-memory errors and processes killed as a result
  • working in command line:
    • to find a previous command you can use Ctrl-R (reverse search) 
  • less, tail and vim - you can open a file to view anypart of it using vim-like commands and switch to the 'tail -f' mode with Ctrl-F.  Then, Ctrl-C will take you back to viewing the whole file.
  • mkdir -p /var/dir1/dir2  -- create directory with all its missing parents
  • getfacl folder  -- show details of custome access specs for a folder (it shows as + on the long directory/file listing)