一 .shell命令
在linux中我们避免不了要和shell命令打交道,今天呢,我就来浅浅的讲一下shell命令。
其实我们在terminal(终端)执行的shell命令可以看做是一个应用程序,就拿ls(list)命令做简单的讲解。当我们在terminal输入ls然后回车之后,系统就会在PATH里面去找,看看是否有该应用程序,如果有,就将该应用程序运行,如果没有就不会执行。那么问题来了,PATH是什么东西呢,其实PATH是指的环境变量,在linux中有很多环境变量,我们可以通过env命令来查看环境变量
其中PATH的环境变量怎么看呢,可以通过echo $PATH来查看
大家可以看到,PATH里面有很多环境变量,其实也就是路径,它们是通过分号(:)来隔开的。回到刚才所说的,我们执行的ls命令,系统就会在PATH所有的环境变量里面去寻找,看看那个环境变量里面有ls这个应用程序。这里我先告诉大家,ls位于/bin/ls
系统找到这个应用程序之后就会执行该应用程序,我们的shell命令也就执行完毕。那么接下来我教大家如何将自己写的应用程序弄成shell命令。
1. 编写程序,并且编译成可执行文件
这个是已经写好的c语言文件,cat命令是展示文件的内容,后续会讲到。
这是将hello.c文件编译成可执行文件,名字为hello,取名大家可根据自己来,我这里比较随意。
ls(list)命令是列出文件,后续也会讲到。大家可以看到有hello这个可执行文件了,在当前目录下是可以执行的,但是我刚才说了,我们要把这个应用程序(我说的可执行文件和应用程序在这里是一样的)在任何一个地方都可以执行,那么我们该怎么办呢??只需要添加一下环境变量即可。下面给大家介绍三种添加环境变量的方式。
2. 添加环境变量
在添加环境变量之前先和大家讲一个pwd命令,这个命令就是可以看到大家当前用户在哪里,pwd(print working direction),大家可以看到我当前用户是mcp,路径是 /home/mcp,那么我后续添加环境变量都是将这个添加进去
方式一 : 执行shell命令 export PATH=$PATH:/home/mcp
这个命令是临时添加环境变量,如果我们将terminal关了,再开一个,那么环境变量就不起作用了。
方式二 : 执行shell命令 sudo gedit /etc/environment 这个命令意思是 sudo:使用root权限 gedit:编辑 /etc/environment文件内容。
大家可以看到这个和我们上文看到的PATH里面的是一样的,然后添加环境变量 :/home/mcp
方式三 : 编辑 /.bashrc,在最后一行添加环境变量(此方式需要先把该终端关闭,然后再启才会生效)
接下来给大家演示
cd /表示切换到根目录,然后执行hello程序,mcp是携带的参数,执行有结果,这里就是当我们执行hello命令,然后系统就会去PATH环境变量里面寻找哪里有hello这个应用程序,最后在/home/mcp里面找到了,就会最终执行
二. 文件常用命令
对于文件我们常用的无非就是增删改查
1.增
mkdir
命令 : mkdir
英文来源 : make directory
功能 : 创建目录
命令格式 : mkdir -p 目录
讲解 : p(parent) 意思是可以创建子目录
示例 :
这里dir1下面还有dir2文件夹
2.删
rm
命令 : rm
英文来源 : remove
功能 : 删除文件或文件夹
命令格式 : rm -r -f 文件/文件夹
讲解 : r(recursive)递归地,简单理解删除所下面的所有文件;f(force) 强制删除
3.改
cp
命令 : cp
英文来源 : copy
功能 : 复制文件
命令格式 : cp -r -f -d 源文件 目标文件
讲解 : r(recursive)递归,简单理解就是复制所有文件,子文件也是复制过去;f(force)强制复制;d如果源文件是链接文件,只复制链接文件不复制实际文件(这个了解一下就好)
4.查
ls
命令 : ls
英文来源 : list
功能 : 列出目录内容
命令格式 : ls -l -h -a 目录
讲解 : l(long)简单理解会展示更多信息 h(human readable)方便我们阅读 a(all)展示所有的文件
cat
命令 : cat
英文来源 : /
功能 : 展示文件内容
命令格式 cat 文件
三 文件权限
一个文件有三种权限,w(write)写的权限,r(read)读的权限,x(exe)执行的权限。还需要补充的就是一个文件权限分几类,持有者对文件的权限,同组对文件的权限,其他用户对文件的权限
大家可以看到,hello有三组rwx,有中间没有代表没有该权限,第一组就是文件持有者,第二组就是同组,第三组就是其他用户。接下来教大家修改文件权限
1.使用数字修改文件权限
rwx用八进制表示,1就是有,0就是没有,示例 111就是是三个权限都有,101就是有读和执行的权限,换成十进制,r就是4,w就是2,x就是1
命令 chmod 数字 文件
chmod : change mode
大家可以看到,我使用了chmod 777 hello这个命令,第一个7是把文件持有者,第二个就是同组,第三个是其他用户,7是怎么来的呢?上文说的r就是4,w就是2,x就是1,三者加起来就是7,如果是6就是4+2说明没有执行权限
递归修改权限 : chmod -R 数字 文件
2. 使用符号类型修改文件权限
命令 : chmod u=,g=,o= 文件
这里我相信大家看这个通俗易懂吧。需要说明一下的是,u代表user文件持有者,g代表group同组的,o代表other其他的
3. 修改文件所属用户组
命令 : chgrp -R 文件
chgrp : change group
我相信大家应该可以看到这个命令了,-R递归修改
示例 : chgrp hu install.log 将install.log文件的用户组改为hy用户组
4. 修改文件持有者
命令 : chown -R 账号名 文件
chown : change owner
四 其他常用shell命令
find命令
命令 : find 目录名 选项 查找条件
讲解 : 如果不写目录名就会在当前文件查找,选项我们一般选择-name,也就是查找名字
示例 : find /home/mcp -name "test1.txt"
find /home/mcp -name "test1.txt" 这里的星号(*)是通配符的意思,学过正则的都应该了解
grep命令
grep 选项 查找模式 文件名
示例 : grep -rwn "abc" *
r(递归) n(行号) w(显示) 在当前目录查找abc字符串,如果查找出来了就显示行号,w表示必须是abc三个整的,比如abce,abc134等等之类都不可以
tar命令
压缩命令 : tar c(jz)f 文件名.tar.(gz,bz) 文件
c(create) : 用来创建生成的文件包
jz : j表示使用bzip2来压缩,z表示用gipz来压缩,这是两种不同的压缩方式而已,知道就好
f(file) : 表示文件
如果前面使用gzip压缩,后面文件后缀使用tar.gz;如果使用bzip2压缩,后续文件后缀使用bz
解压命令 : tar x(jz)f 文件名.tar.(gz,bz) -C 路径
x : 表示解压,其他的和上述一样,-C路径是指可以将文件解压到具体的地方去
查看压缩文件信息 : tar tvf 文件名
t : 表示查看压缩文件
v(verbose) : 查看压缩信息
五 vi的使用
vi有三种模式,普通模式,命令模式,插入模式
普通模式: 一开始进入就是普通模式,给我们来阅读的
命令模式: 冒号(:)进入命令模式
插入模式: i(insert)进入插入模式
命令模式下常用命令
set number : 显示行数
set nonumber : 不显示行数
w : 存盘
q : 退出
wq : 存盘退出
q! : 强制退出
n : 跳转到n行
%s/p1/p2/g : 将文件中所有的p1都用p2来替代,s(substitude)
一般模式下常用命令
o : 在光标下新增一行
dd : 删除光标所在行
ndd : 删除n行(光标所在行及其下面的n-1行)
D : 删除光标之后的内容
dw(delete word) : 删除光标后面整个单词
yy(yank) : 复制光标所在行
nyy : 复制n行(光标所在行及其下面的n-1行)
p(paste) : 粘贴内容
u : 撤销,类似于windows里面的ctrl+z