补充上一章关于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 //查看运行状态
明天继续。。。