Refactored. Add linux package.
This commit is contained in:
parent
7cc23c84ac
commit
c188e1f083
14 changed files with 810 additions and 38 deletions
|
@ -16,6 +16,7 @@
|
|||
<classpathentry kind="lib" path="lib/Logs/slf4j-log4j12-1.7.5.jar" sourcepath="lib/Logs/slf4j-log4j12-1.7.5-sources.jar"/>
|
||||
<classpathentry kind="lib" path="lib/UnitTesting/hamcrest-core-1.3.jar" sourcepath="lib/UnitTesting/hamcrest-core-1.3-sources.jar"/>
|
||||
<classpathentry kind="lib" path="lib/UnitTesting/junit-4.11.jar" sourcepath="lib/UnitTesting/junit-4.11-sources.jar"/>
|
||||
<classpathentry kind="lib" path="lib/devinsy-cmdexec-0.4.0.jar" sourcepath="lib/devinsy-cmdexec-0.4.0-sources.zip"/>
|
||||
<classpathentry kind="lib" path="lib/devinsy-cmdexec-0.4.1.jar" sourcepath="lib/devinsy-cmdexec-0.4.1-sources.zip"/>
|
||||
<classpathentry kind="lib" path="lib/commons-io-2.5.jar" sourcepath="lib/commons-io-2.5-src.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
|
|
BIN
lib/commons-io-2.5-javadoc.jar
Normal file
BIN
lib/commons-io-2.5-javadoc.jar
Normal file
Binary file not shown.
BIN
lib/commons-io-2.5-src.jar
Normal file
BIN
lib/commons-io-2.5-src.jar
Normal file
Binary file not shown.
BIN
lib/commons-io-2.5.jar
Normal file
BIN
lib/commons-io-2.5.jar
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
lib/devinsy-cmdexec-0.4.1-sources.zip
Normal file
BIN
lib/devinsy-cmdexec-0.4.1-sources.zip
Normal file
Binary file not shown.
BIN
lib/devinsy-cmdexec-0.4.1.jar
Normal file
BIN
lib/devinsy-cmdexec-0.4.1.jar
Normal file
Binary file not shown.
57
src/fr/devinsy/util/Property.java
Normal file
57
src/fr/devinsy/util/Property.java
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* Copyright (C) 2017 Christian Pierre MOMON
|
||||
*
|
||||
* This file is part of Devinsy-unix.
|
||||
*
|
||||
* Devinsy-unix is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Devinsy-unix is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Devinsy-unix. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package fr.devinsy.util;
|
||||
|
||||
/**
|
||||
* The Class Property.
|
||||
*/
|
||||
public class Property
|
||||
{
|
||||
private String name;
|
||||
private String value;
|
||||
|
||||
/**
|
||||
* Utility class has not to have a constructor.
|
||||
*/
|
||||
public Property(final String name, final String value)
|
||||
{
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public String getValue()
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
|
||||
public void setName(final String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public void setValue(final String value)
|
||||
{
|
||||
this.value = value;
|
||||
}
|
||||
}
|
169
src/fr/devinsy/util/PropertyList.java
Normal file
169
src/fr/devinsy/util/PropertyList.java
Normal file
|
@ -0,0 +1,169 @@
|
|||
/*
|
||||
* Copyright (C) 2017 Christian Pierre MOMON
|
||||
*
|
||||
* This file is part of Devinsy-unix.
|
||||
*
|
||||
* Devinsy-unix is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Devinsy-unix is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Devinsy-unix. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package fr.devinsy.util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
* The Class PropertyBeanList.
|
||||
*/
|
||||
public class PropertyList extends ArrayList<Property>
|
||||
{
|
||||
|
||||
private static final long serialVersionUID = 90604210351214011L;
|
||||
|
||||
/**
|
||||
* Instantiates a new work import beans.
|
||||
*/
|
||||
public PropertyList()
|
||||
{
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new work import beans.
|
||||
*
|
||||
* @param initialCapacity
|
||||
* the initial capacity
|
||||
*/
|
||||
public PropertyList(final int initialCapacity)
|
||||
{
|
||||
super(initialCapacity);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the.
|
||||
*
|
||||
* @param key
|
||||
* the key
|
||||
* @param value
|
||||
* the value
|
||||
* @return true, if successful
|
||||
*/
|
||||
public boolean add(final String key, final String value)
|
||||
{
|
||||
boolean result;
|
||||
|
||||
result = add(new Property(key, value));
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Put.
|
||||
*
|
||||
* @param name
|
||||
* the name
|
||||
* @param value
|
||||
* the value
|
||||
* @return true, if successful
|
||||
*/
|
||||
public boolean put(final String name, final int value)
|
||||
{
|
||||
boolean result;
|
||||
|
||||
result = add(new Property(name, String.valueOf(value)));
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Put.
|
||||
*
|
||||
* @param name
|
||||
* the name
|
||||
* @param value
|
||||
* the value
|
||||
* @return true, if successful
|
||||
*/
|
||||
public boolean put(final String name, final String value)
|
||||
{
|
||||
boolean result;
|
||||
|
||||
result = add(new Property(name, value));
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse.
|
||||
*
|
||||
* @return the work import beans
|
||||
*/
|
||||
public PropertyList reverse()
|
||||
{
|
||||
PropertyList result;
|
||||
|
||||
Collections.reverse(this);
|
||||
|
||||
result = this;
|
||||
|
||||
//
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.util.AbstractCollection#toString()
|
||||
*/
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
String result;
|
||||
|
||||
StringBuffer buffer = new StringBuffer(100000);
|
||||
|
||||
for (Property property : this)
|
||||
{
|
||||
buffer.append("[").append(property.getName()).append(",").append(property.getValue()).append("]\n");
|
||||
}
|
||||
|
||||
result = buffer.toString();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Webify value of the property list item.
|
||||
*
|
||||
* @return the property list
|
||||
*/
|
||||
public PropertyList webify()
|
||||
{
|
||||
PropertyList result;
|
||||
|
||||
for (Property property : this)
|
||||
{
|
||||
if (property.getValue() != null)
|
||||
{
|
||||
property.setValue(property.getValue().replaceAll("\n", "<br/>"));
|
||||
}
|
||||
}
|
||||
|
||||
result = this;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
}
|
|
@ -21,11 +21,13 @@ package fr.devinsy.util.unix;
|
|||
import java.io.File;
|
||||
import java.util.Vector;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import fr.devinsy.util.cmdexec.CmdExec;
|
||||
import fr.devinsy.util.cmdexec.CmdExecException;
|
||||
import fr.devinsy.util.cmdexec.CmdExecUtils;
|
||||
import fr.devinsy.util.strings.StringListUtils;
|
||||
import fr.devinsy.util.unix.acl.Acl;
|
||||
import fr.devinsy.util.unix.acl.AclManager;
|
||||
|
@ -37,7 +39,9 @@ import fr.devinsy.util.unix.acl.AclManager;
|
|||
*/
|
||||
public class Unix
|
||||
{
|
||||
private static final Logger logger = LoggerFactory.getLogger(Unix.class);
|
||||
private static Logger logger = LoggerFactory.getLogger(Unix.class);
|
||||
|
||||
public static final String BASH = "/bin/bash";
|
||||
public static final String SUDO = "/usr/bin/sudo";
|
||||
|
||||
/**
|
||||
|
@ -60,7 +64,7 @@ public class Unix
|
|||
{
|
||||
try
|
||||
{
|
||||
CmdExec.run(SUDO, "bash", "-c", "echo \"" + text + "\" >> " + path);
|
||||
sudo("bash", "-c", "echo \"" + text + "\" >> " + path);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
|
@ -69,6 +73,49 @@ public class Unix
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Bash.
|
||||
*
|
||||
* @param command
|
||||
* the command
|
||||
* @return the string
|
||||
* @throws CmdExecException
|
||||
* the cmd exec exception
|
||||
*/
|
||||
public static String bash(final String command) throws CmdExecException
|
||||
{
|
||||
String result;
|
||||
|
||||
if (SystemUtils.IS_OS_LINUX)
|
||||
{
|
||||
result = CmdExecUtils.run(BASH + " -c " + command);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new CmdExecException("bash call requires GNU/Linux operating system.");
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
public static String bash(final String... command) throws CmdExecException
|
||||
{
|
||||
String result;
|
||||
|
||||
if (SystemUtils.IS_OS_LINUX)
|
||||
{
|
||||
result = CmdExecUtils.run(BASH + " -c " + command);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new CmdExecException("bash call requires GNU/Linux operating system.");
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Chmod.
|
||||
*
|
||||
|
@ -93,7 +140,8 @@ public class Unix
|
|||
{
|
||||
try
|
||||
{
|
||||
CmdExec.run(SUDO, "chmod", changes, path);
|
||||
// CmdExec.run(SUDO, "chmod", changes, path);
|
||||
sudo("chmod", changes, path);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
|
@ -223,9 +271,11 @@ public class Unix
|
|||
{
|
||||
try
|
||||
{
|
||||
logger.info("Creating user account for [" + login + "].");
|
||||
CmdExec.run(SUDO, "/usr/sbin/useradd", "-m", "-c", name, "-d", home, login);
|
||||
logger.info("User account created for [" + login + "].");
|
||||
logger.info("Creating user account for [{}].", login);
|
||||
// CmdExec.run(SUDO, "/usr/sbin/useradd", "-m", "-c", name,
|
||||
// "-d", home, login);
|
||||
sudo("/usr/sbin/useradd", "-m", "-c", name, "-d", home, login);
|
||||
logger.info("User account created for [{}].", login);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
|
@ -283,9 +333,10 @@ public class Unix
|
|||
{
|
||||
try
|
||||
{
|
||||
logger.info("Deleting group for [" + group + "].");
|
||||
CmdExec.run(SUDO + " groupdel " + group);
|
||||
logger.info("Group deleted for [" + group + "].");
|
||||
logger.info("Deleting group for [{}].", group);
|
||||
// CmdExec.run(SUDO + " groupdel " + group);
|
||||
sudo("groupdel " + group);
|
||||
logger.info("Group deleted for [{}].", group);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
|
@ -307,9 +358,10 @@ public class Unix
|
|||
{
|
||||
try
|
||||
{
|
||||
logger.info("Deleting user account for [" + login + "].");
|
||||
CmdExec.run(SUDO + " /usr/sbin/userdel " + login);
|
||||
logger.info("User account delted for [" + login + "].");
|
||||
logger.info("Deleting user account for [{}].", login);
|
||||
// CmdExec.run(SUDO + " /usr/sbin/userdel " + login);
|
||||
sudo("/usr/sbin/userdel " + login);
|
||||
logger.info("User account delted for [{}].", login);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
|
@ -318,6 +370,32 @@ public class Unix
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sudo.
|
||||
*
|
||||
* @param command
|
||||
* the command
|
||||
* @return the string
|
||||
* @throws CmdExecException
|
||||
* the cmd exec exception
|
||||
*/
|
||||
public static String exec(final String command) throws CmdExecException
|
||||
{
|
||||
String result;
|
||||
|
||||
if (SystemUtils.IS_OS_LINUX)
|
||||
{
|
||||
result = CmdExecUtils.run(SUDO + " " + command);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new CmdExecException("sudo call requires GNU/Linux operating system.");
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the acl data.
|
||||
*
|
||||
|
@ -426,7 +504,7 @@ public class Unix
|
|||
{
|
||||
try
|
||||
{
|
||||
CmdExec.run(SUDO, "ln", "-s", sourcePath, targetPath);
|
||||
CmdExecUtils.run(SUDO, "ln", "-s", sourcePath, targetPath);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
|
@ -450,7 +528,8 @@ public class Unix
|
|||
*/
|
||||
public static void modifyLogin(final String sourceLogin, final String targetLogin, final String sourceHomeDirectory) throws UnixException
|
||||
{
|
||||
logger.info("Starting login modifying: [" + sourceLogin + "] -> [" + targetLogin + "]");
|
||||
logger.info("Starting login modifying: [{}] -> [{}]", sourceLogin, targetLogin);
|
||||
|
||||
if ((sourceLogin == null) || (sourceLogin.length() == 0))
|
||||
{
|
||||
throw new IllegalArgumentException("Original login parameters undefined");
|
||||
|
@ -477,8 +556,11 @@ public class Unix
|
|||
}
|
||||
else
|
||||
{
|
||||
String targetHomeDirectory = new File(sourceHomeDirectory).getParent().toString() + "/" + targetLogin;
|
||||
if (new File(targetHomeDirectory).exists())
|
||||
File targetHomeDirectory = new File(new File(sourceHomeDirectory).getParent(), targetLogin);
|
||||
// String targetHomeDirectory = new
|
||||
// File(sourceHomeDirectory).getParent().toString() + "/" +
|
||||
// targetLogin;
|
||||
if (targetHomeDirectory.exists())
|
||||
{
|
||||
throw new IllegalArgumentException("Target home directory already exists: [" + targetHomeDirectory + "].");
|
||||
}
|
||||
|
@ -487,7 +569,7 @@ public class Unix
|
|||
try
|
||||
{
|
||||
logger.info("Login modifying: [" + sourceLogin + "] -> [" + targetLogin + "]");
|
||||
CmdExec.run(SUDO + " usermod -l " + targetLogin + " " + sourceLogin);
|
||||
sudo("usermod -l " + targetLogin + " " + sourceLogin);
|
||||
logger.info("Login modified: [" + sourceLogin + "] -> [" + targetLogin + "]");
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
|
@ -498,9 +580,9 @@ public class Unix
|
|||
// TOOD problem;
|
||||
try
|
||||
{
|
||||
logger.info("Renaming home directory: [" + sourceHomeDirectory + "] -> [" + targetLogin + "]");
|
||||
CmdExec.run(SUDO + " mv " + sourceHomeDirectory + " " + targetHomeDirectory);
|
||||
logger.info("Home directory renamed: [" + sourceHomeDirectory + "] -> [" + targetLogin + "]");
|
||||
logger.info("Renaming home directory: [{}] -> [{}]", sourceHomeDirectory, targetLogin);
|
||||
sudo(" mv " + sourceHomeDirectory + " " + targetHomeDirectory);
|
||||
logger.info("Home directory renamed: [{}] -> [{}]", sourceHomeDirectory, targetLogin);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
|
@ -508,7 +590,7 @@ public class Unix
|
|||
}
|
||||
}
|
||||
}
|
||||
logger.info("Login modifying done: [" + sourceLogin + "] -> [" + targetLogin + "]");
|
||||
logger.info("Login modifying done: [{}] -> [{}]", sourceLogin, targetLogin);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -535,7 +617,7 @@ public class Unix
|
|||
{
|
||||
try
|
||||
{
|
||||
CmdExec.run(SUDO, "chmod", "-R", changes, path);
|
||||
sudo("chmod", "-R", changes, path);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
|
@ -577,16 +659,16 @@ public class Unix
|
|||
{
|
||||
try
|
||||
{
|
||||
logger.info("Login modifying: [" + sourceGroup + "] -> [" + targetGroup + "]");
|
||||
CmdExec.run(SUDO + " groupmod -n " + targetGroup + " " + sourceGroup);
|
||||
logger.info("Login modified: [" + sourceGroup + "] -> [" + targetGroup + "]");
|
||||
logger.info("Login modifying: [{}] -> [{}]", sourceGroup, targetGroup);
|
||||
sudo("groupmod -n " + targetGroup + " " + sourceGroup);
|
||||
logger.info("Login modified: [{}] -> [{}]", sourceGroup, targetGroup);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
throw new UnixException("Group renaming failed for [" + sourceGroup + "].", exception);
|
||||
}
|
||||
}
|
||||
logger.info("Group renaming done: [" + sourceGroup + "] -> [" + targetGroup + "]");
|
||||
logger.info("Group renaming done: [{}] -> [{}]", sourceGroup, targetGroup);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -652,7 +734,8 @@ public class Unix
|
|||
{
|
||||
try
|
||||
{
|
||||
CmdExec.run(SUDO, "setfacl", args, 1, 6);
|
||||
String[] command = ArrayUtils.add(args, 0, "setfacl");
|
||||
sudo(command);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
|
@ -685,9 +768,9 @@ public class Unix
|
|||
{
|
||||
try
|
||||
{
|
||||
logger.info("Password setting for [" + login + "].");
|
||||
CmdExec.run(SUDO, "bash", "-c", "echo \"" + login + ":" + newPassword + "\"| chpasswd ");
|
||||
logger.info("Password set for [" + login + "].");
|
||||
logger.info("Password setting for [{}].", login);
|
||||
sudoBash("echo \"" + login + ":" + newPassword + "\"| chpasswd ");
|
||||
logger.info("Password set for [{}].", login);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
|
@ -720,7 +803,7 @@ public class Unix
|
|||
try
|
||||
{
|
||||
logger.info("Real name changing for user [{}]", login);
|
||||
CmdExec.run(SUDO, "chfn", "-f", newRealName, login);
|
||||
CmdExecUtils.run(SUDO, "chfn", "-f", newRealName, login);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
|
@ -729,6 +812,85 @@ public class Unix
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sudo.
|
||||
*
|
||||
* @param command
|
||||
* the command
|
||||
* @return the string
|
||||
* @throws CmdExecException
|
||||
* the cmd exec exception
|
||||
*/
|
||||
public static String sudo(final String command) throws CmdExecException
|
||||
{
|
||||
String result;
|
||||
|
||||
if (SystemUtils.IS_OS_LINUX)
|
||||
{
|
||||
result = CmdExecUtils.run(SUDO + " " + command);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new CmdExecException("sudo call requires GNU/Linux operating system.");
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sudo.
|
||||
*
|
||||
* @param command
|
||||
* the command
|
||||
* @return the string
|
||||
* @throws CmdExecException
|
||||
* the cmd exec exception
|
||||
*/
|
||||
public static String sudo(final String... command) throws CmdExecException
|
||||
{
|
||||
String result;
|
||||
|
||||
if (SystemUtils.IS_OS_LINUX)
|
||||
{
|
||||
String[] newCommand = ArrayUtils.add(command, 0, SUDO);
|
||||
result = CmdExecUtils.run(newCommand);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new CmdExecException("sudo call requires GNU/Linux operating system.");
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sudo.
|
||||
*
|
||||
* @param command
|
||||
* the command
|
||||
* @return the string
|
||||
* @throws CmdExecException
|
||||
* the cmd exec exception
|
||||
*/
|
||||
public static String sudoBash(final String command) throws CmdExecException
|
||||
{
|
||||
String result;
|
||||
|
||||
if (SystemUtils.IS_OS_LINUX)
|
||||
{
|
||||
result = CmdExecUtils.run(BASH + " -c " + command);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new CmdExecException("sudo call requires GNU/Linux operating system.");
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unlink.
|
||||
*
|
||||
|
@ -737,7 +899,7 @@ public class Unix
|
|||
*/
|
||||
public static void unlink(final String filePathName)
|
||||
{
|
||||
logger.info("[{}]", filePathName);
|
||||
logger.info("unlink [filePathName=s{}]", filePathName);
|
||||
if (filePathName == null)
|
||||
{
|
||||
throw new IllegalArgumentException("Parameter undefined: [" + filePathName + "].");
|
||||
|
|
|
@ -22,10 +22,10 @@ import java.io.File;
|
|||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import fr.devinsy.util.cmdexec.CmdExec;
|
||||
import fr.devinsy.util.cmdexec.CmdExecException;
|
||||
import fr.devinsy.util.strings.StringListUtils;
|
||||
import fr.devinsy.util.unix.Unix;
|
||||
|
@ -39,7 +39,6 @@ import fr.devinsy.util.unix.UnixException;
|
|||
public class AclManager
|
||||
{
|
||||
private static final Logger logger = LoggerFactory.getLogger(AclManager.class);
|
||||
public static final String SUDO = "/usr/bin/sudo";
|
||||
|
||||
final static public Pattern USER_PATTERN = Pattern.compile("^user:(.*):(.*)$");
|
||||
final static public Pattern GROUP_PATTERN = Pattern.compile("^group:(.*):(.*)$");
|
||||
|
@ -228,7 +227,7 @@ public class AclManager
|
|||
try
|
||||
{
|
||||
logger.info("Getting Acl data for [" + filePathName + "].");
|
||||
result = CmdExec.run(SUDO, "/usr/bin/getfacl", "--no-effective", filePathName);
|
||||
result = Unix.sudo("/usr/bin/getfacl", "--no-effective", filePathName);
|
||||
logger.info("Acl data got for [" + filePathName + "].");
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
|
@ -517,7 +516,8 @@ public class AclManager
|
|||
{
|
||||
try
|
||||
{
|
||||
CmdExec.run(SUDO, "setfacl", args, 1, 5);
|
||||
String[] newArgs = ArrayUtils.add(args, 0, "setfacl");
|
||||
Unix.sudo(newArgs);
|
||||
}
|
||||
catch (CmdExecException exception)
|
||||
{
|
||||
|
|
340
src/fr/devinsy/util/unix/linux/Linux.java
Normal file
340
src/fr/devinsy/util/unix/linux/Linux.java
Normal file
|
@ -0,0 +1,340 @@
|
|||
/*
|
||||
* Copyright (C) 2017 Christian Pierre MOMON
|
||||
*
|
||||
* This file is part of Devinsy-unix.
|
||||
*
|
||||
* Devinsy-unix is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Devinsy-unix is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Devinsy-unix. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package fr.devinsy.util.unix.linux;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.time.DurationFormatUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import fr.devinsy.util.Property;
|
||||
import fr.devinsy.util.PropertyList;
|
||||
|
||||
/**
|
||||
* The Class Linux.
|
||||
*
|
||||
* @author Christian Pierre MOMON (christian.momon@devinsy.fr)
|
||||
*/
|
||||
public class Linux
|
||||
{
|
||||
private static Logger logger = LoggerFactory.getLogger(Linux.class);
|
||||
|
||||
private static final Pattern PROC_MEMINFO_PATTERN = Pattern.compile("^(\\S+):\\s+(\\d+)(\\s\\w{2})?$");
|
||||
|
||||
private static final String REDHAT_RELEASE_FILE = "/etc/redhat-release";
|
||||
private static final String DEBIAN_RELEASE_FILE = "/etc/debian_version";
|
||||
private static final String SUSE_RELEASE_FILE = "/etc/suse-foo";
|
||||
|
||||
/**
|
||||
* Instantiates a new linux.
|
||||
*/
|
||||
private Linux()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Read /proc/meminfo properties.
|
||||
*
|
||||
* @return the property list
|
||||
* @throws IOException
|
||||
* Signals that an I/O exception has occurred.
|
||||
*/
|
||||
public static PropertyList getProcMeminfoProperties() throws IOException
|
||||
{
|
||||
PropertyList result;
|
||||
|
||||
result = new PropertyList(50);
|
||||
|
||||
String buffer = readProcMeminfoFile();
|
||||
String[] lines = buffer.split("\n");
|
||||
for (String line : lines)
|
||||
{
|
||||
Matcher matcher = PROC_MEMINFO_PATTERN.matcher(line);
|
||||
|
||||
if ((matcher.matches()) && ((matcher.groupCount() == 2) || (matcher.groupCount() == 3)))
|
||||
{
|
||||
result.add(matcher.group(1), matcher.group(2));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new IOException("Unknown line format in /proc/meminfo file.");
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a /proc/meminfo summary.
|
||||
*
|
||||
* @return the string
|
||||
* @throws IOException
|
||||
* Signals that an I/O exception has occurred.
|
||||
*/
|
||||
public static PropertyList getProcMeminfoSummaryProperties() throws IOException
|
||||
{
|
||||
PropertyList result;
|
||||
|
||||
PropertyList meminfo = getProcMeminfoProperties();
|
||||
|
||||
result = new PropertyList(10);
|
||||
|
||||
result.add(meminfo.get(0));
|
||||
result.add(meminfo.get(1));
|
||||
result.add(meminfo.get(2));
|
||||
result.add(meminfo.get(3));
|
||||
result.add(meminfo.get(4));
|
||||
result.add(meminfo.get(5));
|
||||
result.add(meminfo.get(6));
|
||||
result.add(meminfo.get(7));
|
||||
result.add(meminfo.get(13));
|
||||
result.add(meminfo.get(14));
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the /proc/uptime duration.
|
||||
*
|
||||
* @return the /proc/uptime duration
|
||||
* @throws IOException
|
||||
* Signals that an I/O exception has occurred.
|
||||
*/
|
||||
public static long getProcUptimeDuration() throws IOException
|
||||
{
|
||||
long result;
|
||||
|
||||
String procUptime = readProcUptimeFile();
|
||||
|
||||
result = (long) Double.parseDouble(procUptime.split("\\s")[0]);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the /proc/uptime duration properties.
|
||||
*
|
||||
* @return the /proc/uptime duration properties
|
||||
* @throws IOException
|
||||
* Signals that an I/O exception has occurred.
|
||||
*/
|
||||
public static Property getProcUptimeDurationProperties() throws IOException
|
||||
{
|
||||
Property result;
|
||||
|
||||
String procUptime = readProcUptimeFile();
|
||||
|
||||
result = new Property("uptime.duration", procUptime.split("\\s")[0]);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the /proc/uptime duration properties.
|
||||
*
|
||||
* @return the /proc/uptime duration properties
|
||||
* @throws IOException
|
||||
* Signals that an I/O exception has occurred.
|
||||
*/
|
||||
public static PropertyList getProcUptimeProperties() throws IOException
|
||||
{
|
||||
PropertyList result;
|
||||
|
||||
result = new PropertyList();
|
||||
|
||||
String procUptime = readProcUptimeFile();
|
||||
String[] data = procUptime.split("\\s");
|
||||
|
||||
result.add("uptime.duration", data[0]);
|
||||
|
||||
long duration = Long.parseLong(data[0]);
|
||||
String humanDuration = DurationFormatUtils.formatDuration(duration * 1000, "dd'd'HH':'mm':'ss");
|
||||
result.add("uptime.duration.human", humanDuration);
|
||||
|
||||
result.add("uptime.idle", data[1]);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the release distribution properties.
|
||||
*
|
||||
* @return the release distribution properties
|
||||
* @throws IOException
|
||||
* Signals that an I/O exception has occurred.
|
||||
*/
|
||||
public static Property getReleaseDistributionProperties() throws IOException
|
||||
{
|
||||
Property result;
|
||||
|
||||
String buffer = readReleaseDistributionFile();
|
||||
|
||||
result = new Property("distribution.release", buffer);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read /proc/cpu processor 0.
|
||||
*
|
||||
* @return the string
|
||||
* @throws IOException
|
||||
*/
|
||||
public static String readProcCpuinfo0() throws IOException
|
||||
{
|
||||
String result;
|
||||
|
||||
result = readProcCpuinfoFile();
|
||||
|
||||
int separator = StringUtils.indexOf(result, "\n\n");
|
||||
|
||||
if (separator != -1)
|
||||
{
|
||||
result = result.substring(0, separator);
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read /proc/cpuinfo file.
|
||||
*
|
||||
* @return the string
|
||||
* @throws IOException
|
||||
* Signals that an I/O exception has occurred.
|
||||
*/
|
||||
public static String readProcCpuinfoFile() throws IOException
|
||||
{
|
||||
String result;
|
||||
|
||||
result = FileUtils.readFileToString(new File("/proc/cpuinfo"));
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read /proc/meminfo file.
|
||||
*
|
||||
* @return the string
|
||||
* @throws IOException
|
||||
* Signals that an I/O exception has occurred.
|
||||
*/
|
||||
public static String readProcMeminfoFile() throws IOException
|
||||
{
|
||||
String result;
|
||||
|
||||
result = FileUtils.readFileToString(new File("/proc/meminfo"));
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read /proc/uptime file.
|
||||
*
|
||||
* @return the string
|
||||
* @throws IOException
|
||||
*/
|
||||
public static String readProcUptimeFile() throws IOException
|
||||
{
|
||||
String result;
|
||||
|
||||
result = FileUtils.readFileToString(new File("/proc/uptime"));
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read /proc/version file.
|
||||
*
|
||||
* @return the string
|
||||
* @throws IOException
|
||||
* Signals that an I/O exception has occurred.
|
||||
*/
|
||||
public static String readProcVersionFile() throws IOException
|
||||
{
|
||||
String result;
|
||||
|
||||
result = FileUtils.readFileToString(new File("/proc/version"));
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read release distribution file.
|
||||
*
|
||||
* @return the string
|
||||
*/
|
||||
public static String readReleaseDistributionFile()
|
||||
{
|
||||
String result;
|
||||
|
||||
try
|
||||
{
|
||||
File redhatFile = new File(REDHAT_RELEASE_FILE);
|
||||
File debianFile = new File(DEBIAN_RELEASE_FILE);
|
||||
File suseFile = new File(SUSE_RELEASE_FILE);
|
||||
|
||||
if (debianFile.exists())
|
||||
{
|
||||
result = "Debian " + FileUtils.readFileToString(debianFile);
|
||||
}
|
||||
else if (redhatFile.exists())
|
||||
{
|
||||
result = FileUtils.readFileToString(redhatFile);
|
||||
}
|
||||
else if (suseFile.exists())
|
||||
{
|
||||
// TODO
|
||||
result = "SUSE " + FileUtils.readFileToString(debianFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = null;
|
||||
}
|
||||
|
||||
}
|
||||
catch (IOException exception)
|
||||
{
|
||||
logger.warn("Failed to read distribution infos.", exception);
|
||||
result = null;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// ////////////////////////////////////////////////////////////////////////
|
43
test/fr/devinsy/util/unix/LinuxTest.java
Normal file
43
test/fr/devinsy/util/unix/LinuxTest.java
Normal file
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Copyright (C) 2017 Christian Pierre MOMON
|
||||
*
|
||||
* This file is part of Devinsy-unix.
|
||||
*
|
||||
* Devinsy-unix is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Devinsy-unix is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Devinsy-unix. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
package fr.devinsy.util.unix;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import fr.devinsy.util.unix.linux.Linux;
|
||||
|
||||
/**
|
||||
* The Class LinuxTest.
|
||||
*/
|
||||
public class LinuxTest
|
||||
{
|
||||
/**
|
||||
* Test 01.
|
||||
*
|
||||
* @throws IOException
|
||||
*/
|
||||
@Test
|
||||
public void test01() throws IOException
|
||||
{
|
||||
System.out.println(Linux.readProcMeminfoFile());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue