导航:首页 > 程序命令 > linuxcshell命令

linuxcshell命令

发布时间:2023-03-12 13:15:11

linux常用的shell有哪些

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提示符号的默认值也是$。

② linux下如何用c语言调用shell命令

在c语言中调用shell命令的方法实现。
c程序调用shell脚本共有两种方法
:system()、popen(),分别如下:
system()
不用自己去创建进程,系统已经封装了这一步,直接加入自己的命令即可
popen()
也可以实现执行的命令,比system
开销小
以下分别说明:
1)system(shell命令或shell脚本路径);
system()
会调用fork()产生
子历程,由子历程来调用/bin/sh-c
string来履行
参数string字符串所代表的命令,此命令履行
完后随即返回原调用的历程。在调用system()期间sigchld
信号会被暂时搁置,sigint和sigquit
信号则会被漠视


回值:如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(null),则返回非零值。
如果
system()调用成功
则最后会返回履行
shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因
此最好能再反省
errno
来确认履行
成功

system命令以其简略
高效的作用得到很很广泛
的利用
,下面是一个例子
例:在/tmp/testdir/目录下有shell脚本tsh.sh,内容为
#!/bin/sh
wget
$1
echo
"done!"
2)popen(char
*command,char
*type)
popen()
会调用fork()产生
子历程,然后从子历程中调用/bin/sh
-c来履行
参数command的指令。参数type可应用
“r”代表读取,“w”代表写入。遵循此type值,popen()会建立
管道连到子历程的标准
输出设备
或标准
输入设备
,然后返回一个文件指针。随后历程便可利用
此文件指针来读取子历程的输出设备
或是写入到子历程的标准
输入设备
中。此外,所有应用

件指针(file*)操作的函数也都可以应用
,除了fclose()以外。
返回值:若成功
则返回文件指针,否则返回null,差错
原因存于errno中。注意:在编写具suid/sgid权限的程序时请尽量避免应用
popen(),popen()会继承环境变量,通过环境变量可能会造成系统安全的问题。
例:c程序popentest.c内容如下:
#include
main
{
file
*
fp;
charbuffer[80];
fp=popen(“~/myprogram/test.sh”,”r”);
fgets(buffer,sizeof(buffer),fp);
printf(“%s”,buffer);
pclose(fp);
}

③ shell命令和linux命令一样么

Linux命令就是shell命令。不同的shell有不同的命令。Linux命令包括所有的shell

④ linux下怎样用c语言调用shell命令

C程序调用shell脚本共同拥有三种法子 :system()、popen()、exec系列数call_exec1.c ,
system() 不用你自己去产生进程。它已经封装了,直接增加自己的命令
exec 须要你自己 fork 进程,然后exec 自己的命令

popen() 也能够实现运行你的命令,比system 开销小

方法一、system()的使用。我直接上代码吧

int system(const char *command);

我在/home/book/shell新建一个test.sh文件例如以下:

<span style="font-size:18px;"><span style="font-size:18px;">#!bin/bash
echo $HOME
echo "the is test!"</span></span>

test.c文件例如以下:

<span style="font-size:18px;"><span style="font-size:18px;">#include<stdlib.h>

int main()
{
system("bash /home/book/shell/test.sh"); /* chmod +x test.sh ,路径前面要加上bash */
return 0;
}</span></span>

运行例如以下命令来编译
<span style="font-size:18px;">gcc test.c -o test
</span>

测试命令:

<span style="font-size:18px;">./test</span>

结果例如以下:

<span style="font-size:18px;">/root
the is test!</span>

方法二:popen() 会调用fork()产生 子历程,然后从子历程中调用/bin/sh -c来履行 参数command的指令。参数type可应用 “r”代表读取。“w”代表写入。遵循此type值。popen()会建立 管道连到子历程的标准 输出设备 或标准 输入设备 ,然后返回一个文件指针。
随后历程便可利用 此文件指针来读取子历程的输出设备 或是写入到子历程的标准 输入设备 中。此外,全部应用 文 件指针(FILE*)操作的函数也都能够应用 ,除了fclose()以外。

返回值:若成功 则返回文件指针,否则返回NULL,差错 原因存于errno中。注意:在编写具SUID/SGID权限的程序时请尽量避免应用 popen()。popen()会继承环境变量。通过环境变量可能会造成系统安全的问题

FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);

其它不用改变我们直接改动test.c文件:

#include<stdio.h>
int main()
{
char buffer[80];
FILE *fp=popen("bash /home/book/shell/test.sh","r");
fgets(buffer,sizeof(buffer),fp);
printf("%s",buffer);
pclose(fp);
return 0;
}

方法三:exec函数簇 (我不太懂,别人的。也没有验证。习惯方法一)
须要注意的是exec并非1个函数, 事实上它仅仅是一组函数的统称, 它包含以下6个函数:

#include <unistd.h>

int execl(const char *path, const char *arg, ...);

int execlp(const char *file, const char *arg, ...);

int execle(const char *path, const char *arg, ..., char *const envp[]);

int execv(const char *path, char *const argv[]);

int execvp(const char *file, char *const argv[]);

int execve(const char *path, char *const argv[], char *const envp[];

能够见到这6个函数名字不同, 并且他们用于接受的参数也不同.
实际上他们的功能都是几乎相同的, 由于要用于接受不同的参数所以要用不同的名字区分它们, 毕竟c语言没有函数重载的功能嘛..

可是实际上它们的命名是有规律的:
exec[l or v][p][e]

exec函数里的参数能够分成3个部分, 运行文件部分, 命令参数部分, 环境变量部分.
比如我要运行1个命令 ls -l /home/gateman

运行文件部分就是 "/usr/bin/ls"
命令参赛部分就是 "ls","-l","/home/gateman",NULL 见到是以ls开头 每1个空格都必须分开成2个部分, 并且以NULL结尾的啊.
环境变量部分, 这是1个数组,最后的元素必须是NULL 比如 char * env[] = {"PATH=/home/gateman", "USER=lei", "STATUS=testing", NULL};

好了说下命名规则:
e兴许, 参数必须带环境变量部分, 环境变零部分参数会成为运行exec函数期间的环境变量, 比较少用
l 兴许, 命令参数部分必须以"," 相隔, 最后1个命令参数必须是NULL
v 兴许, 命令参数部分必须是1个以NULL结尾的字符串指针数组的头部指针. 比如char * pstr就是1个字符串的指针, char * pstr[] 就是数组了, 分别指向各个字符串.

关于Linux命令的介绍,看看《linux就该这么学》,具体关于这一章地址3w(dot)linuxprobe/chapter-02(dot)html

p兴许, 运行文件部分能够不带路径, exec函数会在$PATH中找

还有1个注意的是, exec函数会代替运行它的进程, 也就是说, 一旦exec函数运行成功, 它就不会返回了, 进程结束. 可是假设exec函数运行失败, 它会返回失败的信息, 并且进程继续运行后面的代码!

通常exec会放在fork() 函数的子进程部分, 来替代子进程运行啦, 运行成功后子程序就会消失, 可是运行失败的话, 必须用exit()函数来让子进程退出!

⑤ linux命令和shell命令有什么区别啊

shell翻译成壳的意思,它是包裹在Linux内核外层的,一个可通过一系列的Linux命令对操作系统发出相关指令的人机界面。shell可以通过其条件语句和循环语句等,把一系列Linux命令结合在一起,形成一个相当于面向过程的程序,即shell
script,从而实现一些复杂的功能。
shell可以说是Linux命令集的概称,属于命令行的人机界面。shell是一个用C语言编写的程序,它是用户使用Linux的桥梁。shell既是一个命令语言,也是一个程序设计语言;其次,shell也指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
由此可见,shell相当于经过装饰的命令行,它与命令行一样,都能操作Linux;但是shell是面向过程的,相当于有了一定的逻辑和过程,而命令行只是单一的操作。
linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
shell与linux命令的区别
1、直接在命令行执行,就是在当前的shell环境下执行,比如涉及到一些环境变量的时候,必须在当前shell环境里执行。
2、在脚本执行的话,会fork一个子进程,所有操作都在子进程中进行。如果涉及到一些在脚本里设置环境变量的东西,脚本结束了,环境变量就消失了,如果是修改环境变量的话,需要特别注意。
3、shell可以重复或批量地进行一些命令,你也可以把自己要重复执行的命令写到脚本里面执行,而命令行的话就需要一个一个的输入命令,比较麻烦。

⑥ linux shell命令

在linux系统中常用的shell命令主要有6个,下面是具体的介绍:
1、mkdirnewdir:新建目录。
2、touchfilename:新建文件。
3、vi/vimfilename:编辑文件。
4、wc[-lwm] :统计行数、单词数、字符数。
5、–hsfilename:查看文件大小。
6、lsof–i:port:查看监听port端口的进程。

⑦ LINUX快速入门第八章:Shell基础

我们平时所说的 Shell 可以理解为 Linux 系统提供给用户的使用界面。Shell 为用户提供了输入命令和参数并可得到命令执行结果的环境。当一个用户登录 Linux 之后,系统初始化程序 init 就根据 /etc/passwd 文件中的设定,为每个用户运行一个被称为 Shell(外壳)的程序。

确切地说,Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至编写一些程序。

Shell 处在内核与外层应用程序之间,起着协调用户与系统的一致性、在用户与系统之间进行交互的作用。图 1 是 Linux 系统层次结构图,Shell 接收用户输入的命令,并把用户的命令从类似 abed 的 ASCII 码解释为类似 0101 的机器语言,然后把命令提交到系统内核处理;当内核处理完毕之后,把处理结果再通过 Shell 返回给用户。

换句话说:

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。

Shell 与其他 Linux 命令一样,都是实用程序,但它们之间还是有区别的。一旦用户注册到系统后,Shell 就被系统装入内存并一直运行到用户退出系统为止;而一般命令仅当被调用时,才由系统装入内存执行。

与一般命令相比,Shell 除了是一个命令行解释器,同时还是一门功能强大的编程语言,易编写,易调试,灵活性较强。作为一种命令级语言,Shell 是解释性的,组合功能很强,与操作系统有密切的关系,可以在 Shell 脚本中直接使用系统命令。大多数 Linux 系统的启动相关文件(一般在 /etc/rc.d 目录下)都是使用 Shell 脚本编写的。

同传统的编程语言一样,Shell 提供了很多特性,这些特性可以使 Shell 脚本编程更为有用,如数据变量、参数传递、判断、流程控制、数据输入和输出、子程序及中断处理等。

说了这么多,其实我们在 Linux 中操作的命令行界面就是 Linux 的 Shell,也就是 Bash,但是我们的图形界面是 Shell 吗?其实从广义讲,图形界面当然也是 Shell,因为它同样用来接收用户的操作,并传递到内核进行处理。不过,这里的 Shell 主要指的是 Bash。

Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。

由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。

Shell的分类

目前 Shell 的版本有很多种,如 Bourne Shell、C Shell、Bash、ksh、tcsh 等,它们各有特点,下面简要介绍一下。

最重要的 Shell 是 Bourne Shell,这个命名是为了纪念此 Shell 的发明者 Steven Bourne。从 1979 年起,UNIX 就开始使用 Boume Shell。Bourne Shell 的主文件名为 sh,开发人员便以 sh 作为 Bourne Shell 的主要识别名称。

虽然 Linux 与 UNIX 一样,可以支持多种 Shell,但 Boume Shell 的重要地位至今仍然没有改变,许多 UNIX 系统中仍然使用 sh 作为重要的管理工具。它的工作从开机到关机,几乎无所不包。在 Linux 中,用户 Shell 主要是 Bash,但在启动脚本、编辑等很多工作中仍然使用 Bourne Shell。

C Shell 是广为流行的 Shell 变种。C Shell 主要在 BSD 版的 UNIX 系统中使用,发明者是柏克莱大学的 Bill Joy。C Shell 因为其语法和 C 语言类似而得名,这也使得 UNIX 的系统工程师在学习 C Shell 时感到相当方便。

Bourne Shell 和 C Shell 形成了 Shell 的两大主流派别,后来的变种大都吸取这两种 Shell 的特点,如 Korn、 tcsh 及 Bash。

Bash Shell 是 GNU 计划的重要工具之一,也是 GNU 系统中标准的 Shell。Bash 与 sh 兼容,所以许多早期开发出来的 Bourne Shell 程序都可以继续在 Bash 中运行。现在使用的 Linux 就使用 Bash 作为用户的基本 Shell。

Bash 于 1988 年发布,并在 1995-1996年推出Bash 2.0。在这之前,广为使用的版本是1.14,Bash 2.0增加了许多新的功能,以及具备更好的兼容性。表 2 中详细列出了各版本的具体情况。

注意,Shell 的两种主要语法类型有 Bourne 和 C,这两种语法彼此不兼容。Boume 家族主要包括 sh、ksh、Bash、psh、zsh;C 家族主要包括 csh、tcsh(Bash 和 zsh 在不同程序上支持 csh 的语法)。

本章讲述的脚本编程就是在 Bash 环境中进行的。不过,在 Linux 中除了可以支持 Bash,还可以支持很多其他的 Shell。我们可以通过 /etc/shells 文件来査询 Linux 支持的 Shell。命令如下:

在 Linux 中,这些 Shell 是可以任意切换的,命令如下:

用户信息文件 /etc/passwd 的最后一列就是这个用户的登录 Shell。命令如下:

大家可以看到,root 用户和其他可以登录系统的普通用户的登录 Shell 都是 /bin/bash,也就是 Linux 的标准 Shell,所以这些用户登录之后可以执行权限允许范围内的所有命令。不过,所有的系统用户(伪用户)因为登录 Shell 是 /sbin/ndogin,所以不能登录系统。

笔记:

sh/bash/csh/Tcsh/ksh/pdksh等shell的区别

⑧ Linux shell常用命令

Linux shell常用命令汇总

对于经常使用linux系统的博主来说,基本常用的shell命令是少不了的,下面为大家总结了Linux shell的常用命令,希望对大家有所帮助!

1.检查远程端口是否对bash开放:

echo >/dev/tcp/8.8.8.8/53 && echo "open"

2.让进程转入后台:

Ctrl + z

3、将进程转到前台:

fg

4.产生随机的十六进制数,其中n是字符数:

openssl rand -hex n

5.在当前shell里执行一个文件里的命令:

source /home/user/file.name

6.截取前5个字符:

${variable:0:5}

7.SSH debug 模式:

ssh -vvv user@ip_address

8.SSH with pem key:

ssh user@ip_address -i key.pem

9.用wget抓取完整的网站目录结构,存放到本地目录中:

wget -r --no-parent --reject "index.html*" http://hostname/ -P /home/user/dirs

10.一次创建多个目录:

mkdir -p /home/user/{test,test1,test2}

11.列出包括子进程的进程树:

ps axwef

12.创建 war 文件:

jar -cvf name.war file

13.测试硬盘写入速度:

dd if=/dev/zero of=/tmp/output.img bs=8k count=256k; rm -rf /tmp/output.img

14.测试硬盘读取速度:

hdparm -Tt /dev/sda

15.获取文本的md5 hash:

echo -n "text" | md5sum

16.检查xml格式:

xmllint --noout file.xml

17.将tar.gz提取到新目录里:

tar zxvf package.tar.gz -C new_dir

18.使用curl获取HTTP头信息:

curl -I http://www.example.com

19.修改文件或目录的时间戳(YYMMDDhhmm):

touch -t 0712250000 file

20.用wget命令执行ftp下载:

wget -m ftp://username:password@hostname

21.生成随机密码(例子里是16个字符长):

LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;

22.快速备份一个文件:

cp some_file_name{,.bkp}

23.访问Windows共享目录:

smbclient -U "DOMAIN\user" //dc.domain.com/share/test/dir

24.执行历史记录里的命令(这里是第100行):

!100

25.解压:

unzip package_name.zip -d dir_name

26.输入多行文字(CTRL + d 退出):

cat > test.txt

27.创建空文件或清空一个现有文件:

\> test.txt

28.与Ubuntu NTP server同步时间:

ntpdate ntp.ubuntu.com

29.用netstat显示所有tcp4监听端口:

netstat -lnt4 | awk '{print $4}' | cut -f2 -d: | grep -o '[0-9]*'

30.qcow2镜像文件转换:

qemu-img convert -f qcow2 -O raw precise-server-cloudimg-amd64-disk1.img \precise-server-cloudimg-amd64-disk1.raw

31.重复运行文件,显示其输出(缺省是2秒一次):

watch ps -ef

32.所有用户列表:

getent passwd

33.Mount root in read/write mode:

mount -o remount,rw /

34.挂载一个目录(这是不能使用链接的情况):

mount --bind /source /destination

35.动态更新DNS server:

nsupdate < <eof p=""> </eof>

update add $HOST 86400 A $IP

send

EOF

36.递归grep所有目录:

grep -r "some_text" /path/to/dir

37.列出前10个最大的文件:

lsof / | awk '{ if($7 > 1048576) print $7/1048576 "MB "$9 }' | sort -n -u | tail

39.打开Vim并跳到文件末:

vim + some_file_name

40.Git 克隆指定分支(master):

git clone [email protected]:name/app.git -b master

41.Git 切换到其它分支(develop):

git checkout develop

42.Git 删除分支(myfeature):

git branch -d myfeature

43.Git 删除远程分支

git push origin :branchName

44.Git 将新分支推送到远程服务器:

git push -u origin mynewfeature

45.打印历史记录中最后一次cat命令:

!cat:p

46.运行历史记录里最后一次cat命令:

!cat

47.找出/home/user下所有空子目录:

echo >/dev/tcp/8.8.8.8/53 && echo "open"

1.检查远程端口是否对bash开放:

find /home/user -maxdepth 1 -type d -empty

48.获取test.txt文件中第50-60行内容:

< test.txt sed -n '50,60p'

49.运行最后一个命令(如果最后一个命令是mkdir /root/test, 下面将会运行: sudo mkdir /root/test):

sudo !!

50.创建临时RAM文件系统 – ramdisk (先创建/tmpram目录):

mount -t tmpfs tmpfs /tmpram -o size=512m

51.Grep whole words:

grep -w "name" test.txt

52.在需要提升权限的.情况下往一个文件里追加文本:

echo "some text" | sudo tee -a /path/file

53.列出所有kill signal参数:

kill -l

54.在bash历史记录里禁止记录最后一次会话:

kill -9 $$

55.扫描网络寻找开放的端口:

nmap -p 8081 172.20.0.0/16

56.设置git email:

git config --global user.email "[email protected]"

57.To sync with master if you have unpublished commits:

git pull --rebase origin master

58.将所有文件名中含有”txt”的文件移入/home/user目录:

find -iname "*txt*" -exec mv -v {} /home/user \;

59.将文件按行并列显示:

paste test.txt test1.txt

60.shell里的进度条:

pv data.log

61.使用netcat将数据发送到Graphite server:

echo "hosts.sampleHost 10 `date +%s`" | nc 192.168.200.2 3000

62.将tabs转换成空格:

expand test.txt > test1.txt

63.Skip bash history:

< space >cmd

64.去之前的工作目录:

cd -

65.拆分大体积的tar.gz文件(每个100MB),然后合并回去:

split –b 100m /path/to/large/archive /path/to/output/files

cat files* > archive

66.使用curl获取HTTP status code:

curl -sL -w "%{http_code}\\n" www.example.com -o /dev/null

67.设置root密码,强化MySQL安全安装:

/usr/bin/mysql_secure_installation

68.当Ctrl + c不好使时:

Ctrl + \

69.获取文件owner:

stat -c %U file.txt

70.block设备列表:

lsblk -f

71.找出文件名结尾有空格的文件:

find . -type f -exec egrep -l " +$" {} \;

72.找出文件名有tab缩进符的文件

find . -type f -exec egrep -l $'\t' {} \;

73.用”=”打印出横线:全选复制放进笔记

printf '%100s\n' | tr ' ' = ;

阅读全文

与linuxcshell命令相关的资料

热点内容
如何登录别人的服务器 浏览:624
调度系统软件python 浏览:205
微信大转盘抽奖源码 浏览:497
压缩机损坏的表现 浏览:862
同步数据服务器怎么用 浏览:634
163邮箱服务器的ip地址 浏览:50
服务器跟域是什么 浏览:128
rails启动命令 浏览:465
logistic命令怎么用 浏览:738
c语言点滴pdf 浏览:747
linuxrtc编程 浏览:258
linux打包并压缩命令 浏览:644
aes加密的证书格式 浏览:99
oracledbcalinux 浏览:844
酬勤任务app怎么被特邀 浏览:199
android应用文件夹 浏览:1002
平面设计法则pdf 浏览:339
3d圆角命令怎么用 浏览:569
程序员买意外险还是重疾险 浏览:621
辽宁的dns服务器地址云空间 浏览:448