# 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
上述操作能解决版本冲突问题。