As subtle as a flying brick.

Latest

How to check if a directory exists in a shell script

To check if a directory exists and is a directory use the following syntax:

[ -d "/path/to/dir" ] && echo "Directory /path/to/dir exits." || echo "Error: Directory /path/to/dir does not exits."

The following version also check for symbolic link:

[ -d "/path/to/dir" && ! -L "/path/to/dir" ] && echo "Directory /path/to/dir exits." || echo "Error: Directory /path/to/dir exits but point to $(readlink -f /path/to/dir)."

OR

[ -d "/path/to/dir" && ! -h "/path/to/dir" ] && echo "Directory /path/to/dir exits." || echo "Error: Directory /path/to/dir exits but point to $(readlink -f /path/to/dir)."

Finally, you can use the traditional if..else..fi:

if [ -d "/path/to/dir" ]
then
    echo "Directory /path/to/dir exits."
else
    echo "Error: Directory /path/to/dir does not exits."
fi

Shell script examples to see if a ${directory} exists or not

 
#!/bin/bash
dir="$1"

[ $# -eq 0 ] && { echo "Usage: $0 dir-name"; exit 1; }

if [ -d "$dir" -a ! -h "$dir" ]
then
   echo "$dir found and setting up new Apache/Lighttpd/Nginx jail, please wait..."
   # __WWWJailSetup "cyberciti.biz" "setup"
else
   echo "Error: $dir not found or is symlink to $(readlink -f ${dir})."
fi

In this example, create directories if does not exits:

# Purpose: Setup jail and copy files
# Category : Core
# Override : No
# Parameter(s) : d => domain name
#                action => setup or update
__WWWJailSetup(){
        local d="$1"
        local action="${2:setup}"       # setup or update???
        local index="$d

$d

" # default index.html
        local J="$(_getJailRoot $d)/$d" # our sweet home 
        local _i=""

        [ "$action" == "setup" ] && echo "* Init jail config at $J..." || echo "* Updating jail init config at $J..."
        __init_domain_config "$d"

        [ "$action" == "setup" ] && echo "* Setting up jail at $J..." || echo "* Updating jail at $J..."
        [ ! -d "$J" ] &&  $_mkdir -p "$J"

        for _i in $J/{etc,tmp,usr,var,home,dev,bin,lib64}
        do
                [ ! -d "$_i" ] &&  $_mkdir -p "$_i"
        done
        for _i in $_lighttpd_webalizer_base/$d/stats/{dump,out}
        do
                [ ! -d "$_i" ] &&  $_mkdir -p "$_i"
        done
        for _i in $_lighttpd_webalizer_prepost_base/$d/{pre.d,post.d}
        do
                [ ! -d "$_i" ] &&  $_mkdir -p "$_i"
        done
## truncated 
}

Summary

Use the following to check file/directory types and compare values:

  1. -L "FILE" : FILE exists and is a symbolic link (same as -h)
  2. -h "FILE" : FILE exists and is a symbolic link (same as -L)
  3. -d "FILE" : FILE exists and is a directory
  4. -w "FILE" : FILE exists and write permission is granted

 

Image

Gandalf. Smiling. Dancing.

If it doesn’t animate, click here.

Image

Wrong on many levels

Wrong on so many Levels.

Wrong on so many Levels.

Configure sudo To Send E-mail

sudo sandwich

sudo sandwich (Photo credit: Dan Harrelson)

Sudo can be configured to send e-mail when the sudo command is used. Open /etc/sudoers file, enter:
# vi /etc/sudoers
Configure alter email id:

 
   mailto "admin@staff.example.com"
   mail_always on

Where,

  • mailto “admin@staff.example.com” : Your email id.
  • mail_always : Send mail to the mailto user every time a users runs sudo. This flag is off by default.

Additional options:

Option Description
mail_badpass Send mail to the mailto user if the user running sudo does not enter the correct password. This flag is off by default.
mail_no_host If set, mail will be sent to the mailto user if the invoking user exists in the sudoers file, but is not allowed to run commands on the current host. This flag is off by default.
mail_no_perms If set, mail will be sent to the mailto user if the invoking user is allowed to use sudo but the command they are trying is not listed in their sudoers file entry or is explicitly denied. This flag is off by default.
mail_no_user If set, mail will be sent to the mailto user if the invoking user is not in the sudoers file. This flag is on by default.

Sudo Logfile

By default, sudo logs vis syslog. You can see sudo log in /var/log/auth.log (Debian / Ubuntu) or /var/log/secure (Redhat and friends). However, you can set the path to the sudo log file (not the syslog log file). Setting a path turns on logging to a file; negating this option turns it off. Type the following command to edit the file:
# sudoedit /etc/sudoers
Set path to log file:

 
   Defaults        !lecture,tty_tickets,!fqdn,!syslog
   Defaults        logfile=/var/log/sudo.log

Save and close the file. To see logs type:
# tail -f /var/log/sudo.log
# egrep -i 'foo' /var/log/sudo.log
# egrep -i 'user1|user2|cmd2' /var/log/sudo.log

Sample Outputs:

Jul  1 12:30:13 : vivek : TTY=pts/3 ; PWD=/home/vivek ; USER=root ; COMMAND=/bin/bash
Jul  1 12:34:02 : vivek : TTY=pts/0 ; PWD=/home/vivek ; USER=root ;
    COMMAND=sudoedit /etc/sudoers
Image

Working for a living.

image

Get only the latest version of a file from across mutiple directories

bash$ find . -name custlist\* | perl -ne '$path = $_; s?.*/??; $name = $_; $map{$name} = $path; ++$c; END { print $map{(sort(keys(%map)))[$c-1]} }'

Explanation

The purpose of this is to find the the “latest” version of the custlist_*.xls file from among multiple versions in directories and sub-directories, for example:

./c/custlist_v1.003.xls
./c/custlist_v2.001.xls
./d/b/custlist_v1.001.xls
./d/custlist_v1.002.xls

Let’s decompose the one-liner to the big steps:

  • find . -name custlist\* — find the files matching the target pattern
  • ... | perl -ne '...' — run perl, with the input wrapped around in a while loop so that each line in the input is set in the variable $_
  • $path = $_; s?.*/??; $name = $_; — save the full path in $path, and cut off the subdirectory part to get to the base name of the file and save it in $name
  • $map{$name} = $path; — build a mapping of $name to $path
  • ++$c; — we count the elements, to use it later
  • (sort(keys(%map)))[$c-1] — sort the keys of the map, and get the last element, which is custlist_v2.001.xls in this example
  • END { print $map{$last} }' — at the end of all input data, print the path of the latest version of the file

Limitations

Even if the latest version of the file appears multiple times in the directories, the one-liner will print only one of the paths. This could be fixed though if needed.

Super Bowl Movie Trailers: Oz, Iron Man 3, Star Trek: Into Darkness

Oz: The Great and Powerful

There isn’t much more added to this new trailer than other trailers you’ve seen, but it still looks like fun.

Iron Man 3
The Super Bowl trailer was just kind of a teaser, but here’s the full 1:30 spot, which gives you an extra 20 seconds or so of Tony Stark looking confused.

Star Trek: Into Darkness
Ooooh, Benedict Cumberbatch better deliver on the evilness or I’m gonna be disappointed.

[Via]

 

 

Fedora Linux 18 (Spherical Cow)

English: The official logo of the Linux distri...

Fedora Linux version 18 has been released and available for download. Fedora Linux is a community based Linux distribution. Fedora Linux is considered as the third most popular Linux distribution, behind Ubuntu and Mint for desktop usage. The new version comes with several new features such as – an installer that is rewritten and redesigned from the ground up, GNOME v3.6, KDE v4.9, Xfce v4.10, better network security with firewalld, Linux kernel v3.6, Python v3.3, Ruby on Rails v3.0, and much more.

What’s New In Fedora 18

  • Updated installer : The anaconda installer has been totally redesigned for Fedora 18. Users will now have more flexibility in how they configure their installation. Some tasks will run in the background to speed the installation process.
  • 256 color terminals – Many terminal programs (like vim and ls) can take advantage of 256 color terminals, and all xterms I know of support at least 256 colors and sometimes more.
  • Fedup tool – It is a new tool for upgrading Fedora installations that is replacing preupgrade and the DVD methods of upgrading that have been used in earlier Fedora releases. It uses systemd for much of the upgrade functionality and will eventually be able to source packages from a DVD and use the standard repository instead of an upgrade specific side repo. In other words, it is possible to install fedup on an Fedora 17 system using yum (yum install fedup). Finally run the fedup-cli command to prepare the upgrade using fedup-cli --network 18 --debuglog fedupdebug.log command.
  • UEFI Secure Boot – This will allow Fedora to boot on systems that have Secure Boot enabled. Tools are available for administrators to create custom certificates to sign local changes to GRUB or the kernel.
  • Secure Containers (LXC Container) – Using SELinux and virt-sandbox, services can be run in secure sandboxes, even as root. The virt-sandbox-service package will create mount points and a libvirt container.
  • Samba 4 – It is a combined set of daemons, client utilities, and Python bindings that allow communicating using SMB1, SMB2, and soon SMB3 protocols. It also implements Active Directory domain controller (DC) functionality as an integrated Kerberos DC, LDAP server, DNS server, and SMB/CIFS server.
  • /tmp on tmpfs – This is a security and power saving feature. By default, /tmp on Fedora 18 will be on a tmpfs. Storage of large temporary files should be done in /var/tmp. This will reduce the I/O generated on disks, increase SSD lifetime, save power, and improve performance of the /tmp filesystem.
  • Syscall filters – Syscall filtering is a security mechanism that allows applications to define which syscalls they should be allowed to execute.
  • Perl v5.16 – Upgrade to Perl 5.16 as brings a lot of changes.
  • OpenStack – This is an open source cloud computing platform. It lets you set up your own cloud infrastructure, similar to public clouds like Amazon EC2, Azure, etc. Fedora 18 comes with OpenStack “Folsom”.
  • Eucalyptus – It is a cloud computing software platform for on-premise (private) Infrastructure as a Service clouds. It uses existing infrastructure to create scalable and secure AWS-compatible cloud resources for compute, network and storage.
  • Web Servers – The Apache httpd package has been upgraded to version 2.4.3-1, which has many security and performance fixes. The lighttpd package has been upgraded to version 1.4.32-2.
  • Cinnamon – Fedora users now have the option of using Cinnamon, an advanced desktop environment based on GNOME3.
  • MATE desktop – This destop brings back a classic, intuitive, and easy to use desktop that users have been long requesting.
  • NetworkManager now supports an enhanced Hotspot – This allows Internet connection sharing mode for Wi-Fi, which enables a much smoother connection sharing experience and is better supported by hardware. This mode is automatically enabled only for new connections to make sure existing configurations are unchanged.
  • And much more. See Fedora 18 release note for more information.

Fedora 18 Screenshots

Fedora 18 DVD ISO download

You can download Fedora Linux 18 via the web/ftp server or via BitTorrent (recommended). The following DVD iso images are in live media format:

Download Fedora 18 GNOME live desktop dvd iso version

  1. Download 32 bit Live DVD ISO version (889MB)
  2. Download 64 bit Live DVD ISO version (916MB)

Download Fedora 18 KDE live desktop dvd iso version

  1. Download 32 bit Live DVD ISO version (805MB)
  2. Download 64 bit Live DVD ISO version (831MB)

Download Fedora 18 LXDE version

  1. Download 32 bit Live DVD ISO version (654MB)
  2. Download 64 bit Live DVD ISO version (682MB)

Download Fedora 18 Xfce version

  1. Download 32 bit Live DVD ISO version (662MB)
  2. Download 64 bit Live DVD ISO version (691MB)

See the release page and installation notes page for further information.

 

Image

Relaxing with Jennifer, watching some archer.

image

%d bloggers like this: