shell的学习和命令使用入门

介绍:

脚本语言(Script Language)是相对于编译型语言而言的,它是为了缩短编译型语言编写—编译—链接—运行(Edit-Compile-Link-Run)过程而创建的计算机编程语言。由于脚本语言常常运行于底层,所处理的是字节、整数、浮点数或其他机器层的对象,因而脚本语言是低级程序设计语言。如C\C++、Ada、Java、C#等都属于编译型语言,也可称为高级程序设计语言,这类语言所编写的程序需要经过编译,将源代码转化为目标代码才能运行。而脚本语言往往是解释运行而非编译,即由解释器(Interpreter)读入脚本程序代码,将其转换成内部的形式执行,而解释器本身则是编译型程序。 脚本语言的好处是简单、易学易用,适合处理文件和目录之类的对象,以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则,脚本语言的特性可以总结为以下4个方面。
● 语法和结构通常比较简单。
● 学习和使用通常比较简单。
● 通常以容易修改程序的“解释”作为运行方式,而不需要“编译”。
● 程序的开发产能优于运行效能。
脚本语言的灵活性是以执行效率为代价的,脚本语言的执行效率通常不如编译型语言。当然,脚本语言一般不适用于大型的项目、计算复杂的工程或有高级需求的应用软件,它适用于系统管理、文本处理等方面完成特定功能的常用的小工具或小程序。

1.cat /etc/shells

查看电脑安装的linux shell种类
在这里插入图片描述
2.ls -l /etc/sh*
用于列出/etc目录下以sh开头文件的详细信息
分号可以用于分隔同一行内多条命令
在这里插入图片描述

编写并执行一个shell脚本

需要使当前用户具备执行该脚本文件的权限
先编辑一个简单的脚本:

#!/bin/bash
date #显示当前日期
who  #当前登陆的用户

文件的第1行是“#!/bin/bash”,“#!”符号称为“Sha-bang”符号,是Shell脚本的起始符号,“#!”符号是指定一个文件类型的特殊标记,它告诉Linux系统这个文件的执行需要指定一个解释器。“#!”符号之后是一个路径名,这个路径名指明了解释器在系统中的位置,对于一般的Shell脚本而言,解释器是bash,也可以是sh,即用下面两种方式作为脚本的第1行都是正确的:
#/bin/bash
#/bin/sh

授予权限:

3.chmod u+x who.sh

执行
./who.sh
在这里插入图片描述
4.ls /home
查看用户
5.sudo tail -l /etc/shadow #查看加密后的用户账号及密码
在这里插入图片描述
6. ls -l

列出所在位置的目录下所有文件和目录的详细信息
在这里插入图片描述

cp who.sh PyTorch-YOLOv3

cp复制一个文件到另一个目录中

cp -a who.sh PyTorch-YOLOv3

复制一个文件到另一个目录中,且不改变权限和修改日期

cp -r pkgconfig 照片

将目录的所有内容全部复制到另一个目录中

在这里插入图片描述

mv:移动文件

mv [option] [source] [destination]
mv -p #移动时保留权限
mv -i #交互方式操作,如果mv将导致对已存在的目标文件覆盖,此时系统询问是否重写
mv -f #禁止交互操作

rm:删除

rm-rf #删除目录以及目录下所有文件

mkdir:创建目录

mkdir -m 777 tsk #创建目录且指定权限
mkdir -p testdir/test #创建父目录和需要创建的子目录

-m 777指定了目录的读写执行权限
在这里插入图片描述
rmdir:删除目录命令

cd ~回到主目录
cd - 回到上次访问的目录
在这里插入图片描述

chmod:修改权限

chmod u+x,g+w testvim #修改testvim文件的权限为主可读可写可执行 同组用户可读可写

u :表示用户(user 即文件或目录所有者)

g:表示同组
o:其他用户
a:所有用户

find

对于查找到的结果,find命令可以有三种处理方式,print仅将结果输出到屏幕,而exec和ok可以对结果进一步处理,区别在于:exec直接进行处理,而ok在处理之前出现提示信息,供用户最终确定是否执行该操作。

find . -name 'p*' -perm 744 -prin

第1条命令查找当前目录下文件名以t开头的,且文件属主具有读、写、执行权限的文件,命令用“.”表示当前目录,-name′t*′表示以t开头的文件名,其中的“*”字符表示任意字符,这种用法称为通配,本书第3章将会介绍这一概念。-perm 744表示文件属主具有读、写、执行权限,744是表示文件权限的数字设定法。第1条命令结果的./表示当前目录下的文件,./DEBUG则表示子目录DEBUG下的文件。
在这里插入图片描述

更改时间距今5天内的文件,使用了-mtime-n用法。

find . -mtime -5 -print

删除某目录下更改时间距今3天内的所有文件:

find /var/log -mtime -3 -ok rm {} \;

ln -s

它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件。当 我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的 目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;第二,ln的链接又软链接 和硬链接两种,软链接就是ln -s ** *,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln * **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
如果你用ls察看一个目录时,发现有的文件后面有一个@的符号,那就是一个用ln命令生成的文件,用ls -l命令去察看,就可以看到显示的link的路径了。

ln -s /www/server/mysql /usr/local/mysql
export PATH= P A T H : / u s r / l o c a l / m y s q l / b i n / e c h o ′ e x p o r t P A T H = PATH:/usr/local/mysql/bin/ echo 'export PATH = PATH:/usr/local/mysql/bin/echoexportPATH=PATH:/usr/local/mysql/bin/’ >> /etc/profile
tail -l /etc/profile #查看是否环境变量配置成功添加到了/etc/profile中

vim

插入模式(Insert mode) 在一般模式按下i、o、a等字母都可以进入编辑模式,在此模式下,vim将用户的输入插入到当前光标位置,修改暂时保存到缓冲区,按Esc键则从编辑模式退回到一般模式。

grep

grep 是Global search Regular Expression and Print out the line的简称,即全面搜索正则表达式,并把行打印出来。grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来,grep也是Linux中最广泛使用的命令之一。
在这里插入图片描述
grep命令的模式十分灵活,可以是字符串,也可以是变量,还可以是正则表达式。需要说明的是,无论模式是何种形式,只要模式中包含空格,就需要使用双引号将模式引起来,如果不加双引号,空格后的单词容易被误认为是文件名,如普通字符串为“hello world”,grep hello world命令就将world认为是文件名,因此,grep“hello world”filename才是正确的写法。大部分情况下,使用单引号将模式引起来也是可以的

nohup 命令

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。

nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

使用权限
所有使用者

语法格式
nohup Command [ Arg … ] [ & ]
参数说明:
Command:要执行的命令。

Arg:一些参数,可以指定输出文件。

&:让命令在后台执行,终端退出后命令仍旧执行。

实例
以下命令在后台执行 root 目录下的 runoob.sh 脚本:

nohup /root/runoob.sh &
在终端如果看到以下输出说明运行成功:

appending output to nohup.out
这时我们打开 root 目录 可以看到生成了 nohup.out 文件。

如果要停止运行,你需要使用以下命令查找到 nohup 运行脚本到 PID,然后使用 kill 命令来删除:

ps -aux | grep “runoob.sh”
参数说明:

a : 显示所有程序
u : 以用户为主的格式来显示
x : 显示所有程序,不区分终端机
另外也可以使用 ps -def | grep “runoob.sh” 命令来查找。

找到 PID 后,就可以使用 kill PID 来删除。

kill -9 进程号PID
以下命令在后台执行 root 目录下的 runoob.sh 脚本,并重定向输入到 runoob.log 文件:

nohup /root/runoob.sh > runoob.log 2>&1 &
2>&1 解释:

将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。

0 – stdin (standard input,标准输入)
1 – stdout (standard output,标准输出)
2 – stderr (standard error,标准错误输出)

touch命令

用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

ls -l 可以显示档案的时间记录。

语法
touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][–help][–version][文件或目录…]
参数说明:
a 改变档案的读取时间记录。
m 改变档案的修改时间记录。
c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
f 不使用,是为了与其他 unix 系统的相容性而保留。
r 使用参考档的时间记录,与 --file 的效果一样。
d 设定时间与日期,可以使用各种不同的格式。
t 设定档案的时间记录,格式与 date 指令相同。
–no-create 不会建立新档案。
–help 列出指令格式。
–version 列出版本讯息。
实例
使用指令"touch"修改文件"testfile"的时间属性为当前系统时间,输入如下命令:

$ touch testfile #修改文件的时间属性
首先,使用ls命令查看testfile文件的属性,如下所示:

$ ls -l testfile #查看文件的时间属性
#原来文件的修改时间为16:09
-rw-r–r-- 1 hdd hdd 55 2011-08-22 16:09 testfile
执行指令"touch"修改文件属性以后,并再次查看该文件的时间属性,如下所示:

$ touch testfile #修改文件时间属性为当前系统时间
$ ls -l testfile #查看文件的时间属性
#修改后文件的时间属性为当前系统时间
-rw-r–r-- 1 hdd hdd 55 2011-08-22 19:53 testfile
使用指令"touch"时,如果指定的文件不存在,则将创建一个新的空白文件。例如,在当前目录下,使用该指令创建一个空白文件"file",输入如下命令:

$ touch file #创建一个名为“file”的新的空白文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值