linux常用shell命令

linux常用shell命令,第1张

linux常用shell命令汇总:

lscpu:查看cpu的统计信息

cat /proc/cpuinfo:查看cpu详细信息

free –m:查看内存情况

cat /etc/meminfo:查看内存详细信息

lsblk:查看硬盘分区分布

df –lh:查看各分区的情况

cat /proc/partitions:查看硬盘和分区

uname –a:查看版本,当前 *** 作系统内核信息

cat /proc/version:查看当前 *** 作系统版本信息

cat /etc/redhat-release:查看系统发行版信息

ifconfig:查看所有网络接口

netstat tnlp:查看所有监听端口

netstat –at:查看所有tcp端口

netstat –au:查看所有udp端口

top:查看系统所有进程的详细信息:比如cpu、内存等信息

hostname:查看计算机名

w:查看活动用户

id:查看指定用户信息

last:查看用户登录日志

rpm –qa:显示所有可安装的程序包

uptime:查看系统运行时间,用户数,负载

ps –ef:查看所有进程

kill -9 进程名:杀死指定进程

scp 本地文件夹 目标机器用户名@目标机器IP:目标目录:拷贝本地文件夹到远程机器上

scp -r本地目录 目标机器用户名@目标机器IP:目标目录:拷贝本地目录到远程机器上

rpm –qa | grep 软件名称:查看本机是否安装了该软件

rpm –ivh xxx.rpm:安装xxx

yum install xxx:在线安装xxx

rpm –e xxx:删除已经安装的xxx

yum repolist all:列出所有仓库

Linux系统的shell作为 *** 作系统的外壳,为用户提供使用 *** 作系统的接口。它是命令语言、命令解释程序及程序设计语言。

shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。

shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中的其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。

Linux常用的shell有哪些?

1、Bourne shell

Bourne shell是一个交换式的命令解释器和命令编程语言。

Bourne shell是标准的UNIX shell,以前常被用来做为管理系统之用。大部分的系统管理命令文件,例如rcstart、stop与shutdown都是Bourne shell的命令档,且在单一使用者模式下以root签入时它常被系统管理者使用。Bourneshell是由AT$T发展的,以简洁、快速著名,Bourne shell提示符号的默认值是$。

2、C shell

C shell是一种比Bourneshell更适合的变种shell,使用的是类C语言,csh是具有C语言风格的一种shell,其内部命令有52个,比较庞大。

C shell是柏克莱大学所开发的,且加入了一些新特性,如命令列历程、别名、内建算术、档名完成和工作控制。对于常在交谈模式下执行shell的使用者而言,他们较喜欢用C

shell但对于系统管理者而言,则较偏好以Bourne shell来做命令档,因为Bourne shell命令档比C shell命令档来的简单及快速。C shell提示符号的默认值是%。

3、korn shell

korn shell是一个Unix shell,它由贝尔实验室的David Korn在二十世纪八十年代早期编写。它完全向上兼容Bourne shell并包含了c shell的很多特性,例如贝尔实验室用户需要的命令编辑。

Korn shell是Bourne shell的超集,由AT&T的David korn所开发。它增加了一些特色,比C shell更为先进。Korn shell的特色包括了可编辑的历程、别名、函式、正则表达式万用字符、内建算术、工作控制、共作处理和特殊的除错功能。Korn shell提示符号的默认值也是$。

姓名:罗学元       学号:21181214375     学院:广州研究院

【嵌牛导读】shell命令解释器该包含哪些部分

【嵌牛鼻子】shell命令解释器该包含哪些部分

【嵌牛提问】shell命令解释器该包含哪些部分

我们所做的这个简单的shell命令解释器可以实现简单的常用的基本命令,如ls、pwd、cd、cd - 、cd ~ 等

根据简单命令的定义,它的第一个参数是要执行的命令,后面的参数作为该命令的参数。

要执行的命令有两种情况:

一种是外部命令: 也就是对应着磁盘上的某个程序,例如 pwd、ls等等。对于这种外部命令,我们首先要到指定的路径下找到它,然后再执行它。

另一种是内部命令:内部命令并不对应磁盘上的程序,例如cd等等,它需要shell自己来决定该如何执行。例如对 cd 命令,shell就应该根据它后面的参数改变当前路径。

对于外部命令,需要创建一个子进程来执行它,本质就是fork+exec

#include <stdio.h>

#include <stdlib.h>

#include <assert.h>

#include <string.h>

#include <pwd.h>

#include <sys/utsname.h>

#include <sys/types.h>

#include <unistd.h>

#define MAX 10

#define STRLEN 128

#define PATH "/bin/" //系统bin路径位置

char OLDPWD[STRLEN]={0}//记录上一次的命令,为了cd -这条命令

//================================================================================

//每次敲回车输出当前所在用户信息

//普通用户和root用户的提示符区别

void Printf_Info()

{

char flag='$'

struct passwd *pw=getpwuid(getuid())

assert(pw!=NULL)

//uid为0则为root用户

if(pw->pw_uid==0)

{

flag='#'

}

struct utsname hostname//主机名

uname(&hostname)

char node[STRLEN]={0}

strcpy(node,hostname.nodename)//获取网络上的名称

char* name=strtok(node,".")

//获取绝对路径

char path[STRLEN]={0}

getcwd(path,STRLEN-1)

char*p=path+strlen(path)//p指向绝对路径的末尾

while(*p!='/')

{

p--

}

//p指向路径末尾往前的第一个‘/’位置处

if(strlen(path)!=1)

{

p++//++前,p->'/'

}

if(strcmp(path,pw->pw_dir)==0)

{

p="~"

}

printf("\033[32mMyBash[%s@%s %s]%c\033[0m",pw->pw_name,name,p,flag)

//  \033[4731mThis is a color test\033[0m  设置打印结果的颜色

    fflush(stdout)

}

//================================================================================

void Mycd(char*path)

{

//第一个字符串为cd而第二为空 如:cd 则结束本轮循环

if(path==NULL)

{

exit(0)

}

//cd ~ 回到用户根目录

if(strcmp(path,"~")==0)

    {

        struct passwd*pw=getpwuid(getuid())

        path=pw->pw_dir

    }

    //cd - 回到上一次的位置

    if(strcmp(path,"-")==0) 

    {

      //若是第一次输入命令,则cd -命令不存在!

        if(strlen(OLDPWD)==0)

        {

            printf("\033[31mMyBash:cd:OLDPWD not set\n\033[0m")

            return

        }

        //否则把上一次的命令给path

        path=OLDPWD

    }

    //getpwd记录当前工作目录的绝对路径

    char oldpwd[STRLEN]={0}

    getcwd(oldpwd,STRLEN-1)

if(-1==chdir(path))//反之则不是空,则通过chdir系统调用进入到该目录中

    {

        char err[128]="\033[31mMybash: cd \033[0m"

        strcat(err,path)

        perror(err)

    }

    //每次执行完cd命令后,把工作路径赋给OLDPWD

    strcpy(OLDPWD,oldpwd)

}

//================================================================================

//命令分割函数

void Strtok_cmd(char*buff,char*myargv[])

{

char *s=strtok(buff," ")//分割输入的字符串

if(s==NULL) //如果s为空,则进入下一轮循环

{

exit(0)

}

myargv[0]=s//把分割出来的第一个字符串放在myargv[0]中

int i=1

while((s=strtok(NULL,""))!=NULL) //把后续分割出来的字符串依次存放在数组中

{

myargv[i++]=s

}

}

//===============================================================

int main()

{

while(1)

{

char buff[128]={0}

Printf_Info()

//从终端获取命令存入buff中

fgets(buff,128,stdin)

buff[strlen(buff)-1]=0

char *myargv[MAX]={0}

//分割输入的命令

Strtok_cmd(buff,myargv)

//如果输入exit则退出循环

if(strcmp(myargv[0],"exit")==0)

{

exit(0)

}

//如果分割出来的第一个字符串为cd

else if(strcmp(myargv[0],"cd")==0)

{

Mycd(myargv[1])

continue

}

//若是系统调用,直接替换fork+exec

pid_t pid=fork()

assert(pid!=-1)

if(pid==0)

{

char path[256]={0}

if(strncmp(myargv[0],"./",2)!=0 &&strncmp(myargv[0],"/",1)!=0)

{

//先把路径放入path中

strcpy(path,PATH)

}

//进行命令拼接,路径+名称

strcat(path,myargv[0])

//替换进程 例如:/bin/ls

execv(path,myargv)

perror("\033[31mexecv error\033[0m")

}

//处理僵死进程

else

{

wait(NULL)

}

}

}

运行结果如下 :

异常处理如下:

若是第一次运行程序,则不能使用cd - 命令,因为此时还没有历史路径

若进入一个不存在的目录则会报错,没有这个文件或目录

若直接输入一个不存在的无法识别的命令,也会报错。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7518735.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存