[HPADM] [Summary] root near to 89%

From: Hustert Klaus-CKH035 (Klaus.Hustert_at_motorola.com)
Date: 09/17/03

  • Next message: Julian Rogan: "[HPADM] Omnistorage problems"
    To: "'HP-UX Admin'" <hpux-admin@DutchWorks.nl>
    Date: Wed, 17 Sep 2003 16:10:20 +0200
    
    

    Thanks to all who has respond and so really fast they did!

    The key answer is the param -xdev for the find command I think.

    The answer I got mostly was `find / -xdev -size +100000c -print`

    Some variations:
    find / -xdev -type f -exec du -k {} \; | sort -n
    find / -xdev -size +1000 -exec ll -d {} \;

    But also the others are from interrest:
    find / -fstype hfs -type f -exec ls -l {} \;
    du / | sort -n
    du -sk * | sort -nr | head -nn (where nn is a number of files you want to report back. 10 is a good start point...)
    cd /;du -akx * | sort -rn | more

    Or some perl scripts:

    First:

    #!/usr/bin/ksh
    #
    # bigger <size_in_mbyte>
    #
    # Show the files bigger then a given value in MB, sorted by size. # Performs the search starting from current directory
    # and only in current filesystem (thanks to -xdev).
    #
    # Stefano at Unternaehrer dot net

    if test $1 && test $1 -gt 0
    then
            GRAND=$1
            BYTES=`echo ${GRAND}*1024*1024 | bc`
            echo
            pwd
            echo Files bigger than $GRAND MB in current FS:
            echo
            FNAMES=`find . -xdev -size +${BYTES}c`

            if test -n "$FNAMES"
            then
                    ls -Al ${FNAMES} | sort +4nr
            else
                    echo -- nothing --
            fi
            echo
    else
            echo
            echo "usage: bigger size_in_megabytes"
            echo " ex: bigger 10"
            echo
    fi

    Second:
    - - - - - snip - - - - -
    #!/usr/bin/perl
    #
    # 06/03 wht; v1.20: Made verbose the default output and added the -s option # 06/03 wht; v1.10: Added verbose (-v) option # 06/03 wht; v1.00: Created
    #*****************************************************************************
    # fbig
    #*****************************************************************************
    #
    # PURPOSE
    # find big files
    #
    # SYNTAX
    # fbig [ -s ] [ starting_directory ]
    #
    # OPTIONS
    # -s size only (or "simple") output
    #
    # starting_directory
    # directory to start looking for files.
    # default is the current directory
    #
    #*****************************************************************************
    #

    $CMD = $0; # full program name as it was called
    $0 =~ s:^.*/::; # program name sans directory info
    $VERSION = "1.00"; # version

    $FALSE = 0; # FALSE
    $TRUE = 1; # TRUE

    # month number to name hash
    %NUM_TO_MONTHS = (
        0 => "Jan", 1 => "Feb", 2 => "Mar",
        3 => "Apr", 4 => "May", 5 => "Jun",
        6 => "Jul", 7 => "Aug", 8 => "Sep",
        9 => "Oct", 10 => "Nov", 11 => "Dec",
    );

    #-----------------------------------------------------------------------------
    # Main Routine
    #
    # Note: The main routine is simply a wrapper for the real script so the
    # output can be piped through "more".
    #
    FBig: {

        # if the first argument on the command line is "==Run_FBig==" then
        # drop the "==Run_FBig==" argument and call the real code.
        if ( $ARGV[0] eq "==Run_FBig==" ) {

            shift(@ARGV);

            Run_FBig();

        } #END if ( $ARGV[0] eq "==Run_FBig==" )

        # otherwise, recall the command adding the "==Run_FBig==" argument
        # and pipe the output through more.
        else {

            system("$CMD '==Run_FBig==' @ARGV | /bin/more -e");

        } #END else

    } #END FBig

    #-----------------------------------------------------------------------------
    # Run_FBig
    # This is the real code
    #
    sub Run_FBig {

        # default is verbose output
        $VERBOSE = $TRUE;

        # turn off verbose output if -s was specified
        if ( @ARGV[0] eq "-s" ) { $VERBOSE = $FALSE; shift(@ARGV); }

        # get starting directory
        $starting_dir = Get_Starting_Directory();

        # get a list of files
        # o files only - no directories, links, special files, etc.
        # o use xdev to stay inside the current filesystem
        # o reverse sort so when the second reverse sort is performed,
        # files of the same size will appear in alphabetical order
        foreach $file ( reverse(sort(qx(/bin/find $starting_dir -xdev -type f -print))) ) {

            # get rid of the trailing newline
            chomp($file);

            # use stat to get the file size
            ($mode,$uid,$gid,$size,$mtime) = (lstat($file))[2,4,5,7,9];

            # create a unique key (for multiple files of the same size)
            $i = 0;

            do {
                $key = sprintf "H%20s%.10d", $size, $i; $i++;
            } until ( ! defined($file{$key}) );

            # save the file name other important info
            $file{$key} = $file;

            $mode{$key} = $mode;
            $uid{$key} = $uid;
            $gid{$key} = $gid;
            $size{$key} = $size;
            $mtime{$key} = $mtime;

        } #END foreach $file ( reverse(sort(qx(/bin/find $starting_dir -xdev -type f -print))) )

        # could find zero regular files in a directory path so output
        # a small message rather than just returning to the command prompt
        if ( ! defined(%file) ) {

            print "no files found\n";
            return();

        } #END if ( ! defined(%file) )

        if ( $VERBOSE ) {

            # create UID to user name hash
            while ( ($name,$uid) = (getpwent)[0,2] ) { $user{$uid} = $name unless ( defined($user{$uid}) ); }

            # create GID to group name hash
            while ( ($name,$gid) = (getgrent)[0,2] ) { $group{$gid} = $name unless ( defined($group{$uid}) ); }

            # compute the epoch time of six months ago
            # => current epoch time minus half the number of seconds in a year (365 days)
            $six_months_ago = time() - 15768000;

            # sort the output by file size/file name
            foreach $key ( reverse(sort(keys(%file))) ) {

                printf "-%9s %-8s %-8s %11s %12s %s\n",
                        Get_Attr($mode{$key}),
                        defined($user{$uid{$key}}) ? $user{$uid{$key}} : $uid{$key},
                        defined($group{$gid{$key}}) ? $group{$gid{$key}} : $gid{$key},
                        Add_Commas($size{$key}),
                        Format_Time($mtime{$key}),
                        $file{$key};

            } #END foreach $key ( reverse(sort(keys(%file))) )

        } #END if ( $VERBOSE )

        else {

            # sort the output by file size/file name
            foreach $key ( reverse(sort(keys(%file))) ) {

                printf "%15s %s\n", Add_Commas($size{$key}), $file{$key};

            } #END foreach $key ( reverse(sort(keys(%file))) )

        } #END else

    } #END Run_FBig

    #-----------------------------------------------------------------------------
    # Get_Starting_Directory
    # Determines the starting directory
    #
    sub Get_Starting_Directory {

        # if the user specified a directory on the command line...
        if ( defined($ARGV[0]) ) {

            # error if not a directory
            die "$0: $ARGV[0] is not a directory\n" unless ( -d $ARGV[0] );

            return($ARGV[0]);

        } #END if ( defined($ARGV[0]) ) {

        return(".");

    } #END Get_Starting_Directory

    #-----------------------------------------------------------------------------
    # Get_Attr
    # Turn octal permissions into text attributes
    #
    # Local Vars
    # $mode permissions in octal form
    # $bits permissions converted to a binary string of characters
    #
    # Notes
    # 4000 (= u=s) Set user ID on file execution (file only)
    # 2000 (= g=s) Set group ID on file execution (file only)
    # 1000 (= u=t) Set sticky bit
    # 0400 (= u=r) Read by owner
    # 0200 (= u=w) Write by owner
    # 0100 (= u=x) Execute (search in directory) by owner
    # 0040 (= g=r) Read by group
    # 0020 (= g=w) Write by group
    # 0010 (= g=x) Execute/search by group
    # 0004 (= o=r) Read by others
    # 0002 (= o=w) Write by others
    # 0001 (= o=x) Execute/search by others
    #
    sub Get_Attr {
        my($mode) = shift;

        # convert octal mode to a binary string of characters
        my $bits = unpack("B32", pack("N", $mode));

        # get the attributes for the owner
        $attr = Gen_Attr_String(substr($bits,-12,1),"s",substr($bits,-9,1),substr($bits,-8,1),substr($bits,-7,1));

        # get the attributes for the group
        $attr .= Gen_Attr_String(substr($bits,-11,1),"s",substr($bits,-6,1),substr($bits,-5,1),substr($bits,-4,1));

        # get the attributes for the world
        $attr .= Gen_Attr_String(substr($bits,-10,1),"t",substr($bits,-3,1),substr($bits,-2,1),substr($bits,-1,1));

        return($attr);

    } #END Get_Attr

    #-----------------------------------------------------------------------------
    # Gen_Attr_String
    # Generate the attribute string
    #
    # Local Vars
    # $special special bit
    # $s_or_t character to output (s or t) if $special is set to
    1
    # $read read bit
    # $write write bit
    # $execute execute bit
    #
    # $char1 first character of attribute string
    # $char2 second character of attribute string
    # $char3 third character of attribute string
    #
    sub Gen_Attr_String {
        my($special,$s_or_t,$read,$write,$execute) = @_;
        my($char1,$char2,$char3);

        # output a dash unless otherwise set
        $char1 = $char2 = $char3 = "-";

        # set the rwx characters
        $char1 = "r" if ( $read );
        $char2 = "w" if ( $write );
        $char3 = "x" if ( $execute );

        # set special flag if special bit is 1
        if ( $special ) {

            # set the execute character to an s or t
            $char3 = $s_or_t;

            # change the character to uppercase if the execute bit is not set
            $char3 = uc($char3) unless ( $execute );

        } #END if ( $special )

        # return the full attribute string
        return ("${char1}${char2}${char3}");

    } #END Gen_Attr_String

    #-----------------------------------------------------------------------------
    # Add_Commas
    # Add commas to numbers in a string
    #
    sub Add_Commas {
        my($string) = shift;

        # reverse the string
        $string = reverse($string);

        # add commas to the numbers in the string
        $string =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;

        # reverse string again
        return(scalar(reverse($string)));

    } #END Add_Commas

    #-----------------------------------------------------------------------------
    # Format_Time
    # format the mtime of a file
    #
    # Local Vars
    # $mtime mtime of a file in epoch seconds
    # $min minute
    # $hour hour
    # $day day
    # $month month
    # $year year
    #
    sub Format_Time {
        my($mtime) = shift;
        my($min,$hour,$day,$mon,$year);

        # convert epoch mtime to month, day, year, hour, and minute
        ($min,$hour,$day,$month,$year) = (localtime($mtime))[1..5];

        # if file is more than six months old...
        if ( $mtime < $six_months_ago ) {

            # show mtime in month, day, year
            return(sprintf "%s %2d %4d", $NUM_TO_MONTHS{$month}, $day, $year + 1900);

        } #END if ( $mtime < $six_months_ago )

        # if file is less than six months old...
        else {

            # show the mtime in month, day, hour, minute
            return(sprintf "%s %2d %.2d:%.2d", $NUM_TO_MONTHS{$month}, $day, $hour, $min);

        } #END else

    } #END Format_Time
    - - - - - snip - - - - -

    Thanks again,
    Klaus

    --
                 ---> Please post QUESTIONS and SUMMARIES only!! <---
            To subscribe/unsubscribe to this list, contact majordomo@dutchworks.nl
           Name: hpux-admin@dutchworks.nl     Owner: owner-hpux-admin@dutchworks.nl
     
     Archives:  ftp.dutchworks.nl:/pub/digests/hpux-admin       (FTP, browse only)
                http://www.dutchworks.nl/htbin/hpsysadmin   (Web, browse & search)
    

  • Next message: Julian Rogan: "[HPADM] Omnistorage problems"

    Relevant Pages

    • Tool to get MCP ODT at Windows CMD prompt
      ... You basically send a series of ODT commands of your choosing, once, or in a loop, and get the output right in the command ... Dim sHostname ... Sub WriteIt ... WriteIt "" ...
      (comp.sys.unisys)
    • FYI: Delete still shows the deleted record
      ... "kit" wrote: ... new SQL Server DB and I'm borrowing code from the previous SQL Server DB ... Put this in the click event of your "DELETE" command button: ... Public Sub DelCurrentRec ...
      (microsoft.public.access.forms)
    • Re: How Does One Determine If a Command Button Has Been Pressed?
      ... I create a Public variable in the module that calls the UserForm and then ... options buttons), a text box, and two command buttons. ... Private Sub CommandButton1_Click ...
      (microsoft.public.word.vba.general)
    • RE: Want to interactively run a shell script
      ... sub process_command { ... Want to interactively run a shell script ... Any opinion expressed in this e-mail is personal to the sender ...
      (perl.beginners)
    • Re: search plain text files including wildcards
      ... If I'd use the FindStr command. ... Private Declare Sub Sleep Lib "kernel32" ... On Error GoTo Sleeper ... Character class: ...
      (microsoft.public.vb.general.discussion)