How to delete all error_log files on a cPanel server

This command will search in all /home/*/public_html directories (also in subdirectories) for error_log files:

find /home/*/public_html -type f -name error_log -exec du -sh {} \;

Usage example:

root@web [~]# find /home/*/public_html -type f -name error_log -exec du -sh {} \;
4.0K    /home/tolomike/public_html/error_log
4.0K    /home/tolomike/public_html/wp-includes/ID3/error_log
9.0K    /home/tolomike/public_html/wp-includes/theme-compat/error_log
4.0K    /home/tolomike/public_html/wp-includes/SimplePie/error_log
4.0K    /home/tolomike/public_html/wp-includes/SimplePie/Cache/error_log
root@web [~]# 

Many times you will want to see the error+log files that use the most space. For this, sort the results. The command is:

find /home/*/public_html -type f -name error_log -exec du -sh {} \; | sort -n

You need to list only the error_log files bigger than 50MB? Use this command:

find /home/*/public_html -type f -name error_log -size +50000k -exec du -sh {} \;
Notice that depending on your number of files and accounts, these commands can run for a long time.

Now let’s see how we delete these files.
To delete all the founded error_log files, use:

find /home/*/public_html -type f -iname error_log -delete

To delete error_log files larger than 50MB, use:

find /home/*/public_html -type f -iname error_log -size +50000k -delete

Want to add a cron job that will delete error_log files? Use the crontab -e command to edit the server jobs.

crontab -e

Then add the line (the cron job will run every day at 02:30):

30 2 * * * find /home/*/public_html -type f -name error_log -delete

Exit the crontab editor by CTRL+X. Confirm the changes.

Share this post:

Create and remove CentOS users

In this article we will show you how to create and remove CentOS users/accounts. We will not create/delete cPanel accounts here!
You must be logged in as root to be able to create new accounts.

There can be situations when you want to create users on your CentOS server. To create a new user, use the command:

adduser username

After this, set the password for the new user, so he/she can log in:

passwd username

You can also check the default values for the adduser command with the -D argument:

root@web [~]# adduser -D

Example for creating a CentOS user and setting a password for it:

root@web [~]# adduser tonyw
root@web [~]# passwd tonyw
Changing password for user tonyw.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
root@web [~]#
root@web [~]# cd /home/tonyw
root@web [/home/tonyw]# ls
./  ../  .bash_logout  .bash_profile  .bashrc  .zshrc
root@web [/home/tonyw]#

To remove a CentOS account, use:

userdel -r username

The -r argument will remove the user’s directory.

Share this post:

How to list all logged in users

To see who is logged in on your server via SSH, you can use the shell commands: w, who or users.

You can use the three commands without any parameters. For more options run the commands with the --help argument.

In the examples below, you can see there are two logged in users – you can see their IPs, logged in time etc.

The w shell command:

root@web [~]# w
 08:51:16 up 53 days,  7:01,  2 users,  load average: 0.10, 0.08, 0.08
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    06:54    1:41   0.05s  0.05s -bash
tony     pts/1    08:50    0.00s  0.04s  0.00s w

The who shell command:

root@web [~]# who
root     pts/0        Jun  7 06:54 (
tony     pts/1        Jun  7 08:50 (
root@web [~]#

The users shell command:

root@web [~]# users
root tony
Share this post:

Kill all processes of a specific user via SSH

There are times when you want to kill all processes for a specific user. This can be done using the shell commands pkill and killall .

To see the differences between the pkill and the killall command, please consult the help pages listed at the end of this post.

So, to kill all processes for a user, use

pkill -u username

The usage syntax is:

root@web [~]# pkill -h

 pkill [options] 

 -<sig>, --signal <sig>    signal to send (either number or name)
 -e, --echo                display what is killed
 -c, --count               count of matching processes
 -f, --full                use full process name to match
 -g, --pgroup <PGID,...>   match listed process group IDs
 -G, --group <GID,...>     match real group IDs
 -n, --newest              select most recently started
 -o, --oldest              select least recently started
 -P, --parent <PPID,...>   match only child processes of the given parent
 -s, --session <SID,...>   match session IDs
 -t, --terminal <tty,...>  match by controlling terminal
 -u, --euid <ID,...>       match by effective IDs
 -U, --uid <ID,...>        match by real IDs
 -x, --exact               match exactly with the command name
 -F, --pidfile <file>      read PIDs from file
 -L, --logpidfile          fail if PID file is not locked
 --ns <PID>>               match the processes that belong to the same
                           namespace as 
 --nslist <ns,...>         list which namespaces will be considered for
                           the --ns option.
                           Available namespaces: ipc, mnt, net, pid, user, uts

 -h, --help     display this help and exit
 -V, --version  output version information and exit

With the killall tool, the shell command is similar: 

killall -u username

The usage syntax is:

root@web [~]# killall -h
Usage: killall [-Z CONTEXT] [-u USER] [ -eIgiqrvw ] [ -SIGNAL ] NAME...
       killall -l, --list
       killall -V, --version

  -e,--exact          require exact match for very long names
  -I,--ignore-case    case insensitive process name match
  -g,--process-group  kill process group instead of process
  -y,--younger-than   kill processes younger than TIME
  -o,--older-than     kill processes older than TIME
  -i,--interactive    ask for confirmation before killing
  -l,--list           list all known signal names
  -q,--quiet          don't print complaints
  -r,--regexp         interpret NAME as an extended regular expression
  -s,--signal SIGNAL  send this signal instead of SIGTERM
  -u,--user USER      kill only process(es) running as USER
  -v,--verbose        report if the signal was successfully sent
  -V,--version        display version information
  -w,--wait           wait for processes to die
  -Z,--context REGEXP kill only process(es) having context
                      (must precede other arguments)


Share this post:

How to get the size of a directory in Linux

Many times do you want to know the size of a directory. The most common Linux command is du.

We will list below some examples. At the end of the post you can see the du syntax.

– get the size of a specific directory/file

root@web [~]# du -sh path-to-directory-or-file/
root@web [~]# du -sh public_html
8.0K    public_html
root@web [~]#

– get the size of the current directory

root@web [~]# du -sh
root@web [~]# du -sh
37M     .
root@web [~]#

– get the size for files and folders in the current directory; or you can choose the depth=2,3 etc

root@web [~]# du -ah --max-depth=1
root@web [~]# du -ah --max-depth=1
4.0K    ./.libnet-openssh-perl
4.0K    ./.rnd
4.0K    ./.lesshst
44K     ./.bwusage.sqlite
40K     ./php.ini.orig
4.0K    ./perl5
4.0K    ./out
588K    ./support
388K    ./.cpanm
4.0K    ./error_log
4.0K    ./.accesshash

– get the s size of files and folders with the date they were last modified

root@web [~]# du -ah --max-depth=1 --time
root@web [~]# du -ah --max-depth=1 --time
4.0K    2015-08-25 03:01        ./.libnet-openssh-perl
4.0K    2017-05-27 07:04        ./.rnd
4.0K    2017-05-27 14:37        ./.lesshst
44K     2016-01-04 01:15        ./.bwusage.sqlite
40K     2016-08-09 05:00        ./php.ini.orig
4.0K    2015-09-23 13:46        ./perl5
4.0K    2015-11-09 13:47        ./out
588K    2016-12-08 14:21        ./support
388K    2015-09-22 13:37        ./.cpanm
4.0K    2017-03-16 12:53        ./error_log
4.0K    2015-08-24 11:33        ./.accesshash

– sort subdirectories by size

root@web [~]#  du -h --max-depth=1 | sort -hr
root@web [~]# du -h --max-depth=1 | sort -hr
37M     .
14M     ./.cpanel
2.2M    ./.spamassassin
2.1M    ./tmp
748K    ./.MirrorSearch
588K    ./support
388K    ./.cpanm
40K     ./.gnupg
20K     ./.cpobjcache
20K     ./.HttpRequest
12K     ./cpanel3-skel
8.0K    ./public_html
8.0K    ./.pki
4.0K    ./public_ftp
4.0K    ./perl5
4.0K    ./.ssh
4.0K    ./.libnet-openssh-perl
root@web [~]#
If you have a lot of files/directories use du | more or du | less commands.

The syntax for the du command is:

root@web [~]# du --help
Usage: du [OPTION]... [FILE]...
  or:  du [OPTION]... --files0-from=F
Summarize disk usage of each FILE, recursively for directories.

Mandatory arguments to long options are mandatory for short options too.
  -0, --null            end each output line with 0 byte rather than newline
  -a, --all             write counts for all files, not just directories
      --apparent-size   print apparent sizes, rather than disk usage; although
                          the apparent size is usually smaller, it may be
                          larger due to holes in ('sparse') files, internal
                          fragmentation, indirect blocks, and the like
  -B, --block-size=SIZE  scale sizes by SIZE before printing them; e.g.,
                           '-BM' prints sizes in units of 1,048,576 bytes;
                           see SIZE format below
  -b, --bytes           equivalent to '--apparent-size --block-size=1'
  -c, --total           produce a grand total
  -D, --dereference-args  dereference only symlinks that are listed on the
                          command line
  -d, --max-depth=N     print the total for a directory (or file, with --all)
                          only if it is N or fewer levels below the command
                          line argument;  --max-depth=0 is the same as
      --files0-from=F   summarize disk usage of the
                          NUL-terminated file names specified in file F;
                          if F is -, then read names from standard input
  -H                    equivalent to --dereference-args (-D)
  -h, --human-readable  print sizes in human readable format (e.g., 1K 234M 2G)
      --inodes          list inode usage information instead of block usage
  -k                    like --block-size=1K
  -L, --dereference     dereference all symbolic links
  -l, --count-links     count sizes many times if hard linked
  -m                    like --block-size=1M
  -P, --no-dereference  don't follow any symbolic links (this is the default)
  -S, --separate-dirs   for directories do not include size of subdirectories
      --si              like -h, but use powers of 1000 not 1024
  -s, --summarize       display only a total for each argument
  -t, --threshold=SIZE  exclude entries smaller than SIZE if positive,
                          or entries greater than SIZE if negative
      --time            show time of the last modification of any file in the
                          directory, or any of its subdirectories
      --time=WORD       show time as WORD instead of modification time:
                          atime, access, use, ctime or status
      --time-style=STYLE  show times using STYLE, which can be:
                            full-iso, long-iso, iso, or +FORMAT;
                            FORMAT is interpreted like in 'date'
  -X, --exclude-from=FILE  exclude files that match any pattern in FILE
      --exclude=PATTERN    exclude files that match PATTERN
  -x, --one-file-system    skip directories on different file systems
      --help     display this help and exit
      --version  output version information and exit

Display values are in units of the first available SIZE from --block-size,
and the DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables.
Otherwise, units default to 1024 bytes (or 512 if POSIXLY_CORRECT is set).

SIZE is an integer and optional unit (example: 10M is 10*1024*1024).  Units
are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000).

GNU coreutils online help:
Report du translation bugs to
For complete documentation, run: info coreutils 'du invocation'
root@web [~]#
Share this post:
Page 3 of 6
1 2 3 4 5 6