Linux命令打开函数 linux打开文件命令方法

在linux中怎么运行脚本函数1、同一脚本文件中的函数:
#!/bin/sh
function func1()
{
echo $1
}
func1 "Hello world!"
2、其它脚本文件中的函数:
func.sh文件内容如下(其中定义了函数func1,需要1个参数):
#!/bin/sh
function func1()
{
echo $1
}
主程序脚本:
#!/bin/sh
. func.sh
func1 "Hello world!"
PHP执行linux系统命令的常用函数使用说明system函数
说明:执行外部程序并显示输出资料 。
语法:string
system(string
command,
int
[return_var]);
返回值:
字符串
详细介绍:
本函数就像是
C
语中的函数
system(),用来执行指令,并输出结果 。若是
return_var
参数存在 , 则执行
command
之后的状态会填入
return_var
中 。同样值得注意的是若需要处理用户输入的资料,而又要防止用户耍花招破解系统 , 则可以使用
EscapeShellCmd() 。若
PHP
以模块式的执行 , 本函数会在每一行输出后自动更新
Web
服务器的输出缓冲暂存区 。若需要完整的返回字符串,且不想经过不必要的其它中间的输出界面,可以使用
PassThru() 。
实例代码:
复制代码
代码如下:
?php
$last_line
=
system('ls',
$retval);
echo
'Last
line
of
the
output:
'
.
$last_line;
echo
'hr
/Return
value:
'
.
$retval;
?
exec函数
说明:执行外部程序 。
语法:string
exec(string
command,
string
[array],
int
[return_var]);
返回值:
字符串
详细介绍:
本函数执行输入
command
的外部程序或外部指令 。它的返回字符串只是外部程序执行后返回的最后一行;若需要完整的返回字符串,可以使用
PassThru()
这个函数 。
要是参数
array
存在,command
会将
array
加到参数中执行,若不欲
array
被处理 , 可以在执行
exec()
之前呼叫
unset() 。若是
return_var

array
二个参数都存在,则执行
command
之后的状态会填入
return_var
中 。
值得注意的是若需要处理使用者输入的资料,而又要防止使用者耍花招破解系统 , 则可以使用
EscapeShellCmd() 。
实例代码:
复制代码
代码如下:
?php
echo
exec('whoami');
?
popen函数
说明:打开文件 。
语法:int
popen(string
command,
string
mode);
返回值:
整数
详细介绍:
本函数执行指令开档,而该文件是用管道方式处理的文件 。用本函数打开的文件只能是单向的
(只能读或只能写),而且一定要用
pclose()
关闭 。在文件操作上可使用
fgets()、fgetss()

fputs() 。若是开档发生错误,返回
false
值 。
实例代码:
复制代码
代码如下:
?
$fp
=
popen("/bin/ls","r"
);
?
PHP监控linux服务器负载
在实际项目的应用中,我们由于各种条件的现实,利用PHP来实现服务器负载监控将是一种更为灵活的方式 。
由于Web
Server以及PHP的实现方式所限,我们在现实环境中很难利用PHP去调用一些Linux中需要root权限才能执行的程序,对此,我从网上找到另外一种方式来绕开这个限制 。首先先写个c程序中转调用系统命令,然后用PHP去执行此c程序 。
c程序
首先写个c文件,比如/usr/local/ismole/w.c
复制代码
代码如下:
#includestdio.h
#includestdlib.h
#includesystypes.h
#includeunistd.h
int
main()
{
uid_t
uid
,euid;
//note
获得当前的uid
uid
=
getuid();
//note
获得当前euid
euid
=
geteuid();
//note
交换这两个id
if(setreuid(euid,
uid))
perror("setreuid");
//note
执行将要执行linux系统命令
system("/usr/bin/w");
return0;
}
编译该文件gcc
-o
w
-Wall
w.c,这时会在当前目录下生成程序w 。改变此程序的属主chmod
u s
./w 。
PHP执行
文件内容如下,放在web目录下,访问就会输出当前的服务器负载情况 。
复制代码
代码如下:
?php
/*
More
Original
PHP
Framwork
Copyright
(c)
2007
-
2008
IsMole
Inc.
$Id:
serverMonitor.php
408
2008-12-02
08:07:40Z
kimi
$
*/
//note
key的验证过程
if($key
!=
$authkey)
{
//
exit('key
error);
}
$last_line
=
exec('/usr/local/ismole/w',
$retval);
$returnArray
=
explode("load
average:
",
$retval[0]);
$returnString
=
$returnArray[1];
echo
$returnString;
 按照上面的实例,我们可以用PHP来做任何我们想执行的Linux系统命令 , SVN更新,服务器监控 , 备份 , 恢复,日常维护等等 。
linux中 , 使用fopen函数打开文件失败你可以看下,在另一个目录的文件你是否有访问权限,同一个目录下一般来说,你把Linux命令打开函数他复制过来,这个文件的拥有者(owner)就是你Linux命令打开函数了 , 你是肯定可以访问的 。每个程序都有一个当前目录的环境变量,你在shell中执行程序时,shell程序就是你执行的程序的父进程,你的程序从shell程序中继承了当前目录,所以你只给定文件名时,当然打开的就是当前目录下的文件了
Linux系统下date函数的用法我们在Linux系统中使用 date --help 可打印出如下信息:
默认情况下 , 日期的数字区域以0 填充,以下可选标记可以跟在"%"后:
在任何标记之后还允许一个可选的域宽度指定 , 它是一个十进制数字 。
作为一个可选的修饰声明,它可以是E,在可能的情况下使用本地环境关联的
表示方式;或者是O,在可能的情况下使用本地环境关联的数字符号 。
date是Linux系统里自带的一个系统命令,用来显示当前的系统时间,不过默认显示的结果里包括很多信息,特别是做为文件名输出时,不是很方便,好在date命令里包含格式化输出的选项 。
我们一般使用 date -s 命令来修改系统时间
比如将系统时间设定成2011年7月13日的命令:date -s 07/13/2011
将系统时间设定成11点12分0秒的命令:date -s 11:12:00
注意:这里说的是系统时间,是linux由操作系统维护的 。
在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现 。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS 。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行 date -s 后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因 。如果要确保修改生效可以执行 clock –w 命令,强制把系统时间写入CMOS 。
LINUX NGINX下的PHP shell_exec()函数执行linux命令 2019-08-08LINUX NGINX下的PHP shell_exec()函数执行linux命令
环境说明
手头有一台linux的测试服务器 , 最近因为业务需要,需要通过php访问另一台服务器去执行某些命令 。
由于另一台服务器已经对这台服务器开了私钥,所以在终端上是可以直接执行命令而不需要输入密码的 。
问题
PHP无法使用exec命令 , 没有任何返回值 。
解决途径
1.php.ini的配置有问题 。
由于php是7.0以上的版本,取消了安全模式,所以考虑PHP.ini文件配置 。
打开php配置文件,里面有一行disabel_function的值,此处记录了禁止运行的函数,在里面讲exec和shell_exec,system等函数删除 。
2.权限问题
修改以后PHP可以运行部分命令了,但是部分外部程序和命令仍然不能运行 。使用sudo返回失败 。
于是运行“whoami”查看,环境下php-frm的运行角色是www 。
于是修改sudoers文件 。
vi /etc/sudoers
将www添加到
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
下面:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
www ALL=(ALL) NOPASSWD:ALL
然后找到Default requiretty这一行,把他注释掉
# Default requiretty
ps:意思就是sudo默认需要tty终端,注释掉就可以在后台执行了.
重启nginx和php-fpm
service nginx restart
service php-fpm restart
这样,PHP就可以在需要执行外部命令的时候使用sudo利用root身份执行命令,而不会报错或者执行失败了!
Linux 常用命令(要求全而精)1、linux分区
--在linux里面所有的设备、任何东西Linux命令打开函数,在linux看来都是文件 。
--文件在它看来Linux命令打开函数,有两种形式:
第一种是字符型(键盘输入、打印机)Linux命令打开函数;
第二种是二进制型(硬盘、光驱、U盘)
--linux中所有硬件
--手动分区
--A、至少有两个分区
/根分区
SWAP 交换分区(物理内存大小的两倍)
--B、个人桌面分区
/
/boot 128MB is enough
/usr
SWAP
/tmp(用于光盘刻录)
2、linux目录说明
--/dev/xxyN
--xx (分区所在设备类型:hd--IDE硬盘sd--SCSI硬盘)
--y(标明分区所在设备
例如:/dev/hda 第一个IDE硬盘 或 /dev/hdb 第二个IDE硬盘 或 /dev/sdb 第二个SCSI硬盘)
--N(数字代表分区:1-4--主分区或扩展分区;逻辑分区从5开始!
例如:/dev/hda3 第一个IDE硬盘上的第三个主分区或扩展分区
/dev/sdb6 第二个SCSI硬盘上的第二个逻辑分区)
3、linux目录结构
/根目录Linux命令打开函数,最高级别
/bin系统基本命令存放目录(/usr/bin)
/boot linux的内核及引导系统程序文件存放目录(如:vmlinuz、initrd.img)
一般情况下Linux命令打开函数,GRUB或LILO系统引导管理也位于这个目录
/dev设备文件存储目录,如声卡、光驱...
/ect存放系统设置文件(如用户账号密码、服务器配置文件等)
/home 普通用户家目录 , 默认存放目录
/lib库文件存放目录
/lost found在ext2或ext3文件系统中,当系统以外崩溃或机器意外关机,而产生一些文件碎片放在这里 。
当系统启动的过程中,fsck工具会检查这里 , 并修复已经损坏的文件系统 。
有事喜用发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或者移文件到原来的位置上 。
/media 即插即用型存储设备的挂载点自动在这个目录下创建 。
如USB盘系统自动挂在后,会在这个目录下产生一个目录;
类似cdrom的目录
/mnt存放挂载存储设备的挂载目录 , 如cdrom等目录
/opt表示可选的意思,有些软件包也会被安装在此 , 也就是自定义软件包,
比如OpenOffice,或者一些我们自己编译的软件包,也可安装此处 。
/proc操作系统运行时 , 进程(正在运行的程序)信息及内核信息(比如CPU、硬盘分区、内存信息等)存放在此 。
/proc目录是伪装的文件系统proc的挂载目录,proc并不是真正的文件系统
/rootlinux超级权限用户root的家目录
/sbin大多是涉及系统管理的命令的存放,只有超级权限用户root才可执行命令存放,普通用户无权限执行此目录下的命令
与 /usr/sbin; /usr/X11R6/sbin; usr/local/sbin 目录相似
(sbin,只有root权限才能执行)
/tmp临时文件目录 , 有时用户运行程序的时候,会产生临时文件 。
/var/tmp目录和此目录相似
/usr系统存放程序的目录 , 如命令、帮助文件等 。这个目录下有很多的文件和目录 。
大部分Linux发行版提供的软件包都安装在此,涉及服务器的配置文件就安装在/ect中 。
/usr/share/fonts 字体目录
/usr/share/man 或 /usr/share/doc 帮助目录
/usr/bin 或 /usr/local/bin 或 /usr/X11R6/bin普通用户可执行文件目录
/usr/sbin 或 /usr/local/sbin 或 /usr/X11R6/sbin 超级权限用户root可执行命令存放目录
/usr/include 程序头文件存放目录
/var(vary)此目录经常变动
/var/log 用来存放系统日志
/var/www 用来定义Apache服务器站点存放
/var/lib 用来存放一些库文件,如MySQL的,以及MySQL数据库的存放地 。
4、基本命令
--查看帮助*** --help*** --?
--查看详细帮助man ***
--登录 login
--退出窗口 exit
--关机 shutdown
--重启 reboot
--初始化 init (run level -/etc/inittab),0-6看第六部分的g
--进入根目录 cd /
--回上层目录 cd ..
--相对路径 cd dev
--绝对路径 cd /dev
--查用户名 whoami
--查当前目录 pwd
--列出当前目录内容 ls
-l(树详细显示目录内容)
-m(横列显示目录内容,是屏幕长度显示)
-a(列出全部文件,包括隐藏文件)
-S(以文档大小排序)
--创建目录 mkdir dname
--删除目录 rmdir dname
rm -r *** -(递归删除该目录下所有内容,询问每个准备删除的文件)
rm -rf ***-(强制删除该目录下所有内容,不询问)
--创建空白文件 touch ***
(ps:从技术的角度来讲,linux的文件后缀名没有任何意义)
--复制 cp
cp -r **1 **2 (复制1到2中)
--移动 mv
mv -t **1 **2 (把2移动到1中)
--编辑文本 vi [文件名]
--查看文本 cat由第一行开始显示文本内容
tac从最后一行显示 , 可以看出 tac 是 cat 的倒着写
more 一页一页的显示文档内容
less 与 more 类似 , 可以往前翻页
head 只看头几行
-N(数字,可根据行数显示)
tail 只看后几行
-N(数字,可根据行数显示)
nl显示的时候,顺序输出行号
od以二进制位的方式读取档案内容
--查找文本 find [路径][查找类型][搜索文件名]
如查找rc.localfind /etc -name *.local
--查找命令信息及其位置whereis 命令
如 whereis ls
--查看环境变量 echo $SHELL
如 echo $PATH (分大小写:分隔符是:,windows是echo %path%;)
--链接 ln
如 ln joe.txt a (硬链接,如同复制一个新文件,joe.txt删除后,a还存在)
a是链接的名称,a和joe.txt同步,然后a的内容和joe.txt一样
joe.txt改变,a也跟着变
如 ln -s joe.txt b (软链接,如同创建一个快捷方式,joe.txt删除后 , b不存在)
--wc 统计指定文本文件的行数、字数、字符数
--grep(很常用) 在指定的文本文件中查找指定的字符串
grep 字符串 文件名
--col 见管道..
--------------------
----信息显示命令----
--------------------
--date显示和设置日期
--stat显示指定文件的相关信息
--who、w显示在线登录用户
--whoami显示用户自己的身份
--id显示当前用户的id信息
--hostname 显示主机名称
--uname显示操作系统信息
--dmesg显示系统启动信息
--du显示指定的文件(目录)已使用的磁盘空间
--df显示文件系统磁盘空间的使用情况
--free显示当前内存和交换空间的使用情况
--fdisk -l 显示磁盘信息
--locale显示当前语言环境
5、挂载点(mount 设备目录 挂载目录)
--访问设备 (那设备当成一个文件,和另外一个文件夹进行绑定)
--例如挂载光驱:步骤 [cd /mnt]---[mkdir cdr]---[mount /dev/cdrom /mnt/cdr]---[cd cdr]--OK!直接访问光驱内容
--卸载挂载设备(umount /dev/cdrom)--注意必须先退出挂载目录,否则出现"device is busy"错误.
6、startup-shutdown(linux启动流程)
--A、boot sequence(important) linux启动过程
a. load bios(hardware information)
b. read MBR's config to find out the OS
(MBR--Master Boot Record,硬盘第一个物理扇区,柱面0、磁头0、扇区1,包含主引导程序和硬盘分区表)
c. load the kernel of the OS
(加载为kernel核心的OS)
d. init process starts...
(启动linux第一个进程init)
e. execute /etc/rc.d/sysinit
(执行系统最重要的配置文件,后台启用进程)
(rc.d--run command)
f. start other modules(stc/modules.conf)
(开启各种模块 , 如内存管理模块、硬盘管理模块)
g. execute the run level scripts
(系统启动是分层次的,根据情况执行,每个层次之间没关系)
0 - 系统停机状态
1 - 单用户工作状态 root
2 - 多用户状态(没有NFS)
3 - 多用户状态(有NFS)
NFS - Network File System 网络文件系统 , 联网系统
4 - 系统未使用,留给用户
5 - 图形界面
6 - 系统正常关闭并重新启动
如:cd /etc -- 有rc0.d、rc1.d、rc2.d、rc3.d、rc4.d、rc5.d等多个文件夹,保存着各个层次执行的进程文件
h. execute /etc/rc.d/rc.local (重要)
(保存其它进程脚本,如tomcat自动启动 , 要修改此配置文件)
i. execute /bin/login
(登录界面)
j. shell started...
7、vi 文本编辑器
--两种模式:命令模式编辑模式
--vi [文件名]
(切换到编辑模式)
aappend-光标后添加
iinsert-光标前插入
oopen-另起一行编辑
esc (切换回命令模式)
:w存盘
:wq 存盘退出
:q退出
:q! 不存盘退出
dd删除其中一行
dw删除一个单词
(sudo gedit 文本常用linux下的文本编辑器,比vi好用)
8、用户设置
--切换用户(switch user) su username
小技巧:直接exit切换
--添加用户 useradd username [-g] [组名](分配到某个用户组)
(创建后会自动在/home目录下创建该新用户的文件夹 , 如/home/username)
--设置密码 passwd username
--cd /etc
--查看用户信息 more password
如新增的用户信息:username:x:500:500::/home/username:/bin/bash
第一个数字,代表用户组,当添加用户没有指定用户组时,系统会创建一个和用户ID一样的组ID;
第二个数字:用户ID号;
用户的目录是/home/username;
用户的SHELL是/bin/bash
(命令---SHELL[解释命令]---kenrel内核)
SHELL有多种类型,如csh、bash(常用)、bsh、ksh、sh(最原始)
--添加用户组 groupadd groupname
--查看用户组信息 more group
--删除用户组 groupdel groupname
--修改用户 usermod [-g] [组名] [用户名]
--删除用户 userdel username
然后把/home的文件夹删除了 rm -rf 文件夹
9、权限file privilege
--linux把文件的权限分成四种:r:readw:writex:execute-:none
如:-rw-r--r--
lrwxrwxrwx
drwxr-xr-x
drwxr-xr-x
第一个数字'-'代表文件 , 其余是文件夹,后9位分为3组,每组有四种权限设置rwx-
第一位表示文件所有者
第二位表示和所有者在同一用户组的用户
第三位表示不在同一用户组的用户权限
--设置权限 (随意应用,灵活组合!)
1、普通用法
--添加权限[chmodx 文件]
如:-rw-r--r-- --- -rwxr-xr-x
--删除权限[chmod -x 文件]
如:-rwxr-xr-x --- -rw-r--r--
--给自己添加权限[chmod ? x 文件]
如此类推,组--g,其他人--o
如:chmod u x-rw-r--r-- --- -rwxr--r--
chmod g x-rw-r--r-- --- -rw-r-xr--
chmod o x-rw-r--r-- --- -rw-r--r-x
2、专业用法chmod 755/777
--原理,八进制转二进制
如755,111 101 101 , rwx r-x r-x
777,111 111 111,rwx rwx rwx
--修改所有者权限 chown (change owner)
如:chown 原来文件 file1 的所有者是 root,改成joe的
chown joe file1
10、管道(把上一个命令执行的结果交给下一个命令)
--使用方法:
命令1|命令2|命令3......|命令n
--使用举例
--$ls -Rl /etc | more
(如 ls -Rl /etc (在控制台模式下 , 无法返回前面过去的信息),因此需要管道执行该查询,实现分页的工作, ls -Rl /etc | more)
--$cat /etc/passwd | wc
(显示文件结果,再数数有多少行)
--$cat /etc/passwd | greplrj
(显示文件结果,再查找包含lrj的行)
--#dmesg | grep eth0
(显示系统启动的信息 , 再查找包含eth0的行--真正含义,检查网卡执行信息是否正常)
--$man bash | col -bbash.txt
语法:col [-bfx][-l缓冲区列数]
补充说明:在许多UNIX说明文件里 , 都有RLF控制字符 。当我们运用shell特殊字符""和"",把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控制字符 。
参数:
-b过滤掉所有的控制字符 , 包括RLF和HRLF 。
-f滤除RLF字符,但允许将HRLF字符呈现出来 。
-x以多个空格字符来表示跳格字符 。
-l缓冲区列数预设的内存缓冲区有128列,您可以自行指定缓冲区的大小 。
--$ls -l | grep "^d"
(用正则表达式筛选出目录列表中 头字母为'd' 的内容--目录)(^是正则表达式开头部分)
--$ls -l * | grep "^-" | wc -l
(列出目录列表中 头字符为'-'的内容--文件,并统计显示的行数wc -l)
11、其他命令
--wall(warning all) 通知所有人
a.命令替换
如 wall `date`、 cd 'pwd'、mkbootdisk $(uname -r)
b.重定向
重定向输出:
如 lscmd.txt ,把文件写到cmd.txt,不输出在控制台
lscmd.txt ,把文件追加写到cmd.txt
重定向输入:
如 wallcmd.txt , 把文本内容发给所有人
12、修改系统的默认系统级别
常用3和5
3 - 多用户状态(有NFS)
NFS - Network File System 网络文件系统,联网系统
5 - 图形界面
PS.设置用户权限: sudo chmod 777 目录
4表示读,2表示写,1表示执行.
第一位表示文件所有者,第二位表示和所有者在同一用户组的用户,第三位表示不在同一用户组的用户权限.
755表示文件所有者可读写,执行.
第二位5表示与所有者在同一用户组的可读,可执行,不可写.
第三位5表示其它组可读,可执行,不可写.转载于Joewalker在本人空间也有详细说明
【Linux命令打开函数 linux打开文件命令方法】关于Linux命令打开函数和linux打开文件命令方法的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。

    推荐阅读