linux shell

# 00-linux入门

## 0、回顾

​ 关机:shutdown -h halt init 0 poweroff

​ 重启:shutdown -r reboot init 6

​ pwd:查看工作目录

​ ls:查看指定目录的内容

​ -l:列表显示

​ -a:显示所有,包括隐藏文件

​ -h:人性化的显示

​ -d:只显示目录,不查看内容

```shell

ls -ld test/

```

![image-20210107191213379](linux_shell_code.assets/image-20210107191213379.png)

​ cd:切换工作目录

​ .:当前目录

​ ..:上一级目录

​ ~:用户家目录

​ -:上次切过来的目录

## 目录结构:

​ linux目录与win完全不同,是从'/'开始的,只有他没有上一级目录,因此也叫根目录

​ 详细介绍:

​ /bin:大部分的系统命令 binaries

​ /boot:启动相关目录

​ /dev:设备文件目录,linux下一切设备皆文件

​ /etc:配置文件目录

​ /home:普通用户的家目录,一个用户对应一个文件夹

​ /lib:库文件

​ /lib64:64位库文件

​ /lost+found:系统异常时临时保存数据,用于恢复等操作

​ /media:媒体目录

​ /mnt:挂载目录,通用挂载点

​ /opt:安装系统非必须软件目录

​ /proc:虚拟文件系统,会映射硬件信息

​ /root:root用户的家目录

​ /sbin:超级用户才能执行的命令目录

​ /selinux:linux一套安全机制,非常复杂,通常不用

​ /srv:存放本机或本机服务器的数据或服务

​ /sys:类似于/proc,也是虚拟文件系统,可以映射系统信息

​ /tmp:临时文件,可能随时销毁

​ /usr:存放用户安装的应用程序

​ /var:系统产生的不可自动销毁的文件,如:日志、缓存等

## 1、vim终端编辑器

​ 介绍:vim是对vi的扩展,被誉为终端编辑器之神

​ 安装:yum install -y vim

### 工作模式:

正常模式、插入模式、编辑模式

#### 正常模式:使用vim打开文件时的默认模式

​ vim filename 打开文件,若文件不存在则新建

​ esc:切换到正常模式

​ shift + zz:保存退出

####   常用操作:

​ vim filename +n 打开文件,定位到第n行

​ vim filename + 打开文件,定位到末尾

​ gg 定位到首行

​ G 定位到尾行

​ ngg 定位到第n行

​ ^ 定位到行首

​ $ 定位到行尾

​ yy 复制光标所在行

​ p 粘贴

​ nyy 复制光标开始的n行

​ dd 删除光标所在行

​ ndd 删除光标开始的n行

​ u 撤销操作

​ ctrl + r 反撤销操作

### 插入模式:

就是可以编辑文件内容的模式,在正常模式下输入以下字符进入:

i:在光标处插入

I:在行首插入

a:在光标下一个字符处插入

A:在行尾插入

o:下光标下一行插入空行

O:下光标上一行插入空行

s:删除光标所在字符并插入

S:删除光标所在行并插入

### 编辑模式:

是对整个文件进行的操作,如:保存,退出

在正常模式下输入':'即可进入编辑模式

:w 保存

:q 退出

:wq 保存退出,等价于 shift + zz

:x 保存退出,等价于:wq

:q! 强制退出

:set nu 显示行号

:set nonu 隐藏行号

:行号 定位到指定行号

/内容 查找指定内容,n下翻,N上翻

:%s/原内容/新内容 使用新内容替换原内容,全部替换

:m,ns/原内容/新内容 使用新内容替换原内容,替换m到n行

友情提醒:若非正常关闭vim,则会生成临时文件(隐藏的),需要删除

## 2、文件及文件夹

​ touch:创建普通文件

​ rm:删除文件,-f表示强制删除,-r表示递归删除

​ cp:拷贝文件,若目标目录写上文件名可以顺便把名字改了,-r可以操作目录

​ mv:移动文件,若目标目录写上文件名可以顺便把名字改了

​ mkdir:创建文件夹,-p创建中间目录

​ rmdir:删除文件夹,只能删除空目录

## 3、查看文件

​ cat:从上到下查看文件,全部内容

​ tac:从下到上查看文件,全部内容

​ head:查看开头的指定行内容,默认10行,head -3 1.txt

​ tail:查看末尾的指定行内容,默认10行,tail -5 1.txt

​ more:逐渐查看文件,回车下翻一行,空格下翻一屏,看到结尾会自动结束,q退出查看

​ less:逐渐查看文件,回车下翻一行,空格下翻一屏,看到结尾不会自动结束,可以上下翻

​ nl:功能同cat,会多显示行号

​ wc:统计文件信息,显示结果:行数 | 单词数 | 字节数

​ 说明:more/less更多用法是结合管道使用,ls /etc | more

## 4、用户及用户组

​ whoami:查看当前用户

​ useradd:创建用户

​ -d:指定家目录

​ -u:指定用户id(uid)

​ -g:指定所属组id(gid)

​ -s:指定shell解释器

说明:uid和gid要使用大于500的数字,小于500的被系统占用

passwd:设置指定用户的密码,若不指定设置当前用户的密码

userdel:删除用户,-rf删除用户相关目录,否则需要手动删除

groupadd:创建用户组

groupdel:删除用户组

gpasswd:将用户添加到某个组,从某个组删除

gpasswd -a test hello 将test用户添加到hello组

gpasswd -d test hello 将test用户从hello组中删除

chgrp:改变文件所属组,chgrp hello 1.txt

chown:改变文件拥有者[及组],chown root[:root] 1.txt

chsh:修改用户的shell解释器,chsh test -s /sbin/nologin

su -  : 切换到指定用户,若不加'-',只会切换目录及用户身份,不会切换执行环境

若不指定用户。默认切换到root用户

涉及文件:

/etc/passwd:存放用户信息

/etc/group:存放用户组信息

/etc/shadow:存放用户密码

用户身份:

#:root用户

$:普通用户

## 5、文件权限管理

​ 说明:在linux下,文件的权限有:所有者、所属组、其它的区分

​ 权限:权限有:读(r)、写(w)、执行(x),ls -l即可查看

​ rwxr-xr--

​ 修改:使用chmod命令修改文件的权限

​ 格式:chmod [身份] [修改] [权限] 文件

​ 身份:

​ u:用户

​ g:组

​ o:其它

​ a:所有身份

​ 修改:

​ +:添加

​ -:去掉

​ =:设置

​ 权限:

​ r:读

​ w:写

​ x:执行

​ 简洁写法:chmod 0755 1.txt

​ 所有者可读可写可执行、所属组可读可执行、其它可读可执行

## 6、软硬链接文件

​ 说明:ls -l 结果的第一列就是文件类型

​ 类型:

​ -:普通文件

​ d:目录文件

​ l:软链接

​ 命令:ln [-s] 原文件 目标文件

​ 分类:软链接、硬链接(很少用到)

​ 创建:不加参数-s创建的链接就是硬链接,添加-s参数创建的就是软链接

​ 例子:ln -s 1.txt 2.txt

## 7、文件查找

​ tree:查看目录结构,-L指定层级深度,tree / -L 2

​ find:查找文件

​ -name:指定名字,find / -name 1.txt

​ -type:指定类型,(b/c/d/p/l)

​ -size:指定大小,单位K/M/G,+表示大于,-表示小于,find / -size +1G

​ -perm:指定权限

​ -user:指定用户

​ -group:指定组

​ -maxdepth:指定最大层级深度

​ whereis:查找程序,不要使用find(效率太低)

​ which:专门用来查找命令

​ alias:给某个命令起别名,alias ls='ls --color=auto'

​ unalias:取消别名

​ grep:正则匹配查找

​ -i:忽略大小写

​ -n:显示行号

​ 例子:

​ grep root /etc/passwd  在 /etc/passwd文件中查找包含root的行

​ ls /bin | grep '^m' 查找/bin目录下以m开头的文件

其它:

​ 命令 [选项] [参数]

​ 出问题查看帮助文档

​ 1、内部帮助文档:命令 --help/-h

​ 2、外部帮助文档:man 命令

# 00-linux初级

1、磁盘挂载

磁盘的使用流程:磁盘=>分区=>格式化=>挂载

mount:查看所有挂载情况

mount [-t 文件系统] 磁盘分区 挂载点

umount 磁盘分区/挂载点

/etc/fatab:开机挂载内容写在次文件中,一行表示一个

2、磁盘查看

df:查看磁盘分区使用情况,-h人性化的显示

du:查看指定目录的使用情况,-h人性化的显示

3、管道(|)

说明:就是将前一个命令的输出作为后一个命令的输入,使用管道符'|'进行连接

实例:

ls -l /etc | more

ls /etc | grep '^vi'

注意:有些命令不接受管道参数,可以结合xargs使用

find -type d | xargs rm -r

4、重定向

打开任意程序,系统会自动创建三个文件流:标准输入(0)、标准输出(1)、标准错误(2)

而且这三个文件流都被指定到了终端

输出重定向:

ls /etc > 1.txt #将ls输出的内容保存到1.txt中

echo 'hello' >> 1.txt #将hello字符串追加到1.txt中

错误重定向:

ls /abc 2>2.txt #将错误输出保存到2.txt中

同时重定向输出和错误:

ls /abc . &>3.txt #将输出和错误同时保存到3.txt中

5、系统服务

网络:

ping:检查网络连通性

ifconfig:查看网卡信息

ifup:启动网卡

ifdown:关闭网卡

service network start|stop|restart 启动|关闭|重启 网络服务

网卡配置文件:/etc/sysconfig/network-scripts/ifcfg-eth0

端口查看:

netstat -tunpl

内存查看:

free:查看内容,-h人性化的显示

正在做什么

w:what的简写,查看系统正在做什么

查看所有执行程序

top:是w的详细显示,3秒刷新一次

查看虚拟内存:

vmstat

进程管理:

查看进程:ps aux  a:所有;u:显示用户;x:显示没有终端的

杀死进程:kill -9 PID 杀死指定进程号的进程

6、压缩解压

zip/unzip: yum install -y zip unzip

实例:

zip 123.zip *.txt #将所有的txt文件压缩为123.zip

unzip 123.zip #将压缩文件123.zip解压

gzip/gunzip:只能压缩单个文件,压缩后会删除原文件,后缀为.gz

实例:

gzip 1.txt #将1.txt压缩成1.txt.gz

gunzip 1.txt.gz #将压缩文件1.txt.gz解压

gzip -d 1.txt.gz #功能同gunzip

bzip2/bunzip2:用法同上,后缀是bz2

实例:

bzip2 1.txt #将1.txt文件压缩

bunzip2 1.txt.bz2 #将压缩文件1.txt.bz2解压

bzip2 -d 1.txt.bz2 #将压缩文件1.txt.bz2解压

说明:-k参数可以在操作后保留原文件

tar:打包解包工具,后缀为tar

-c:打包

-x:拆包

-t:查看

说明:以上三个参数不能一起使用

-f:指定文件,一般放在最后

-v:显示详细信息

-z:使用gzip/gunzip进行压缩解压

-j:使用bzip2/bunzip2进行压缩解压

实例:

tar -cvf 123.tar *.txt #将所有的txt文件打包成123.tar

tar -tf 123.tar #查看打包文件123.tar中的内容

tar -xvf 123.tar #将打包的文件123.tar解包

tar -zcvf 123.tar.gz 123.tar #使用gzip压缩文件123.tar

tar -zxvf 123.tar.gz #使用gunzip将123.tar.gz解压

tar -jcvf 123.tar.bz2 123.tar 使用bzip2压缩文件

tar -jxvf 123.tar.bz2 #使用bunzip2进行解压

tar -zcvf 123.tar.gz *.txt #将所有的txt文件打包并使用gzip压缩

* tar -zxvf 123.tar.gz #使用gunzip解压

tar -jcvf 123.tar.bz2 *.txt #将所有的txt文件打包并使用bzip2压缩

* tar -jxvf 123.tar.bz2 #使用bunzip2解压

说明:tar.gz简写为tgz,tar.bz2简写为tbz2/tbz

7、软件安装方式

1、源码安装:需要对应的编译工具(gcc、gc++)

说明:需要提前下载好对应的压缩包

配置:configure

编译:make

安装:make install

实例演示:安装apache

1、下载

2、解压:tar -jxvf httpd-2.2.34.tar.bz2

3、进入:cd httpd-2.2.34

4、配置:./configure --prefix=/usr/local/apache2

5、编译:make

6、安装:make install

7、修改配置文件:PREFIX/conf/httpd.conf

ServerName IP:80 或 ServerName www.test.com:80

若使用域名,需要本地劫持(本地域名解析),具体做法如下:

在文件 C:\Windows\System32\drivers\etc\hosts 最后添加一行

服务器的IP www.test.com

8、服务器控制

./PREFIX/bin/apachectl start|stop|resatrt 开启|关闭|重启

9、测试,在浏览器中输入IP或域名

2、rpm安装

rpm:是RPM Pakage Manager的缩写,也是软件包的后缀,也是命令

命令参数:

-i:安装

-e:卸载

-v:显示详细信息

-h:显示安装进度

-U:升级

-q:查询

实例演示:安装vim

rpm -ivh vim-filesystem-7.4.629-5.el6_8.1.x86_64.rpm

rpm -ivh vim-common-7.4.629-5.el6_8.1.x86_64.rpm

rpm -ivh vim-enhanced-7.4.629-5.el6_8.1.x86_64.rpm

使用yum只下载rpm包:yum install -y vim --downloadonly --downloaddir .

3、yum安装

说明:yum是最简单的安装软件方式,不用考虑复杂的包依赖关系

命令:

清空缓存:yum clean all

生成缓存:yum makecache

安装软件:install

卸载软件:remove

更新软件:update

搜索软件:search

列表显示:list

更改yum源:

cd /etc/yum.repos.d/

cp CentOS-Base.repo CentOS-Base.repo.bak

下载指定的yum源配置文件

清空原来的缓存:yum clean all

重新生成缓存:yum makecache

其它:

cmd1;cmd2;cmd3 顺序执行cmd1、cmd2、cmd3

cmd1 || cmd2 cmd1执行成功,cmd2就不执行了

cmd1 && cmd2 cmd1执行成功,cmd2才执行

# 00-shell编程

1、continue

作用:结束本次循环,进入下次循环

实例:打印1到10之间不能被3整除的数

i=1

while [ $i -le 10 ]

do

if [ $[$i%3] -eq 0 ];then

((i++))

continue

fi

echo $i

((i++))

done

2、函数

简单:

demo()

{

echo "hello world"

}

demo

参数:

test()

{

echo $1

echo $2

}

test 123 abc

返回值:

add()

{

return 123

}

add

echo $?

3、逻辑运算实例

if [ 2 -lt 3 -a 3 -lt 5 ];then

        echo "ok"

fi

if [ 2 -lt 3 ] && [ 3 -lt 5 ];then

echo "ok"

fi

if [ 2 -gt 3 -o 3 -lt 5 ];then

echo "ok"

fi

if [ 2 -gt 3 ] || [ 3 -lt 5 ];then

echo "ok"

fi

if [ ! 2 -gt 3 ];then

echo "xxx"

fi

4、 黑洞文件/dev/null

说明:改文件无论怎么写入都是空的,什么时候读取也都是空

作用:将任意内容写入以屏蔽错误,清除文件内容(如:犯罪记录)

实例:cat /dev/null > xx.log

5、printf

作用:格式化的输出字符串

实例:printf "hello %d %s\n" 250  "world"

结果:hello 250 world

6、sed

作用:处理文件流

格式:sed [参数] 指令 文件

参数:

-n:结合命令p使用,用于打印内容

-i:默认不加改参数不会修改文件内容,加上后会真的修改文件

命令:

p:打印,需要结合-n一起使用

a:增加

d:删除

c:取代

s:替换

实例:

sed -n '1p' 1.txt #打印第1行

sed -n '1,3p' 1.txt #打印1-3行

sed -n '$p' 1.txt #打印最后一行

sed -n '3,,$p' 1.txt #

sed '1a xxx' 1.txt #在第1行的下面添加xxx

sed '1,3a xxx' 1.txt #在1-3行的下面都添加xxx

sed '5d' 1.txt #删除第5行的内容

sed '3,5d' 1.txt #删除3-5行的内容

sed '3c xxx' 1.txt #使用xxx取代第3行的内容

sed '3,5c xxx' 1.txt #使用xxx取代3-5行的整个内容

sed 's/jn/xxx/g' 1.txt #将所有的jn替换成xxx

sed '5,7s/jn/xxx/g' 1.txt #将5-7行的jn替换成xxx

7、gawk,功能更强大,稍微复杂一点

作业:

history > his.txt

将文件his.txt处理一下,只保留最后几行

tail -5 his.txt > his.tmp

mv his.tmp his.txt

#cat /dev/null > his.txt

# 其他

造成yum(大黄狗)下载出错, 一般是由于python多个版本共存的原因。

所以,只需将yum 设置文件固定python 版本即可。

1.sudo vim /usr/bin/yum

打开,将首行的python 修改为python2.7

2.vim /usr/libexec/urlgrabber-ext-down

打开,将首行的python 修改为python2.7

3.vim /usr/bin/yum-config-manager

同上,将首行的python -tt  修改为python2.7 -tt

上述操作能解决版本冲突问题。

你可能感兴趣的:(linux shell)