linux命令实现的 linux实施常用命令

怎么用C语言实现linux的命令命令是查询当前登录linux命令实现的的每个用户,它的输出包括用户名、终端类型、登录日期及远程主机,在Linux系统中输入who命令输出如下linux命令实现的:
我们先man一下who,在帮助文档里可以看到,who命令是读取/var/run/utmp文件来得到以上信息的 。
我们再man一下utmp,知道utmp这个文件,是二进制文件,里面保存的是结构体数组,这些数组是struct utmp结构体的 。
struct utmp {
shortut_type;
pid_tut_pid;
charut_line[UT_LINESIZE];
charut_id[4];
charut_user[UT_NAMESIZE];
charut_host[UT_HOSTSIZE];
struct {
int32_t tv_sec;
int32_t tv_usec;
} ut_tv;
/***等等***/
};
要实现who只需要把utmp文件的所有结构体扫描过一遍,把需要的信息显示出来就可以了,我们需要的信息有ut_user、ut_line、ut_tv、ut_host 。
老师给的初始代码linux命令实现的:who1.c运行结果如下linux命令实现的:
需要注意的是utmp中所保存的时间是以秒和微妙来计算的,所以我们需要把这个时间转换为我们能看懂的时间,利用命令man -k time | grep 3搜索C语言中和时间相关的函数:
经过搜索发现了一个ctime()函数,似乎可以满足我们的需求,于是对代码中关于时间的printf进行修改:
printf("%s",ctime(utbufp-ut_time));
编译运行发现出来的结果虽然已经转换成了我们能看懂的时间格式,但是很明显这个时间是错的:
搜索一下ut_time这个宏,发现它被定义为int32_t类型:
但是ctime()函数中要求参数的类型是time_t类型,所以重新定义一下类型,编译运行之后,发现时间已经改成了正确的 , 但是发现()中的内容被换行了,猜想ctime()函数的返回值可能自动在最后补了一个字符\n:
一开始想通过\r\b来实现“退行”,但实践后发现并不可?。詈罂悸堑街苯有薷淖址凶詈笠桓鲎址猏0,让其字符串结束,使输出达到与系统who命令一样的效果,即在输出语句前添加如下代码:
cp[strlen(cp)-1] = '\0'
最后编译执行效果,发现解决了该问题:
虽然能看出基本上和who指令的执行结果一致,但是并非完全一样,主要在两点 , 第一是时间格式不一样,第二个是比who执行的结果多了几条,需要注意的是utmp中保存的用户,不仅仅是已经登陆的用户,还有系统的其他服务所需要的“用户”,所以在显出所有登陆用户的时候 , 应该过滤掉其他用户,只保留登陆用户 。我们可以通过ut_type来区别,登陆用户的ut_type是USER_PROCESS 。
先用if语句对执行结果进行过滤,效果如下:
接着解决时间格式问题 , 利用man命令收到了两个非常有用的函数:localtime()和strftime(),localtime()是把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,strftime()则是用来定义时间格式的,如:年-月-日,利用这两个函数对时间进行修改后,结果显示终于和系统中who命令一模一样:
最终完整的代码如下:
#include stdio.h
#include stdlib.h
#include utmp.h
#include fcntl.h
#include unistd.h
#include time.h
#define SHOWHOST
void show_time(long timeval){
char format_time[40];
struct tm *cp;
cp = localtime(timeval);
strftime(format_time,40,"%F %R",cp);
printf("%s",format_time);
}
int show_info( struct utmp *utbufp )
{
if(utbufp-ut_type == USER_PROCESS){
printf("%-8.8s", utbufp-ut_name);
printf(" ");
printf("%-8.8s", utbufp-ut_line);
printf("");
show_time(utbufp-ut_time);
printf(" ");
#ifdefSHOWHOST
printf("(%s)", utbufp-ut_host);
#endif
printf("\n");
}
return 0;
}
int main()
{
struct utmpcurrent_record;
intutmpfd;
intreclen = sizeof(current_record);
if ( (utmpfd = open(UTMP_FILE, O_RDONLY)) == -1 ){
perror( UTMP_FILE );
exit(1);
}
while ( read(utmpfd, current_record, reclen) == reclen )
show_info(current_record);
close(utmpfd);
return 0;
}
linux中,有哪些命令是比较好用的呢?1.列出文件清单命令:ls
ls命令能够列出当前目录下linux命令实现的的所有内容 。ls 命令linux命令实现的的执行方式为:
# ls [-选项] [文件名或者目录名]
进入到Linux命令行中后linux命令实现的 , linux命令实现的我们至少要知道当前所处的位置有哪些内容linux命令实现的 , 这些信息就可以使用ls命令来获得 。
在Linux中,ls命令是最常使用的命令之一 , 因为在命令行下要随时查看目录内容 。如果不加任何选项的话 , ls命令仅列出当前目录下的文件和目录名 , 例如,想要查看/etc目录下的内容,可以使用下列命令:
# ls /etc
如果想要列出当前目录下所有文件,则可以使用下列命令:
# ls -a
2、cat命令
功能:在标准输出上显示文件 。
语法:cat [-vTEuAte] 文件
例子: cat example.txt
cat -A exam2.txt
cat file1 file2file2
3、more命令
功能:在终端屏幕按屏显示文本文件 。
语法: more [-pcdls] 文件
例子: more example.c
more -dc example.c
more -c -10 example.c
4、less命令
less命令的功能几乎和more命令一样,也是用来按页显示文件,不同之处在于less命令在显示文件时允许用户既
可以向前又可以向后翻阅文件 。
5、head命令
功能:显示指定文件的前若干行 。缺省设置为显示10行
语法:head [-n] 文件
例子: head example.c
head -3 example.c
6、tail命令
功能:显示指定文件的末尾若干行 。缺省设置为显示10行
语法:tail [/ - num ] [参数] 文件
+num 从第num行以后开始显示 。- num 从距文件尾num行处开始显示 。
例子: tail example.c
tail -4 example.c
7、grep、fgrep和egrep命令
功能:
这组命令以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名 。grep命令一次只能搜索一个指定的模式;egrep命令检索扩展的正则表达式(包括表达式组和可选项);fgrep命令检索固定字符串,它不识别正则表达式,是快速搜索命令 。
语法:
grep [-EFbcihlnvxef] [查找模式] [文件名1,文件名2 , ……]
egrep [选项] [查找模式] [文件名1 , 文件名2,……]
fgrep [选项] [查找模式] [文件名1 , 文件名2,……]
例子: grep "text file" example
grep data *
grep goto *.c
Linux命令大全linux命令格式:
说明:command: 命令名,相应功能的英文单词或单词的缩写 [-options]:选项,可用来对命令进行控制,也可以省略,[]代表可选 parameter1 …:传给命令的参数:可以是零个一个或多个
一般是linux命令自带的帮助信息
如:
man是linux提供的一个手册,包含了绝大部分的命令、函数使用说明
该手册分成很多章节(section) , 使用man时可以指定不同的章节来浏览 。
例:man ls ; man 2 printf
man中各个section意义如下:
man是按照手册的章节号的顺序进行搜索的 。
man设置了如下的功能键:
在敲出命令的前几个字母的同时 , 按下tab键,系统会自动帮我们补全命令
当系统执行过一些命令后,可按上下键翻看以前的命令 , history将执行过的命令列举出来
ls是英文单词list的简写,其功能为列出目录的内容,是用户最常用的命令之一,它类似于DOS下的dir命令 。
Linux文件或者目录名称最长可以有265个字符,“.”代表当前目录 , “..”代表上一级目录,以“.”开头的文件为隐藏文件,需要用 -a 参数才能显示 。
ls常用参数:
Linux允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中 。
如:lstest.txt ( test.txt 如果不存在,则创建 , 存在则覆盖其内容 )
注意: 输出重定向会覆盖原来的内容,输出重定向则会追加到文件的尾部 。
查看内容时,在信息过长无法在一屏上显示时,会出现快速滚屏,使得用户无法看清文件的内容,此时可以使用more命令,每次只显示一页,按下空格键可以显示下一页,按下q键退出显示,按下h键可以获取帮助 。
管道:一个命令的输出可以通过管道做为另一个命令的输入 。
管道我们可以理解现实生活中的管子,管子的一头塞东西进去,另一头取出来,这里“ | ”的左右分为两端,左端塞东西(写),右端取东西(读) 。
clear作用为清除终端上的显示(类似于DOS的cls清屏功能),也可使用快捷键:Ctrll ( “l” 为字母 ) 。
在使用Unix/Linux的时候,经常需要更换工作目录 。cd命令可以帮助用户切换工作目录 。Linux所有的目录和文件名大小写敏感
cd后面可跟绝对路径,也可以跟相对路径 。如果省略目录,则默认切换到当前用户的主目录 。
使用pwd命令可以显示当前的工作目录,该命令很简单 , 直接输入pwd即可 , 后面不带参数 。
通过mkdir命令可以创建一个新的目录 。参数-p可递归创建目录 。
需要注意的是新建目录的名称不能与当前目录中已有的目录或文件同名,并且目录创建者必须对当前目录具有写权限 。
可使用rmdir命令删除一个目录 。必须离开目录,并且目录必须为空目录,不然提示删除失败 。
可通过rm删除文件或目录 。使用rm命令要小心,因为文件删除后不能恢复 。为了防止文件误删 , 可以在rm后使用-i参数以逐个确认要删除的文件 。
常用参数及含义如下表所示:
Linux链接文件类似于Windows下的快捷方式 。
链接文件分为软链接和硬链接 。
软链接:软链接不占用磁盘空间,源文件删除则软链接失效 。
硬链接:硬链接只能链接普通文件,不能链接目录 。
使用格式:
如果没有-s选项代表建立一个硬链接文件,两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在,所以-s选项是更常见的形式 。
注意:如果软链接文件和源文件不在同一个目录 , 源文件要使用绝对路径,不能使用相对路径 。
Linux系统中grep命令是一种强大的文本搜索工具,grep允许对文本文件进行模式查找 。如果找到匹配模式,grep打印包含模式的所有行 。
grep一般格式为:
在grep命令中输入字符串参数时,最好引号或双引号括起来 。例如:grep‘a ’1.txt 。
常用选项说明:
find命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件 , 也可以用来搜索特定用户属主的文件 。
常用用法:
cp命令的功能是将给出的文件或目录复制到另一个文件或目录中,相当于DOS下的copy命令 。
常用选项说明:
用户可以使用mv命令来移动文件或目录,也可以给文件或目录重命名 。
常用选项说明:
计算机中的数据经常需要备份,tar是Unix/Linux中最常用的备份工具 , 此命令可以把一系列文件归档到一个大文件中,也可以把档案文件解开以恢复数据 。
tar使用格式 tar [参数] 打包文件名 文件
tar命令很特殊 , 其参数前面可以使用“-”,也可以不使用 。
常用参数:
tar与gzip命令结合使用实现文件打包、压缩 。tar只负责打包文件,但不压缩,用gzip压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz 。
gzip使用格式如下:
gzip [选项] 被压缩文件
常用选项:
tar与bzip2命令结合使用实现文件打包、压缩(用法和gzip一样) 。
tar只负责打包文件,但不压缩,用bzip2压缩tar打包后的文件,其扩展名一般用xxxx.tar.gz2 。
在tar命令中增加一个选项(-j)可以调用bzip2实现了一个压缩的功能,实行一个先打包后压缩的过程 。
压缩用法:tar -jcvf 压缩包包名 文件...(tar jcvf bk.tar.bz2 *.c)
解压用法:tar -jxvf 压缩包包名 (tar jxvf bk.tar.bz2)
通过zip压缩文件的目标文件不需要指定扩展名,默认扩展名为zip 。
压缩文件:zip [-r] 目标文件(没有扩展名) 源文件
解压文件:unzip -d 解压后目录文件 压缩文件
whoami该命令用户查看当前系统当前账号的用户名 。可通过cat /etc/passwd查看系统用户信息 。
由于系统管理员通常需要使用多种身份登录系统,例如通常使用普通用户登录系统 , 然后再以su命令切换到root身份对传统进行管理 。这时候就可以使用whoami来查看当前用户的身份 。
who命令用于查看当前所有登录系统的用户信息 。
常用选项:
如果是图形界面,退出当前终端;
如果是使用ssh远程登录 , 退出登陆账户;
如果是切换后的登陆用户,退出则返回上一个登陆账号 。
在Unix/Linux中添加用户账号可以使用adduser或useradd命令 , 因为adduser命令是指向useradd命令的一个链接,因此,这两个命令的使用格式完全一样 。
useradd命令的使用格式如下:
useradd [参数] 新建用户账号
在Unix/Linux中,超级用户可以使用passwd命令为普通用户设置或修改用户口令 。用户也可以直接使用该命令来修改自己的口令,而无需在命令后面使用用户名 。
可以通过su命令切换用户,su后面可以加“-” 。su和su –命令不同之处在于,su -切换到对应的用户时会将当前的工作目录自动转换到切换后的用户主目录:
注意:如果是ubuntu平台 , 需要在命令前加“sudo”,如果在某些操作需要管理员才能操作,ubuntu无需切换到root用户即可操作 , 只需加“sudo”即可 。sudo是ubuntu平台下允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,减少了root 用户的登陆和管理时间,提高了安全性 。
方法一:
方法二:
groupadd 新建组账号 groupdel 组账号 cat /etc/group 查看用户组
使用方法:usermod -g 用户组 用户名
新创建的用户,默认不能sudo,需要进行一下操作
-g用来制定这个用户默认的用户组
-G一般配合'-a'来完成向其它组添加
chmod 修改文件权限有两种使用格式:字母法与数字法 。
字母法:chmod u/g/o/a/-/= rwx 文件
cal命令用于查看当前日历,-y显示整年日历
设置时间格式(需要管理员权限):
date [MMDDhhmm[[CC]YY][.ss]]format
CC为年前两位yy为年的后两位,前两位的mm为月,后两位的mm为分钟 , dd为天,hh为小时,ss为秒 。如: date 010203042016.55 。
显示时间格式(date ' %y,%m,%d,%H,%M,%S'):
进程是一个具有一定独立功能的程序,它是操作系统动态执行的基本单元 。
ps命令可以查看进程的详细状况 , 常用选项(选项可以不加“-”)如下:
top命令用来动态显示运行中的进程 。top命令能够在运行后,在指定的时间间隔更新显示信息 。可以在使用top命令时加上-d 来指定显示信息更新的时间间隔 。
在top命令执行后,可以按下按键得到对显示的结果进行排序:
kill命令指定进程号的进程,需要配合 ps 使用 。有些进程不能直接杀死,这时候我们需要加一个参数“ -9 ”,“ -9 ” 代表强制结束.
使用格式:
kill [-signal] pid
df命令用于检测文件系统的磁盘空间占用和空余情况,可以显示所有文件系统对节点和磁盘块的使用情况 。
du命令用于统计目录或文件所占磁盘空间的大小,该命令的执行结果与df类似,du更侧重于磁盘的使用状况 。
du命令的使用格式如下: du [选项] 目录或文件名
【linux命令实现的 linux实施常用命令】关于linux命令实现的和linux实施常用命令的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读