⑴ linux用户权限-实例问题
这个问题其实不难,要能删除文件,要对文件所在的目录有写权限,首先,你把root的home目录“~”的权限设置为775,再把用户C加入root组,这样的话用户C就可以删除那个文件了然后,你建立abc.txt文件,把文件所有者设置为用户a,再把文件的权限设置640,最后将文件所属组设置为用户b所在的组,这样的话,用户a因为拥有这个文件,对这个文件的权限是6(读写),所以他可以读写这个文件,但是,他对文件所在的目录“~”权限是5(读、执行)没有写权限,所以他无法删除这个文件,而用户b对文件的权限是4(只读),所以他只能读这个文件,而他对文件所在的目录的权限同样是5(读、执行),所以他同样不能删除这个文件,而用户C对文件的权限是0(没有任何权限),所以他既不能读也不能写,但他对文件所在目录的权限是7(读、写、执行),所以他可以删除这个文件。
⑵ 在Linux C语言下,可执行的Shell脚本文件与编译之后的C可执行文件的区别有哪些
shell脚本是shell的一种扩展功能,也就是shell会根据你所写的脚本一条一条的去执行,C写的程序是直接给CPU执行的。一般来说做一些简单功能,特别是和shell有关的。我们会用shell脚本,如系统环境的设定,开机后执行系统的初始化等。做一些功能复杂的,特别人用户自已所想到的功能时会用C语。另外如果程序执行是要用到root权限是最好也用C语。
(1)Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux/Unix下的命令。
(2)C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
⑶ Linux C语言用system()调用,带参数
linux c system函数介绍:
system(执行shell 命令)
相关函数
fork,execve,waitpid,popen
表头文件
#i nclude
定义函数
int system(const char * string);
函数说明
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命>令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
返回值
=-1:出现错误
=0:调用成功但是没有出现子进程
>0:成功退出的子进程的id
如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值>。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功。
附加说明
在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。
范例
#i nclude
main()
{
system("ls -al /etc/passwd /etc/shadow");
}
执行结果:
-rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
-r--------- 1 root root 572 Sep 2 15 :34 /etc/shado
例2:
char tmp[];
sprintf(tmp,"/bin/mount -t vfat %s /mnt/usb",dev);
system(tmp);
其中dev是/dev/sda1。
system函数的源码
#include <syspes.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
int system(const char * cmdstring)
{
pid_t pid;
int status;
if(cmdstring == NULL){
return (1);
}
if((pid = fork())<0){
status = -1;
}
else if(pid = 0){
execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);
-exit(127); //子进程正常执行则不会执行此语句
}
else
{
while(waitpid(pid, &status, 0) < 0){
if(errno != EINTER)
{
status = -1;
break;
}
}
}
return status;
}
那么如何获得system的返回值呢??
char buf[10];
char * ps="ps -ef|grep -c root";
FILE *ptr;
int i;
if((ptr = popen(ps, "r")) != NULL)
{
fgets(buf, 10 , ptr);
i = atoi(buf);
pclose(ptr);
}
可以man下waitpid查看下如何检查status的值
int ret = system("ls -al /etc/passwd /etc/shadow");
if(WIFSIGNALED(ret))
具体的这些宏查看man waitpid
⑷ 没有root权限怎么使用linux c中ctags
root后获取管理员权限才能随便删手机上内置的软件,因为手机厂商限制你了,有了root权限你才算手机真正主人。下个一键Root大师可以一键root,你可以试试,很简单的。
⑸ linux 虚拟机怎样以root身份登录
一楼的,人家说的是fedora12.....
fedora12初始情况下禁止root登陆,这是为了安全性考虑。当前也可以开启.
切换到命令行模式下使用root登陆,然后修改文件
su
-c
'gedit
/etc/pam.d/gdm'
找到下面这行:
auth
required
pam_succeed_if.so
user
!=
root
quiet
将这一行备注掉:
#auth
required
pam_succeed_if.so
user
!=
root
quiet
再修改文件
edit
/etc/pam.d/gdm-password
同样地注释掉"auth
required
pam_succeed_if.so
user
!=
root
quiet"这一行
这样就可以了。
顺便说一句,有些
简单的问题
,直接网上就可以搜到的。。
⑹ 在Linux中,当root密码丢失后,应该:( )谢谢了,大神帮忙啊
楼上正确 附详细方法 三种办法: 1.在系统进入单用户状态,直接用passwd root去更改 2.用安装光盘引导系统,进行linux rescue状态,将原来/分区挂接上来,作法如下: cd /mnt mkdir hd mount -t auto /dev/hdaX(原来/分区所在的分区号) hd cd hd chroot ./ passwd root 这样可以搞定 3.将本机的硬盘拿下来,挂到其他的linux系统上,采用的办法与第二种相同 rh8中 一. lilo 1. 在出现 lilo: 提示时键入 linux single 画面显示 lilo: linux single 2. 回车可直接进入linux命令行 3. #vi /etc/shadow 将第一行,即以root开头的一行中root:后和下一个:前的内容删除, 第一行将类似于 root::...... 保存 4. #reboot重启,root密码为空 二. grub 1. 在出现grub画面时,用上下键选中你平时启动linux的那一项(别选dos哟),然后按e键 2. 再次用上下键选中你平时启动linux的那一项(类似于kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/),然后按e键 3. 修改你现在见到的命令行,加入single,结果如下: kernel /boot/vmlinuz-2.4.18-14 single ro root=LABEL=/ 4. 回车返回,然后按b键启动,即可直接进入linux命令行 5. #vi /etc/shadow 将第一行,即以root开头的一行中root:后和下一个:前的内容删除, 第一行将类似于 root::...... 保存 6. #reboot重启,root密码为空
麻烦采纳,谢谢!
⑺ linux 怎么编译c的源程序的gcc,编译命令是什么
在Linux下面,如果要编译一个C语言源程序,我们要使用gcc编译器。
先将源文件编译成目标文件:gcc - c hello.c
生成hello.o文件,再将目标文件编译成可执行文件:gcc -o hello hello.o
如:
int main(int argc,char **argv)
{
printf("Hello Linux ");
}
(7)linuxcroot扩展阅读:
在使用GCC编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,这里只介绍其中最基本、最常用的参数。具体可参考GCC Manual。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是编译器所需要的参数,filenames给出相关的文件名称。
网络_gcc
⑻ linux root无法删除文件和文件夹
一般来说,不能删除文件Linux系统都会给出提示。如下图所示,没有权限,所以不能删除/boot目录。
⑼ Linux下的c编程:系统调用
标准的c函数库是所有的编译都要具有的函数库,(实际上还是略有不同),但是这些基本上实现方法略有不同,但是结果和标准是一样的。但是linux的系统调用,调用是linux的系统库,比如说unistd.h下的fork这个是Linux下特有,你在vs上,就没有这个库,也没有这个函数。同样在vs上写c,你可以引入头文件比如windows.h,显然这个库是Linux不具有的。简单说系统调用库根据具体的操作系统环境不同而不同,而c标准库,是所有支持c语言编译器都有的。
⑽ linux下 利用C或C++ 语言调用需要root权限的命令时候,怎么处理。
试试以下这种方式:
1. root用户下将目标程序设置为root:root所有权;
2. 将目标程序设置为所有人可访问chmod 777 APPNAME;或者将目标用户加入root组等方式,使用户可执行该程序;
3. root用户下为目标程序设置UID,chmod u+s APPNAME
4. 执行该程序时自动具备root权限
sudo调用时需要用户口令的情况可通过管道解决,形式如下:
echo "PASSWORD" | sudo -S sh -c " CMD1; CMD2;..."