2.1.1linux概述
linux和unix的最大区别就是,linux开放源代码的自由软件,unix则是对源代码实行知识产权保护的传统商业软件
unix系统大多数和硬件配套,而且本身是收费的商业软件
linux可以在多种硬件平台上运行,并且linux的软件是自由免费且公开源代码的
linux内核版本分为稳定版和开发版,两种版本是相互关联,相互循环
稳定版:可以广泛应用和部署。新的稳定版相比较于旧版本只是修正一些bug或者加入一些新的驱动程序
开发版:和字面意思差不多,变化快,并不适用于生产生活中
内核源码网址: http://www.kernel.org
linux的众多发行版:ubuntu,CentOS,RedHat,debian,包括后面学习的kali也是,此外还有很多
2.1.2安装vmware
第一步安装vmware,不做赘述,快速跳过
第二步安装centos,快速跳过
第三步,centos基本配置
换源(太多了,自己去镜像网上去找,换源或者修改某些重要数据或者文件前,一定要做好备份),更换国内源访问速度快,也可以避免某些软件包在国外被墙,然后添加EPEL(可以理解为额外拓展包),然后清理缓存,避免原来源的数据干扰yum clean all,然后创建新数据元yum makecache
关闭防火墙(生产工作环境中不推荐,生产中建议用哪个端口就开放哪个),systemctl stop firewalld.service,systemctl disable firewalld.service
静态IP,首先先查看自身物理机IP,ipconfig -a,然后回到虚拟机将网络适配器修改为自定义VMnet8(nat模式),然后点击虚拟网络编辑器,更改配置,将子网设置成和自己物理机对应的网段
然后回到虚拟机,修改
/etc/sysconfig/network-scripts/ifcfg-en(这里是你的网卡名,一般都是enxx)
BOOTPROTO修改为static(静态),然后修改ip地址和对应网关
配置完成后重启网络服务即可
service network restart
2.1.3linux文件结构和基本概念
单独记录为一个笔记
补充说明,在安装linux时,如果有公司需求就按照公司需求进行系统分区,如果没有,按照以下方法
(1)/boot分配200M;(2)swap分区(交换分区,当物理内存不够用的时候会从内存中取出一部分暂时不用的数据,暂存在swap分区中,从而为当前运行的程序腾出足够的内存)分内存的两倍(如果内存大于4GB,swap分配8GB即可,分多了也是浪费磁盘空间);(3)/分区分20GB(/分区用于储存系统文件);(4)剩余的空间分配给/data
linux基本命令
命令参数很多,选项功能也很多,不能说全部弄全,唯一的学习办法就是在日常生活中多学多用
mkdir(创建目录)
mkdir -m(类似于直接在创建目录的过程中赋予权限)
例如
[root@localhost ~]# ll 总用量 4 -rw-------. 1 root root 973 2月 27 01:44 anaconda-ks.cfg drwxr-xr-x. 2 root root 6 3月 23 08:14 test //使用mkdir创建的正常目录 [root@localhost ~]# mkdir -m754 test1 //这里创建了test1目录,并且赋予权限为754,r=4,w=2,x=1 [root@localhost ~]# ls anaconda-ks.cfg test test1 [root@localhost ~]# ll 总用量 4 -rw-------. 1 root root 973 2月 27 01:44 anaconda-ks.cfg drwxr-xr-x. 2 root root 6 3月 23 08:14 test drwxr-xr--. 2 root root 6 3月 23 08:32 test1 [root@localhost ~]#
从上可以看出两个创建的目录的不同在于-m的赋权
mkdir -p(递归创建),简单的说就是我们需要创建多个目录时,如果上级目录不存在,他会先创建上级目录
[root@localhost ~]# ll 总用量 4 -rw-------. 1 root root 973 2月 27 01:44 anaconda-ks.cfg drwxr-xr-x. 2 root root 6 3月 23 08:14 test drwxr-xr--. 2 root root 6 3月 23 08:32 test1 [root@localhost ~]# mkdir ./1/2/3 mkdir: 无法创建目录"./1/2/3": 没有那个文件或目录 //这里是因为他要创建目录3,但是因为没有目录2,也没有目录1,所以报错 [root@localhost ~]# mkdir -p ./1/2/3 //递归创建目录1,目录2,目录3 [root@localhost ~]# ls 1 anaconda-ks.cfg test test1 [root@localhost ~]# ls ./1/ 2 [root@localhost ~]# ls ./1/2 3 [root@localhost ~]#
mkdir -v(每次创建都显示信息)
[root@localhost ~]# mkdir -v ./test2 mkdir: 已创建目录 "./test2" //这里就是提示的消息 [root@localhost ~]# mkdir ./test3 //正常创建是不会显示消息的 [root@localhost ~]# ls -l 总用量 4 -rw-------. 1 root root 973 2月 27 01:44 anaconda-ks.cfg drwxr-xr-x. 2 root root 6 3月 23 08:14 test drwxr-xr--. 2 root root 6 3月 23 08:32 test1 drwxr-xr-x. 2 root root 6 3月 23 08:46 test2 drwxr-xr-x. 2 root root 6 3月 23 08:46 test3
联合使用(为什么这里递归创建后第一个目录的权限是755,但是后续的最底层目录/ws是733)
[root@localhost ~]# mkdir -v -m733 -p ./we/wq/ws mkdir: 已创建目录 "./we" mkdir: 已创建目录 "./we/wq" mkdir: 已创建目录 "./we/wq/ws" [root@localhost ~]# ll 总用量 4 -rw-------. 1 root root 973 2月 27 01:44 anaconda-ks.cfg drwxr-xr-x. 3 root root 15 3月 23 08:51 we //这里的权限为755 [root@localhost ~]# [root@localhost ~]# cd ./we/ [root@localhost we]# ll 总用量 0 drwxr-xr-x. 3 root root 15 3月 23 08:51 wq //这里权限也是755 [root@localhost we]# ls wq [root@localhost we]# cd ./wq/ [root@localhost wq]# ll 总用量 0 drwx-wx-wx. 2 root root 6 3月 23 08:51 ws //只有这里按照我设定的733权限 [root@localhost wq]# cd ./ws/ [root@localhost ws]# ll 总用量 0 [root@localhost ws]#
touch命令
用于修改文件或者目录的时间属性,比如存储时间访问时间等,如果没有这个文件,就会新建一个文件
touch -a
[root@localhost ~]# touch ./tx.txt //创建一个名为tx.txt的新文件 [root@localhost ~]# ls anaconda-ks.cfg tx.txt [root@localhost ~]# ll 总用量 4 -rw-------. 1 root root 973 2月 27 01:44 anaconda-ks.cfg -rw-r--r--. 1 root root 0 3月 23 15:54 tx.txt [root@localhost ~]# touch -a ./tx.txt //更新访问时间,不改变修改时间 [root@localhost ~]# ll 总用量 4 -rw-------. 1 root root 973 2月 27 01:44 anaconda-ks.cfg -rw-r--r--. 1 root root 0 3月 23 15:54 tx.txt [root@localhost ~]# [root@localhost ~]# stat tx.txt //查看文件时间属性 文件:"tx.txt" 大小:0 块:0 IO 块:4096 普通空文件 设备:803h/2051d Inode:34011794 硬链接:1 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 环境:unconfined_u:object_r:admin_home_t:s0 最近访问:2022-03-23 16:00:21.933325506 +0800 //使用-a命令更新了最新的访问时间 最近更改:2022-03-23 15:54:43.910321647 +0800 最近改动:2022-03-23 16:00:21.933325506 +0800 创建时间:-
touch -m用于更新文件的修改时间记录,如下
[root@localhost ~]# touch -m tx.txt //更新修改时间 [root@localhost ~]# stat tx.txt //查看文件状态 文件:"tx.txt" 大小:0 块:0 IO 块:4096 普通空文件 设备:803h/2051d Inode:34011794 硬链接:1 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 环境:unconfined_u:object_r:admin_home_t:s0 最近访问:2022-03-23 16:00:21.933325506 +0800 //这里不变 最近更改:2022-03-23 16:06:07.743329454 +0800 //此时修改时间发生变动,但是上面的访问时间不变 最近改动:2022-03-23 16:06:07.743329454 +0800 创建时间:- [root@localhost ~]#
touch -c,不创建不存在的文件
原本touch命令在输入不存在的文件时,会自动创建新文件,-c参数则不会创建,但是针对已经存在的文件,则会更新其存储时间和修改时间等时间属性
[root@localhost ~]# touch -c ./1.log //创建1.log,如果不存在则不创建 [root@localhost ~]# ls anaconda-ks.cfg tx.txt //因为没有1.log,所以不创建 [root@localhost ~]# ll 总用量 4 -rw-------. 1 root root 973 2月 27 01:44 anaconda-ks.cfg -rw-r--r--. 1 root root 0 3月 23 16:06 tx.txt [root@localhost ~]# ls -a . anaconda-ks.cfg .bash_logout .bashrc .tcshrc .viminfo .. .bash_history .bash_profile .cshrc tx.txt [root@localhost ~]# ls / bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr [root@localhost ~]# [root@localhost ~]# ls anaconda-ks.cfg tx.txt [root@localhost ~]# touch -c tx.txt //针对已经存在的文件更新其文件时间属性 [root@localhost ~]# ll 总用量 4 -rw-------. 1 root root 973 2月 27 01:44 anaconda-ks.cfg -rw-r--r--. 1 root root 0 3月 23 16:11 tx.txt [root@localhost ~]# stat tx.txt 文件:"tx.txt" 大小:0 块:0 IO 块:4096 普通空文件 设备:803h/2051d Inode:34011794 硬链接:1 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 环境:unconfined_u:object_r:admin_home_t:s0 最近访问:2022-03-23 16:11:39.475333241 +0800 最近更改:2022-03-23 16:11:39.475333241 +0800 最近改动:2022-03-23 16:11:39.475333241 +0800 创建时间:- [root@localhost ~]# date 2022年 03月 23日 星期三 16:12:33 CST [root@localhost ~]# touch tx.txt //二者作用等同,只不过-c参数不会去创建新文件 [root@localhost ~]# stat tx.txt 文件:"tx.txt" 大小:0 块:0 IO 块:4096 普通空文件 设备:803h/2051d Inode:34011794 硬链接:1 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 环境:unconfined_u:object_r:admin_home_t:s0 最近访问:2022-03-23 16:22:01.410340341 +0800 最近更改:2022-03-23 16:22:01.410340341 +0800 最近改动:2022-03-23 16:22:01.410340341 +0800 创建时间:-
touch -r 源文件 目标文件
意为,将源文件的时间属性去更新目标文件的时间,但是改动时间还是现实时间。
[root@localhost ~]# ls anaconda-ks.cfg tx.txt [root@localhost ~]# stat anaconda-ks.cfg //查看文件属性,确认时间状态 文件:"anaconda-ks.cfg" 大小:973 块:8 IO 块:4096 普通文件 设备:803h/2051d Inode:33742625 硬链接:1 权限:(0600/-rw-------) Uid:( 0/ root) Gid:( 0/ root) 环境:system_u:object_r:admin_home_t:s0 最近访问:2022-02-27 01:44:57.247921907 +0800 最近更改:2022-02-27 01:44:57.249921907 +0800 最近改动:2022-02-27 01:44:57.249921907 +0800 创建时间:- [root@localhost ~]# touch -r anaconda-ks.cfg tx.txt //把前者的时间属性用于去更新后者的时间属性 [root@localhost ~]# stat tx.txt 文件:"tx.txt" 大小:0 块:0 IO 块:4096 普通空文件 设备:803h/2051d Inode:34011794 硬链接:1 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root) 环境:unconfined_u:object_r:admin_home_t:s0 最近访问:2022-02-27 01:44:57.247921907 +0800 // 最近更改:2022-02-27 01:44:57.249921907 +0800 //此时时间信息和上面那个文件的事件信息变得一样了 最近改动:2022-03-23 16:26:25.304343353 +0800 //只有这里改动时间还是目前现实的时间 创建时间:- [root@localhost ~]#
rm命令
用于删除,rm -rf /*(此命令高危,删除所有,简称删库跑路)
各参数含义。-r是递归删除,-f是强制删除,-i是显示提示内容(建议该操作防止误删,或者重要文件数据提前进行备份)
mv命令,用于文件改名和迁移
mv -i,若指定目录有同名文件,则询问是否覆盖
mv -f,直接移动过去,不提示任何信息
cp命令,复制和备份文件常用
cp -a,复制目录时使用,保留链接、文件属性,并复制目录下的所有内容。
cp -d复制时保留链接。
cp -p除复制文件的内容外,把时间和访问权限也复制到新文件中
cp -r给出的源文件如果是一个目录文件,此时复制该目录下的 所有子目录和文件
常用参数:-i,-f,-a,很多地方的作用相同
cat命令,用于查看文本文件
-n,显示行号
[root@localhost ~]# cat -n hello.log 1 4987489749687897 2 4564654563 3 11231321 4 68789 5 4163132 6 4897 7 63415634 8 8979846 9 541685789789 10 6415165 11 4897987 12 631654 13 987897 14 61563 [root@localhost ~]#
more和less命令,在很多地方可以混合使用
more -num为一次性显示的行数
例如:more -10,则就是一次显示10行
比如:ls -l / | more -5,列出文件目录的信息,并且每次只显示5行
head命令
head用于查看文件的前几行内容
head -n 20 文件名,显示某文件按的前20行内容
head不加参数的话默认显示前10行内容
tail命令,显示文件的最后10行
比较常用的一个命令,tail -f 文件名,用于监控文件的操作,因为文件的实施操作改动会不断更新显示
在linux中,引用某个变量使用$符号,例如:echo $PATH(输出PATH环境变量),此时我们引用了环境变量,所以用$符号
which命令用于找文件,但是which命令只会在环境变量设置的目录里去查找
whereis也是用于查找文件,其中参数-b ,-s,-m,对应的缩写是binary(二进制)也就是可执行文件,source(源码文件),man文件对应手册说明
-u是除了上述的文件,以外的文件
locate(新内容学习)
首先先要安装,yum install -y mlocate,如果在搜索过程中有出现报错,那就先updatedb,更新一下locate的搜索数据库,这个工具类似于windows下的everything,搜索时会搜索包含关键字的所有信息并显示
[root@localhost ~]# locate /var/log //搜索/var目录下的所有包含log关键字的文件 /var/log /var/log/anaconda /var/log/audit /var/log/boot.log /var/log/btmp /var/log/cron /var/log/cron-20220323 /var/log/dmesg /var/log/dmesg.old /var/log/lastlog /var/log/maillog /var/log/maillog-20220323 /var/log/messages /var/log/messages-20220323 /var/log/ppp /var/log/samba /var/log/secure /var/log/secure-20220323 /var/log/spooler /var/log/spooler-20220323 /var/log/tallylog /var/log/tuned /var/log/wtmp /var/log/yum.log /var/log/anaconda/anaconda.ifcfg.log /var/log/anaconda/anaconda.log /var/log/anaconda/anaconda.packaging.log /var/log/anaconda/anaconda.program.log /var/log/anaconda/anaconda.storage.log /var/log/anaconda/anaconda.xlog /var/log/anaconda/ks-script-3VSczQ.log /var/log/anaconda/ks-script-Di3qUv.log /var/log/anaconda/ks-script-gk4HrM.log /var/log/anaconda/syslog /var/log/audit/audit.log /var/log/samba/old /var/log/tuned/tuned.log [root@localhost ~]# 但是如果搜索路径具体化,或者将文件名具体化就很好用 比如 [root@localhost ~]# locate hello.log /root/hello.log [root@localhost ~]#
具体参数可以参考该命令帮助手册
find命令
find和locate用的比较多,find是实时扫描搜索,速度慢,locate是根据数据库索引搜索,速度快
find主要用于查询各种文件,模糊化搜素比较好用
find -amin -10(搜索过去最后10分钟内访问的文件)
find -atime -10(搜索过去最后10小时内访问的文件)
find -cmin -10(搜索最后10分钟内被改变文件状态的文件)
find -ctime -10(搜索最后10小时内被改变文件状态的文件)
find -mmin -10(查找最后10分钟内被改变文件数据的文件)
find -mtime -10(查找最后10小时内被改变文件数据的文件)
我们常用的几个命令
查找var目录下的所有log文件,需要记住搜索类型参数需要用单引号引用
[root@localhost ~]# find ../var/ -name '*.log' ../var/log/audit/audit.log ../var/log/tuned/tuned.log ../var/log/anaconda/anaconda.log ../var/log/anaconda/anaconda.program.log ../var/log/anaconda/anaconda.packaging.log ../var/log/anaconda/anaconda.storage.log ../var/log/anaconda/anaconda.ifcfg.log ../var/log/anaconda/ks-script-3VSczQ.log ../var/log/anaconda/ks-script-Di3qUv.log ../var/log/anaconda/ks-script-gk4HrM.log ../var/log/yum.log ../var/log/boot.log [root@localhost ~]#
find /var/log/ -perm 755,查找var/log目录下权限为755的文件
[root@localhost ~]# find ../var/log/ -perm 755 ../var/log/ ../var/log/tuned ../var/log/anaconda [root@localhost ~]#
find 路径 -size,其中-10c表示,搜索某路径下10字节以内的文件,+10表示搜索某路径下超过10字节的文件,具体情况可以灵活变换,比如
[root@localhost ~]# find ./ -size -10c ./tx.txt [root@localhost ~]# find ./ -size +10c ./ ./.bash_logout ./.bash_profile ./.bashrc ./.cshrc ./.tcshrc ./anaconda-ks.cfg ./.bash_history ./hello.log ./.viminfo ./test ./test/hello.log [root@localhost ~]#
-exec参数,参数后面跟命令,以分号;结尾,比如我想要搜索目前目录下的所有.log文件复制到opt目录
[root@localhost ~]# find ./ -name '*.log' -exec cp {} ../opt/ \; //{}花括号内表示的是引用前面搜索到的内容 //在linux中我们为了避免一些斜杠的用法发生转义,在末尾加上一个反斜杠作为标记 [root@localhost ~]# ls ../opt/ hello.log [root@localhost ~]#
chmod用于赋权,不多赘述
-R是按照指定方式处理目录以及子目录下所有文件
chown修改拥有者和群组
-R也是和上述一样的参数
tar命令,压缩和解压。
-z支持gzip格式,-j支持bzip2格式,-c创建新压缩包,-v显示过程,-f定义打包的包名称,-x解压,-t显示压缩文件内容
其中对特殊参数做出说明,在备份或者打包时常用的一个参数,--exclude排除某文件或者目录
[root@localhost ~]# pwd //显示当前路径 /root [root@localhost ~]# ls anaconda-ks.cfg hello.log test tx.txt z.bak [root@localhost ~]# tar -zcvf q.tar.gz /root/* --exclude=/root/test //将/root目录下所有文件打包为q.tar.gz,并排除/test目录 tar: 从成员名中删除开头的“/” /root/anaconda-ks.cfg /root/hello.log /root/tx.txt /root/z.bak //输出结果中没有test目录 [root@localhost ~]# ls anaconda-ks.cfg hello.log q.tar.gz test tx.txt z.bak [root@localhost ~]# tar -zxvf q.tar.gz -C ./t test/ tx.txt [root@localhost ~]# tar -zxvf q.tar.gz -C ./test/ ////解压q.tar.gz到当前目录下的test目录 root/anaconda-ks.cfg root/hello.log root/tx.txt root/z.bak [root@localhost ~]# ls ./test/root/ anaconda-ks.cfg hello.log tx.txt z.bak
date命令,查看时间
cal日历
grep用的比较多,用于关键字查找
^符号表示以xx开头,比如
[root@localhost ~]# grep '^for' profile -n //在profile文件中查找以for开头的,-n显示行号 65:for i in /etc/profile.d/*.sh ; do [root@localhost ~]#