网站首页 > 文章中心 > 其它

linux前端调用命令行_linux 命令行调用函数

作者:小编 更新时间:2023-09-30 10:52:20 浏览量:233人看过

Linux文件系统和逻辑卷管理命令(二)

下面是可选的挂载点分区:

为各挂载目录创建好分区之后,就可以为其创建文件系统了.

在 Unix/Linux 环境下,通常使用命令工具执行格式化操作.需要注意的是:对硬盘执行格式化操作时,用户需要拥有超级用户权限.创建文件系统的常用命令如下:

并非所有文件系统的命令工具都已经默认安装了.要想知道某个文件系统的命令工具是否可用,可以使用 type 命令.

每个文件系统命令都有很多命令行选项,允许你定制如何在分区上创建文件系统.要查看所有可用的命令行选项,可用 man 命令来显示该文件系统命令的手册页面.所有的文件系统命令都允许通过不带选项的简单命令来创建一个默认的文件系统.

linux前端调用命令行_linux 命令行调用函数-图1

为分区创建了文件系统之后,下一步是将它挂载到虚拟目录下的某个挂载点,这样就可以将数据存储在新文件系统中了.你可以将新文件系统通过 mount 命令挂载到虚拟目录中需要额外空间的任何位置.

现在你可以在新分区中保存新文件和目录了! 这种挂载文件系统的方法只能临时挂载文件系统.当重启 Linux 系统时,文件系统并不会自动挂载.要强制 Linux 在启动时自动挂载新的文件系统,可以将其添加到 /etc/fstab 文件.

如果用标准分区在硬盘上创建了文件系统,为已有文件系统添加额外的空间多少是一种痛苦的体验.你只能在同一个物理硬盘的可用空间范围内调整分区大小.如果硬盘上没有地方了,你就必须弄一个更大的硬盘,然后手动将已有的文件系统移动到新的硬盘上.这时候就可以通过将另外一个硬盘上的分区加入已有文件系统,动态地添加存储空间. Linux 逻辑卷管理器(logical volume manager, LVM)软件包正好可以用来做这个.它可以让你在无需重建整个文件系统的情况下,轻松地管理磁盘空间.

注意,上图中的第三个物理硬盘有一个未使用的分区.通过逻辑卷管理,你随后可以轻松地将这个未使用分区分配到已有卷组:要么用它创建一个新的逻辑卷,要么在需要更多空间时用它来扩展已有的逻辑卷. 类似地,如果你给系统添加了一块硬盘,逻辑卷管理系统允许你将它添加到已有卷组,为某个已有的卷组创建更多空间,或是创建一个可用来挂载的新逻辑卷.这种扩展文件系统的方法要好用得多!

优点

比起正常的硬盘分区管理,LVM 更富于弹性:

这些优点使得 LVM 对服务器的管理非常有用,对于桌面系统管理的帮助则没有那么显著,你需要根据实际情况进行取舍.

缺点

linux前端调用命令行_linux 命令行调用函数-图2

Linux LVM 包只提供了命令行程序来创建和管理逻辑卷管理系统中所有组件.有些 Linux 发行版则包含了命令行命令对应的图形化前端,但为了完全控制你的 LVM 环境,最好习惯直接使用这些命令.

此外,还可以使用以下命令来操作逻辑卷:

动态扩容示例:

在linux系统命令行下运行PHP,一定要安装Apache等web前端吗

要在LINUX系统上运行PHP,必须要安装PHP工作环境:PHP+APACHE,如果用到数据库还要+mysql.

java linux怎么获取前端输入的字符

首先看一下Process类:

[plain] view plain copy

ProcessBuilder.start() 和 Runtime.exec 方法创建一个本机进程,并返回 Process 子类的一个实例,

该实例可用来控制进程并获得相关信息.Process 类提供了执行从进程输入、执行输出到进程、等待进程完成、

检查进程的退出状态以及销毁(杀掉)进程的方法.

创建进程的方法可能无法针对某些本机平台上的特定进程很好地工作,比如,本机窗口进程,守护进程,Microsoft Windows

操作都将通过三个流 (getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父进程.

父进程使用这些流来提供到子进程的输入和获得从子进程的输出.因为有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,

如果读写子进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁.

当没有 Process 对象的更多引用时,不是删掉子进程,而是继续异步执行子进程.

对于带有 Process 对象的 Java 进程,没有必要异步或并发执行由 Process 对象表示的进程.

特别需要注意的是:

①.,创建的子进程没有自己的终端控制台,所有标注操作都会通过三个流

(getOutputStream()、getInputStream() 和 getErrorStream()) 重定向到父进程(父进程可通过这些流判断子进程的执行情况)

则可能导致子进程阻塞,甚至产生死锁

abstract void destroy()

杀掉子进程.

abstract int exitValue()

返回子进程的出口值.根据惯例,值0表示正常终止.

abstract InputStream getErrorStream()

获取子进程的错误流.

abstract InputStream getInputStream()

获取子进程的输入流.

abstract OutputStream getOutputStream()

获取子进程的输出流.

abstract int waitFor()

导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止.

如果已终止该子进程,此方法立即返回.如果没有终止该子进程,调用的线程将被阻塞,直到退出子进程.

再来看一下Runtime类:

每个Java应用程序都有一个Runtime类实例,使应用程序能够与其运行的环境相连接.可以通过getRuntime方法获取当前运行时环境.

应用程序不能创建自己的Runtime类实例.

介绍几个主要方法:

Process exec(String command)

在单独的进程中执行指定的字符串命令.

Process exec(String command, String[] envp)

在指定环境的单独进程中执行指定的字符串命令.

Process exec(String command, String[] envp, File dir)

在有指定环境和工作目录的独立进程中执行指定的字符串命令.

Process exec(String[] cmdarray)

在单独的进程中执行指定命令和变量.

Process exec(String[] cmdarray, String[] envp)

在指定环境的独立进程中执行指定命令和变量.

Process exec(String[] cmdarray, String[] envp, File dir)

在指定环境和工作目录的独立进程中执行指定的命令和变量.

command:一条指定的系统命令.

envp:环境变量字符串数组,其中每个环境变量的设置格式为name=value;如果子进程应该继承当前进程的环境,则该参数为null.

dir:子进程的工作目录;如果子进程应该继承当前进程的工作目录,则该参数为null.

cmdarray:包含所调用命令及其参数的数组.

以下为示例(要打成可执行jar包扔到linux下执行):

[java] view plain copy

public class test {

public static void main(String[] args){

InputStream in = null;

try {

Process pro = Runtime.getRuntime().exec(new String[]{"sh",

"/home/test/test.sh","select admin from M_ADMIN",

"/home/test/result.txt"});

pro.waitFor();

in = pro.getInputStream();

BufferedReader read = new BufferedReader(new InputStreamReader(in));

String result = read.readLine();

System.out.println("INFO:"+result);

} catch (Exception e) {

e.printStackTrace();

}

在这用的是Process exec(String[] cmdarray)这个方法

/home/test/test.sh脚本如下:

#!/bin/sh

#查询sql

SQL=$1

#查询结果保存文件

#数据库连接

DB_NAME=scott

DB_PWD=tiger

DB_SERVER=DB_TEST

RESULT=+sqlplus -S ${DB_NAME}/${DB_PWD}@${DB_SERVER} !

set heading off

set echo off

set pages 0

set feed off

${SQL}

/

commit

!+

echo "${RESULT}" ${RESULT_FILE}

linux前端调用命令行_linux 命令行调用函数-图3

echo 0;

特别需要注意的是,当需要执行的linux命令带有管道符时(例如:ps -ef|grep java),用上面的方法是不行的,解决方式是将需要执行的命令作为参数传给shell

public class Test {

public static void main(String[] args) throws Exception{

String[] cmds = {"/bin/sh","-c","ps -ef|grep java"};

Process pro = Runtime.getRuntime().exec(cmds);

InputStream in = pro.getInputStream();

String line = null;

while((line = read.readLine())!=null){

System.out.println(line);

PS:

Runtime.getRuntime().exec()这种调用方式在java虚拟机中是十分消耗资源的,即使命令可以很快的执行完毕,频繁的调用时创建进程消耗十分客观.

java虚拟机执行这个命令的过程是,首先克隆一条和当前虚拟机拥有一样环境变量的进程,再用这个新的进程执行外部命令,最后退出这个进程.频繁的创建对CPU和内存的消耗很大

以上就是土嘎嘎小编为大家整理的linux前端调用命令行相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章