linux 基础知识(五)

补充上一章关于alias,取消alias的方法为,unalias + 别名
用户登录流程
1.用户在登陆时,会调用一些文件(这里注意下,是用户登录,不是开机启动)
/etc/profile
/etc/profile.d/
~/.bash_profile
~/.bashrc
/etc/bashrc
其中profile,profile.d/
,bashrc都是全局变量(所有用户都能读取到)
.bashrc和.bash_profile(局部变量,一般放在用户的家目录下面)

读取顺序(就是上面列出文件的顺序,如果定义的变量冲突,以最后被读取的文件的为主)

PATH变量(可以简化命令长度)

 [root@localhost boke]# echo $PATH(读取PATH变量时,按顺序读取)
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin/mysql:/root/bin
[root@localhost boke]# which touch
/bin/touch
[root@localhost boke]# /bin/touch 1(因为有了变量,才可以直接touch文件)
[root@localhost boke]# touch 2
[root@localhost boke]# ls
1  2
[root@localhost boke]# echo "bie xiang chuang jian" > /sbin/touch(我们在/bin前面在创建个一模一样的文件)
[root@localhost boke]# chmod a+x /sbin/touch (给权限)
[root@localhost boke]# export PATH(刷新变量)
[root@localhost boke]# touch 3(意思完全变了,因为按照顺序读的事/sbin下面的touch)
[root@localhost boke]# /bin/touch 3(这时候只能你手动来指定了)
[root@localhost boke]# ls
1  2  3
/sbin/touch: line 1: bie: command not found
[root@localhost boke]# rm -f /sbin/touch 
[root@localhost boke]# touch 4(光删除文件是第一步)
-bash: /sbin/touch: No such file or directory
[root@localhost boke]# export PATH(刷新变量,完成复原)
[root@localhost boke]# touch 4
[root@localhost boke]# ls
1  2  3  4
[root@localhost boke]# alias touch='echo hello'(别名也能影响PATH)
[root@localhost boke]# alias touch
alias touch='echo hello'
[root@localhost boke]# touch 5
hello 5
[root@localhost boke]# unalias touch
[root@localhost boke]# touch 5
[root@localhost boke]# ls
1  2  3  4  5

压缩打包
https://iask.sina.com.cn/b/17713465.html (这里讲的原理,我看不大懂。。)
linux里的压缩有四种

创建大文件
dd if=/dev/zero(从剩余空间抽取 of=/路径/文件名 bs=1M count=30

 [root@localhost boke]# dd if=/dev/zero of=/usr/local/boke/大文件 bs=1M count=30
30+0 records in
30+0 records out
31457280 bytes (31 MB) copied, 0.144625 s, 218 MB/s
[root@localhost boke]# stat 大文件 
  File: `大文件'
  Size: 31457280    Blocks: 61440      IO Block: 4096   regular file
Device: 802h/2050d  Inode: 937638      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-04-24 13:10:02.272290603 +0800
Modify: 2018-04-24 13:10:02.413290814 +0800
Change: 2018-04-24 13:10:02.413290814 +0800
[root@localhost boke]# 
[root@localhost boke]# zip 大文件.zip 大文件 
  adding: 大文件 (deflated 100%)
[root@localhost boke]# ls
1  2  3  4  5  大文件  大文件.zip
[root@localhost boke]# ll
total 30752
-rw-r--r--. 1 root root        0 Apr 24 12:21 1
-rw-r--r--. 1 root root        0 Apr 24 12:21 2
-rw-r--r--. 1 root root        0 Apr 24 12:26 3
-rw-r--r--. 1 root root        0 Apr 24 12:29 4
-rw-r--r--. 1 root root        0 Apr 24 12:32 5
-rw-r--r--. 1 root root 31457280 Apr 24 13:10 大文件
-rw-r--r--. 1 root root    30704 Apr 24 13:12 大文件.zip
[root@localhost boke]# ll -h
total 31M
-rw-r--r--. 1 root root   0 Apr 24 12:21 1
-rw-r--r--. 1 root root   0 Apr 24 12:21 2
-rw-r--r--. 1 root root   0 Apr 24 12:26 3
-rw-r--r--. 1 root root   0 Apr 24 12:29 4
-rw-r--r--. 1 root root   0 Apr 24 12:32 5
-rw-r--r--. 1 root root 30M Apr 24 13:10 大文件
-rw-r--r--. 1 root root 30K Apr 24 13:12 大文件.zip(因为是空文件,所以压缩的很高)
[root@localhost boke]# unzip -l 大文件.zip (查看zip里的文件有哪些)
Archive:  大文件.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
 31457280  04-24-2018 13:10   ???
---------                     -------
 31457280                     1 file
[root@localhost boke]# 

zip -r +压缩文件 文件名(如果压缩后的文件不存在,对于文件是递归压缩,如果已经存在,对于文件是添加到压缩文件)

[root@localhost boke]# zip -r 大文件.zip 1 
  adding: 1 (stored 0%)
[root@localhost boke]# unzip -l 大文件.zip 
Archive:  大文件.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
 31457280  04-24-2018 13:10   ???
        0  04-24-2018 12:21   1
---------                     -------
 31457280                     2 files

zip -d +压缩文件 文件名(删除文件)

[root@localhost boke]# zip -d 大文件.zip 1
deleting: 1
[root@localhost boke]# unzip -l 大文件.zip 
Archive:  大文件.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
 31457280  04-24-2018 13:10   ???
---------                     -------
 31457280                     1 file

*(zip是可以压缩目录的,也就说你解压缩后连同目录也会给你解压出来)

unzip +压缩文件 -d /路径(指定解压到那里去)

直接引用了笔记。。
gzip 需要压缩的文件
gzip bigfile //压缩该文件,删除源文件
gzip -l bigfile.gz //查看压缩文件中的内容
gzip -d bigfile.gz //解压该文件
gunzip bigfile.gz //解压该文件和 gzip -d 没有区别

bzip2 需要压缩的文件
bzip2 bigfile //压缩该文件,删除源文件
bzip2 -k bigfile //压缩该文件,并保留源文件
bzip2 -d bigfile.bz2 //解压该文件
bunzip2 bigfile.bz2 //解压该文件和 bunzip2 -d 没有区别

xz 需要压缩的文件
xz bigfile //压缩该文件,删除源文件
xz -k bigfile //压缩该文件,并保留源文件
xz -d bigfile.xz //解压该文件
unxz bigfile.xz //解压该文件和 xz -d 没有区别

打包
tar -cvf 包的名称 需要打包的文件或目录
-c //代表创建打包
-v //显示过程
-f //包名称,注意f后面必须跟上包的名称
-z //gzip压缩
-j //bzip2压缩
-J //xz压缩
-x //解包
-t //查询
-r //添加某个文件到包里
--delete //删除包里的某个文件

例: tar -cvf root.tar /root //将/root打包
tar -r install.log -f root.tar //将install.log文件追加到root.tar包里
tar --delete install.log -f root.tar //将install.log文件从root.tar包里删除
tar -tf root.tar //查看包里有哪些内容
tar -xvf root.tar //解开包

tar -zcf root.tar.gz /root //将/root打包并压缩成gzip格式
tar -jcf root.tar.bz2 /root //将/root打包并压缩成bzip2格式
tar -Jcf root.tar.xz /root //将/root打包并压缩成xz格式
tar -zxf root.tar.gz //将root.tar解压并解包
tar -jxf root.tar.bz2 //将root.tar解压并解包
*(补充下,解压缩时后面跟上 -C /路径 就可以解压到指定的/路径下面)

标准输入和标准输出

//标准输出重定向
> //标准输出追加重定向

2> //错误输出重定向
2>> //错误输出追加重定向

&> //全部输出重定向
&>> //全部输出追加重定向

ll /etc > /tmp/shadow 2> /tmp/out //正确的和错误的使用两个文件保存

ll /etc &> /tmp/out
ll /etc > /tmp/out 2>&1 //两种写法结果一样

< //标准输入
例:cat < /etc/hosts //查看/etc/hosts文件

cat > /tmp/file < /etc/hosts //将/etc/hosts文件输入到cat并输出到/tmp/file文件中去
cat /etc/hosts > /tmp/file //此命令的效果同上

<< //后面跟上结束符(结束符任意),结束符之前的所有数据成为输入

例:
cat << END

lkasdfuiouqwe
zc,mvnlasdkjf
qweoriu,mcnva
end
END
lkasdfuiouqwe
zc,mvnlasdkjf
qweoriu,mcnva
end

cat > /tmp/file << OUT

echo hello
OUT



软件安装
1.源码包安装
2.二进制安装
3.RPM
4.YUM

源码包
优点:可制定
缺点:操作复杂,编译时间长,非常容易出现问题或报错
安装:
1.下载并解压源码包
2.进入解压后的目录,执行“./configure”命令,为编译前做本地环境的配置。
3.配置成功后,执行“make”命令,来进行软件的编译。
4.编译成功后,执行“make install”命令来完成安装。
5.最后,执行“make clean”命令来删除安装时所产生的临时文件
卸载:
进入安装的目录,执行卸载命令“make uninstall”来进行卸载
注意:并不是所有的软件包都提供uninstall的功能,如果没有提供只能手工删除。
“./configure --prefix=/usr/local/dir” 将该软件安装到指定的目录下,一般默认安装在/usr/local里面

二进制安装
直接解压缩即可使用

RPM:redhat package management
命令语法
rpm 选项 参数
需要rpm包,一般都是以.rpm结尾
rpm包命名的结构

ntfsprogs-2.0.0-13.el6.x86_64.rpm
软件名-版本号-操作系统平台.rpm

使用rpm命令,可以对该软件进行安装,查询,卸载,升级,显示所需依赖关系的软件

依赖关系:某软件依赖与其他软件。

rpm安装软件的步骤
1.下载rpm包
2.使用rpm命令来进行安装“rpm -ivh 软件包的全名”
rpm
-i //安装
-v //显示过程
-h //显示安装时列出标记

查询
-a //查询所有软件包
-q //询问模式
-f //文件名,查看该文件是由哪个软件产生的
-l //显示软件包列表
-i //软件包的详细信息

升级
-U //升级,若该文件没有安装则安装
-F //升级,若该为件没有安装则放弃(不安装)

卸载
-e //卸载该软件
--nodeps -e //不卸载依赖关系

yum
yum特点
1.自动解决依赖性问题
2.组包,可以对RPM包进行分组,以组包的形式来进行安装
3.yum引入仓库的概念,yum源。支持多个仓库。
4.配置简单

/etc/yum.repos.d/ //该目录为yum仓库的配置文件存放目录,注意:配置文件必须以.repo结尾
vim /etc/yum.repos.d/server.repo
[server] //仓库名称
name = rhel6.5 repos //仓库的说明信息
baseurl = http://classroom.example.com/content/rhel6.5/x86_64/dvd/ //仓库的位置
enable=1 //仓库是否启用(0代表不启用,1代表启用)
gpgcheck=0 //是否启用检测(0代表不启用,1代表启用)

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release //如果检测是1,那么必须要有相应的钥匙参数。

仓库的位置:
本地:file:///mnt/ //本地使用格式file后的前两个斜杠代表格式第三个斜杠代表“根"
远程: ftp://
nfs://
http:// //看使用的是什么协议

配置完成之后,需要清除yum缓存,清除完成后建立缓存
yum clean all //清除缓存
yum makecache //建立缓存

创建本地yum仓库
1.下载系统镜像文件
wget http://classroom.example.com/content/rhel6.5/x86_64/isos/rhel-server-6.5-x86_64-dvd.iso
2.挂载镜像到本地目录
mount -o loop /root/rhel-server-6.5-x86_64-dvd.iso /mnt
3.创建仓库配置文件(必须以.repo结尾)
vim /etc/yum.repos.d/iso.repo
4.修改该配置文件
[iso]
name = file repos
baseurl = file:///mnt
enable=1
gpgcheck=0

5.清除缓存,建立缓存
yum clean all
yum makecache
6.安装验证

vim进阶使用
正常模式 插入模式(编辑模式) 结束模式

正常模式
yy 复制一行(光标所在位置)
p 粘贴
3yy 复制三行
dd 删除一行或移动一行使用p来移动
G 跳转到文档的最后一行
gg 跳转到文档的第一行
5gg 跳转到第5行
u 撤销
ctrl+r 反撤销(恢复)
0 移动到行首
$ 移动到行尾
/关键字 搜索光标之下
?关键字 搜索光标之上
ZZ 保存并退出

i 光标当前位置插入
I 光标的行首位置插入
o 在光标所在位置行下方新开一行进行插入
O 在光标所在位置行上方新开一行进行插入
a 光标的下一个字符位置插入
A 光标的行尾插入

:set nu //显示行号
:set nonu //关闭行号显示
:nohl //关闭高亮显示
:!命令 //临时切换到bash使用命令(不识别命令别名),任意键返回该文档
.!命令 //将命令的执行的结果插入到所编辑的文件中
:3 //跳转到第3行
:s/w/o //光标所在行第一个出现的“w”替换成“o”
:s/w/o/g //光标所在行出现的所有“w”替换成“o”,g代表整行替换
:%s/w/o/g //忽视光标所在位置进行全文替换,所有“w”替换成“o”
:% //代表将后面的替换作用到所有的行
:w 绝对路径 //另存为该文件
:r 文件名 //在该文档读取另一个文档,显示位置为光标所在位
:e! //放弃修改并重新加载原始文件



进程
pstree //查看进程树

父进程 PPID
子进程 PID

rhel6:所有的进程之父init
rhel7:所有的进程之父systemd

ps aux //静态查看,a代表全部,u代表用户,x代表没有控制终端的进程

进程的状态
S:休眠状态
R:等待运行
I:空闲状态
Z:僵尸状态
<:进程的优先级较高
N:进程的优先级较低
s:进程的领导者
l:多线程
+:在前台进程组

守护进程

ps -ef //静态查看,-e代表全部进程 ,-f代表全格式罗列

ps -le //查看进程的优先级,重点看NI这一列表示优先级

pgrep init //只显示init进程的进程ID(PID)
-l //显示进程名
-U 用户名 //显示该用户所产生的进程ID
-t ttyID //显示由该终端所产生的进程ID

pidof 进程名 //只显示进程ID

动态查看进程
top //动态查看进程
默认3秒刷新一次,空格可以立即刷新,输入“d”在输入秒数可以更改默认刷新的时间

"P"根据CPU的占用率来进行排序
“M”根据内存的占用率来进行排序
“N”根据启动时间来进行排序
“n”输入想一页显示进程的数量
"<" ">" 左右翻页
"c"命令名的切换,详细的路径,命令名。详细的还包括参数
"k"结束进程,默认使用15信号

ctrl+c 终止查看动态进程

结束进程
kill 信号 进程ID(PID)
-1 重置信号,一般用于让服务重新加载自己的配置文件,让进程重新加载新的配置信息包括配置文件
-9 强制关闭某个进程
-15 等待进程正常退出信号,和9信号的区别在于数据流的回写。

killall 进程名 //结束同名的所有进程

pkill //根据条件来结束相应的进程
-t 终端号
-U 用户名

xkill //点谁谁死,哪里不动点哪里



进程的优先级
ps -le //查看优先级 NI
优先级的数字越小优先级越高
优先级数字的范围:-20-19

1.创建进程时指定优先级
2.修改一个现有进程的优先级

nice -n 20 ping 127.0.0.1 //创建进程时指定优先级
renice -n 0 PID
例:renice -n 0 26715 //修改一个现有进程的优先级

注意:root用户可以在优先级的范围内随意修改,
普通用户只能把优先级调低,普通用户不能指定小于0的优先级

前台作业后台作业
创建时命令后跟上“&”,创建后台作业
jobs //查看后台作业
fg 后台作业编号 //将后台作业调到前台
ctrl+z //将已经触发的前台作业调到后台,后台作业暂停
bg //让后台作业继续运行

例:
ping 127.0.0.1 > /dev/null & //创建
jobs //查看
fg 3 //将3号作业调到前台
ctrl+z //将已经3号前台作业调到后台并暂停作业
jobs //查看运行的状态
bg //让后台作业继续运行
jobs //查看运行状态

明天继续。。。

猜你喜欢

转载自blog.51cto.com/13293172/2107265