diff --git a/src/main/java/org/apache/commons/io/FileUtils.java b/src/main/java/org/apache/commons/io/FileUtils.java
index 8a99260..f8959ae 100644
--- a/src/main/java/org/apache/commons/io/FileUtils.java
+++ b/src/main/java/org/apache/commons/io/FileUtils.java
@@ -3045,7 +3045,7 @@
     }
 
     /**
-     * Implements behavior similar to the Unix "touch" utility. Creates a new file with size 0, or, if the file exists, just
+     * Implements behavior similar to the UNIX "touch" utility. Creates a new file with size 0, or, if the file exists, just
      * updates the file's modified time. This method throws an IOException if the last modified date
      * of the file cannot be set. It creates parent directories if they do not exist.
      *
diff --git a/src/main/java/org/apache/commons/io/FilenameUtils.java b/src/main/java/org/apache/commons/io/FilenameUtils.java
index 45d3687..b8c92f1 100644
--- a/src/main/java/org/apache/commons/io/FilenameUtils.java
+++ b/src/main/java/org/apache/commons/io/FilenameUtils.java
@@ -33,7 +33,7 @@
  * ever accesses the file system, or depends on whether a path points to a file that exists.
  * <p>
  * When dealing with file names, you can hit problems when moving from a Windows
- * based development machine to a Unix based production machine.
+ * based development machine to a UNIX based production machine.
  * This class aims to help avoid those problems.
  * </p>
  * <p>
@@ -42,7 +42,7 @@
  * {@link java.io.File#File(java.io.File, String) File(File,String)}.
  * </p>
  * <p>
- * Most methods in this class are designed to work the same on both Unix and Windows.
+ * Most methods in this class are designed to work the same on both UNIX and Windows.
  * Those that don't include 'System', 'Unix', or 'Windows' in their name.
  * </p>
  * <p>
@@ -63,7 +63,7 @@
  * <li>the extension - txt</li>
  * </ul>
  * <p>
- * Given an absolute Unix path such as /dev/project/file.txt they are:
+ * Given an absolute UNIX path such as /dev/project/file.txt they are:
  * </p>
  * <ul>
  * <li>the full file name, or just file name - /dev/project/file.txt</li>
@@ -87,7 +87,7 @@
  * <li>the extension - txt</li>
  * </ul>
  * <p>
- * Given an absolute Unix path such as /dev/project/file.txt they are:
+ * Given an absolute UNIX path such as /dev/project/file.txt they are:
  * </p>
  * <ul>
  * <li>the full path, full file name, or just file name - /dev/project/file.txt</li>
@@ -107,7 +107,7 @@
  * that do not end with a separator as files, not directories.
  * </p>
  * <p>
- * This class only supports Unix and Windows style names.
+ * This class only supports UNIX and Windows style names.
  * Prefixes are matched as follows:
  * </p>
  * <pre>
@@ -154,7 +154,7 @@
     public static final String EXTENSION_SEPARATOR_STR = Character.toString(EXTENSION_SEPARATOR);
 
     /**
-     * The Unix separator character.
+     * The UNIX separator character.
      */
     private static final char UNIX_NAME_SEPARATOR = '/';
 
@@ -205,7 +205,7 @@
      * Otherwise, the paths will be joined, normalized and returned.
      * </p>
      * <p>
-     * The output will be the same on both Unix and Windows except
+     * The output will be the same on both UNIX and Windows except
      * for the separator character.
      * </p>
      * <pre>
@@ -524,7 +524,7 @@
      * after both have been normalized.
      * <p>
      * Both file names are first passed to {@link #normalize(String)}.
-     * The check is then performed case-sensitively on Unix and
+     * The check is then performed case-sensitively on UNIX and
      * case-insensitively on Windows.
      * </p>
      *
@@ -541,7 +541,7 @@
      * Checks whether two file names are equal using the case rules of the system.
      * <p>
      * No processing is performed on the file names other than comparison.
-     * The check is case-sensitive on Unix and case-insensitive on Windows.
+     * The check is case-sensitive on UNIX and case-insensitive on Windows.
      * </p>
      *
      * @param fileName1  the first file name, may be null
@@ -594,7 +594,7 @@
     /**
      * Gets the base name, minus the full path and extension, from a full file name.
      * <p>
-     * This method will handle a path in either Unix or Windows format.
+     * This method will handle a path in either UNIX or Windows format.
      * The text after the last forward or backslash and before the last dot is returned.
      * </p>
      * <pre>
@@ -661,7 +661,7 @@
     /**
      * Gets the full path (prefix + path) from a full file name.
      * <p>
-     * This method will handle a file in either Unix or Windows format.
+     * This method will handle a file in either UNIX or Windows format.
      * The method is entirely text based, and returns the text before and
      * including the last forward or backslash.
      * </p>
@@ -694,7 +694,7 @@
      * Gets the full path (prefix + path) from a full file name,
      * excluding the final directory separator.
      * <p>
-     * This method will handle a file in either Unix or Windows format.
+     * This method will handle a file in either UNIX or Windows format.
      * The method is entirely text based, and returns the text before the
      * last forward or backslash.
      * </p>
@@ -726,7 +726,7 @@
     /**
      * Gets the name minus the path from a full file name.
      * <p>
-     * This method will handle a file in either Unix or Windows format.
+     * This method will handle a file in either UNIX or Windows format.
      * The text after the last forward or backslash is returned.
      * </p>
      * <pre>
@@ -754,7 +754,7 @@
     /**
      * Gets the path from a full file name, which excludes the prefix and the name.
      * <p>
-     * This method will handle a file in either Unix or Windows format.
+     * This method will handle a file in either UNIX or Windows format.
      * The method is entirely text based, and returns the text before and
      * including the last forward or backslash.
      * </p>
@@ -785,7 +785,7 @@
      * Gets the path (which excludes the prefix) from a full file name, and
      * also excluding the final directory separator.
      * <p>
-     * This method will handle a file in either Unix or Windows format.
+     * This method will handle a file in either UNIX or Windows format.
      * The method is entirely text based, and returns the text before the
      * last forward or backslash.
      * </p>
@@ -815,7 +815,7 @@
     /**
      * Gets the prefix such as {@code C:/} or {@code ~/} from a full file name,
      * <p>
-     * This method will handle a file in either Unix or Windows format.
+     * This method will handle a file in either UNIX or Windows format.
      * The prefix includes the first slash in the full file name where applicable.
      * </p>
      * <pre>
@@ -836,7 +836,7 @@
      * </pre>
      * <p>
      * The output will be the same irrespective of the machine that the code is running on.
-     * ie. both Unix and Windows prefixes are matched regardless.
+     * ie. both UNIX and Windows prefixes are matched regardless.
      * </p>
      *
      * @param fileName  the file name, null returns null
@@ -861,7 +861,7 @@
     /**
      * Returns the length of the file name prefix, such as {@code C:/} or {@code ~/}.
      * <p>
-     * This method will handle a file in either Unix or Windows format.
+     * This method will handle a file in either UNIX or Windows format.
      * </p>
      * <p>
      * The prefix length includes the first slash in the full file name
@@ -890,7 +890,7 @@
      * </pre>
      * <p>
      * The output will be the same irrespective of the machine that the code is running on.
-     * ie. both Unix and Windows prefixes are matched regardless.
+     * ie. both UNIX and Windows prefixes are matched regardless.
      * </p>
      * <p>
      * Note that a leading // (or \\) is used to indicate a UNC name on Windows.
@@ -966,7 +966,7 @@
      * Returns the index of the last extension separator character, which is a dot.
      * <p>
      * This method also checks that there is no directory separator after the last dot. To do this it uses
-     * {@link #indexOfLastSeparator(String)} which will handle a file in either Unix or Windows format.
+     * {@link #indexOfLastSeparator(String)} which will handle a file in either UNIX or Windows format.
      * </p>
      * <p>
      * The output will be the same irrespective of the machine that the code is running on, with the
@@ -1003,7 +1003,7 @@
     /**
      * Returns the index of the last directory separator character.
      * <p>
-     * This method will handle a file in either Unix or Windows format.
+     * This method will handle a file in either UNIX or Windows format.
      * The position of the last forward or backslash is returned.
      * <p>
      * The output will be the same irrespective of the machine that the code is running on.
@@ -1256,7 +1256,7 @@
      * Normalizes a path, removing double and single dot path steps.
      * <p>
      * This method normalizes a path to a standard format.
-     * The input may contain separators in either Unix or Windows format.
+     * The input may contain separators in either UNIX or Windows format.
      * The output will contain separators in the format of the system.
      * <p>
      * A trailing slash will be retained.
@@ -1265,7 +1265,7 @@
      * A double dot will cause that path segment and the one before to be removed.
      * If the double dot has no parent path segment, {@code null} is returned.
      * <p>
-     * The output will be the same on both Unix and Windows except
+     * The output will be the same on both UNIX and Windows except
      * for the separator character.
      * <pre>
      * /foo//               --&gt;   /foo/
@@ -1300,7 +1300,7 @@
      * Normalizes a path, removing double and single dot path steps.
      * <p>
      * This method normalizes a path to a standard format.
-     * The input may contain separators in either Unix or Windows format.
+     * The input may contain separators in either UNIX or Windows format.
      * The output will contain separators in the format specified.
      * <p>
      * A trailing slash will be retained.
@@ -1310,7 +1310,7 @@
      * If the double dot has no parent path segment to work with, {@code null}
      * is returned.
      * <p>
-     * The output will be the same on both Unix and Windows except
+     * The output will be the same on both UNIX and Windows except
      * for the separator character.
      * <pre>
      * /foo//               --&gt;   /foo/
@@ -1331,11 +1331,11 @@
      * ~/foo/../bar/        --&gt;   ~/bar/
      * ~/../bar             --&gt;   null
      * </pre>
-     * The output will be the same on both Unix and Windows including
+     * The output will be the same on both UNIX and Windows including
      * the separator character.
      *
      * @param fileName  the file name to normalize, null returns null
-     * @param unixSeparator {@code true} if a Unix separator should
+     * @param unixSeparator {@code true} if a UNIX separator should
      * be used or {@code false} if a Windows separator should be used.
      * @return the normalized fileName, or null if invalid
      * @throws IllegalArgumentException if the file name contains the null character ({@code U+0000})
@@ -1350,7 +1350,7 @@
      * and removing any final directory separator.
      * <p>
      * This method normalizes a path to a standard format.
-     * The input may contain separators in either Unix or Windows format.
+     * The input may contain separators in either UNIX or Windows format.
      * The output will contain separators in the format of the system.
      * <p>
      * A trailing slash will be removed.
@@ -1360,7 +1360,7 @@
      * If the double dot has no parent path segment to work with, {@code null}
      * is returned.
      * <p>
-     * The output will be the same on both Unix and Windows except
+     * The output will be the same on both UNIX and Windows except
      * for the separator character.
      * <pre>
      * /foo//               --&gt;   /foo
@@ -1396,7 +1396,7 @@
      * and removing any final directory separator.
      * <p>
      * This method normalizes a path to a standard format.
-     * The input may contain separators in either Unix or Windows format.
+     * The input may contain separators in either UNIX or Windows format.
      * The output will contain separators in the format specified.
      * <p>
      * A trailing slash will be removed.
@@ -1406,7 +1406,7 @@
      * If the double dot has no parent path segment to work with, {@code null}
      * is returned.
      * <p>
-     * The output will be the same on both Unix and Windows including
+     * The output will be the same on both UNIX and Windows including
      * the separator character.
      * <pre>
      * /foo//               --&gt;   /foo
@@ -1429,7 +1429,7 @@
      * </pre>
      *
      * @param fileName  the file name to normalize, null returns null
-     * @param unixSeparator {@code true} if a Unix separator should
+     * @param unixSeparator {@code true} if a UNIX separator should
      * be used or {@code false} if a Windows separator should be used.
      * @return the normalized fileName, or null if invalid
      * @throws IllegalArgumentException if the file name contains the null character ({@code U+0000})
@@ -1500,7 +1500,7 @@
     }
 
     /**
-     * Converts all separators to the Unix separator of forward slash.
+     * Converts all separators to the UNIX separator of forward slash.
      *
      * @param path the path to be changed, null ignored.
      * @return the new path.
@@ -1697,7 +1697,7 @@
      * The wildcard matcher uses the characters '?' and '*' to represent a
      * single or multiple (zero or more) wildcard characters.
      * This is the same as often found on DOS/Unix command lines.
-     * The check is case-sensitive on Unix and case-insensitive on Windows.
+     * The check is case-sensitive on UNIX and case-insensitive on Windows.
      * <pre>
      * wildcardMatch("c.txt", "*.txt")      --&gt; true
      * wildcardMatch("c.txt", "*.jpg")      --&gt; false
diff --git a/src/main/java/org/apache/commons/io/IOCase.java b/src/main/java/org/apache/commons/io/IOCase.java
index b167366..901f896 100644
--- a/src/main/java/org/apache/commons/io/IOCase.java
+++ b/src/main/java/org/apache/commons/io/IOCase.java
@@ -23,7 +23,7 @@
  * Enumeration of IO case sensitivity.
  * <p>
  * Different filing systems have different rules for case-sensitivity.
- * Windows is case-insensitive, Unix is case-sensitive.
+ * Windows is case-insensitive, UNIX is case-sensitive.
  * </p>
  * <p>
  * This class captures that difference, providing an enumeration to
@@ -51,11 +51,11 @@
 
     /**
      * The constant for case sensitivity determined by the current operating system.
-     * Windows is case-insensitive when comparing file names, Unix is case-sensitive.
+     * Windows is case-insensitive when comparing file names, UNIX is case-sensitive.
      * <p>
      * <strong>Note:</strong> This only caters for Windows and Unix. Other operating
      * systems (e.g. OSX and OpenVMS) are treated as case-sensitive if they use the
-     * Unix file separator and case-insensitive if they use the Windows file separator
+     * UNIX file separator and case-insensitive if they use the Windows file separator
      * (see {@link java.io.File#separatorChar}).
      * </p>
      * <p>
diff --git a/src/main/java/org/apache/commons/io/IOUtils.java b/src/main/java/org/apache/commons/io/IOUtils.java
index 303ff76..7d7ee4c 100644
--- a/src/main/java/org/apache/commons/io/IOUtils.java
+++ b/src/main/java/org/apache/commons/io/IOUtils.java
@@ -145,7 +145,7 @@
     public static final char DIR_SEPARATOR = File.separatorChar;
 
     /**
-     * The Unix directory separator character.
+     * The UNIX directory separator character.
      */
     public static final char DIR_SEPARATOR_UNIX = '/';
 
@@ -183,7 +183,7 @@
     public static final String LINE_SEPARATOR = System.lineSeparator();
 
     /**
-     * The Unix line separator string.
+     * The UNIX line separator string.
      *
      * @see StandardLineSeparator#LF
      */
diff --git a/src/main/java/org/apache/commons/io/file/PathUtils.java b/src/main/java/org/apache/commons/io/file/PathUtils.java
index fc66706..9d3a30f 100644
--- a/src/main/java/org/apache/commons/io/file/PathUtils.java
+++ b/src/main/java/org/apache/commons/io/file/PathUtils.java
@@ -1685,7 +1685,7 @@
     }
 
     /**
-     * Implements behavior similar to the Unix "touch" utility. Creates a new file with size 0, or, if the file exists, just updates the file's modified time.
+     * Implements behavior similar to the UNIX "touch" utility. Creates a new file with size 0, or, if the file exists, just updates the file's modified time.
      * this method creates parent directories if they do not exist.
      *
      * @param file the file to touch.
diff --git a/src/main/java/org/apache/commons/io/file/attribute/FileTimes.java b/src/main/java/org/apache/commons/io/file/attribute/FileTimes.java
index 1ec3f32..e899b65 100644
--- a/src/main/java/org/apache/commons/io/file/attribute/FileTimes.java
+++ b/src/main/java/org/apache/commons/io/file/attribute/FileTimes.java
@@ -40,12 +40,12 @@
     public static final FileTime EPOCH = FileTime.from(Instant.EPOCH);
 
     /**
-     * The offset of Windows time 0 to Unix epoch in 100-nanosecond intervals.
+     * The offset of Windows time 0 to UNIX epoch in 100-nanosecond intervals.
      *
      * <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/ms724290%28v=vs.85%29.aspx">Windows File Times</a>
      * <p>
      * A file time is a 64-bit value that represents the number of 100-nanosecond intervals that have elapsed since 12:00
-     * A.M. January 1, 1601 Coordinated Universal Time (UTC). This is the offset of Windows time 0 to Unix epoch in
+     * A.M. January 1, 1601 Coordinated Universal Time (UTC). This is the offset of Windows time 0 to UNIX epoch in
      * 100-nanosecond intervals.
      * </p>
      */
diff --git a/src/main/java/org/apache/commons/io/output/TeeOutputStream.java b/src/main/java/org/apache/commons/io/output/TeeOutputStream.java
index b1456a4..a9c2097 100644
--- a/src/main/java/org/apache/commons/io/output/TeeOutputStream.java
+++ b/src/main/java/org/apache/commons/io/output/TeeOutputStream.java
@@ -20,7 +20,7 @@
 import java.io.OutputStream;
 
 /**
- * Classic splitter of {@link OutputStream}. Named after the Unix 'tee' command. It allows a stream to be branched off
+ * Classic splitter of {@link OutputStream}. Named after the UNIX 'tee' command. It allows a stream to be branched off
  * so there are now two streams.
  */
 public class TeeOutputStream extends ProxyOutputStream {
diff --git a/src/main/java/org/apache/commons/io/output/TeeWriter.java b/src/main/java/org/apache/commons/io/output/TeeWriter.java
index 2db4e6a..c0aee7d 100644
--- a/src/main/java/org/apache/commons/io/output/TeeWriter.java
+++ b/src/main/java/org/apache/commons/io/output/TeeWriter.java
@@ -21,7 +21,7 @@
 import java.util.Collection;
 
 /**
- * Classic splitter of {@link Writer}. Named after the Unix 'tee' command. It allows a stream to be branched off so
+ * Classic splitter of {@link Writer}. Named after the UNIX 'tee' command. It allows a stream to be branched off so
  * there are now two streams.
  * <p>
  * This currently a only convenience class with the proper name "TeeWriter".
diff --git a/src/test/java/org/apache/commons/io/FileSystemUtilsTest.java b/src/test/java/org/apache/commons/io/FileSystemUtilsTest.java
index 7450564..141bd69 100644
--- a/src/test/java/org/apache/commons/io/FileSystemUtilsTest.java
+++ b/src/test/java/org/apache/commons/io/FileSystemUtilsTest.java
@@ -106,7 +106,7 @@
     public void testGetFreeSpace_String() throws Exception {
         // test coverage, as we can't check value
         if (File.separatorChar == '/') {
-            // have to figure out Unix block size
+            // have to figure out UNIX block size
             final String[] cmd;
             String osName = System.getProperty("os.name");
             osName = osName.toLowerCase(Locale.ENGLISH);
