Linux基础知识(一)
文件目录树/bin:bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。/boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev :dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。/etc:etc 是 Etcetera(等
文件
目录树
- /bin:bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
- /boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
- /dev :dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
- /etc:etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
- /home:用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。
- /lib:lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
- /lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
- /usr/src:内核源代码默认的放置目录。
- /var:var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下,包括各种日志文件,随着时间推进会不断扩大。
- /media:linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
- /opt:第三方软件放置的目录。
文件系统通过挂载,将磁盘分区的数据放置在该目录下,之后就可以通过目录树来访问数据。
用户组与用户、权限
每个用户在登陆进系统后都会从家目录开始,每个用户都至少属于一个组。
用户的配置信息会被放在/etc/passwd下,而/etc/group存放组配置信息,用户的密码会被放在/etc/shadow。
/etc/passwd:用户名:x(加密后的密码):用户id:组id:家目录:shell解释器
/etc/group:组名:组的密码:组id:(属于这个组的用户,看不见的)
查看文件信息:
第一个:
- d:目录
- -:文件
- l:链接文件
- b:供存储的的设备
- c:串行端口设备
接下来的是三个三个一组,分别代表:文件拥有者、与文件拥有者相同用户组的、不同组的。
- r:read 4
- x:execute 2
- w:write 1
第二个:链接数。
第三个:拥有者。
第四个:用户组。
第五个:文件大小kb。
第六个到最后:最后修改日期。
命令
用户、用户组、权限:
chgrp {-R 递归} 用户组名 文件名 #修改文件用户组
chown {-R 递归} 用户名 文件名 #修改文件拥有者
chmod {-R 递归} 权限 文件名 #修改权限
#列:chmod 754 test.txt 或者 chmod u=rwx,g=rx,o=r test.txt
useradd -选项 用户名 #在没有指定家目录时,系统会自动在home下创建同名的文件夹作为家目录,同理组,没有指定就创建同名的组。
#-c comment 指定一段注释性描述。
#-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
#-g 用户组 指定用户所属的用户组。
#-G 用户组,用户组 指定用户所属的附加组。
#-s Shell文件 指定用户的登录Shell。
#-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
userdel {-r 删除家目录} 用户名 #默认下删除用户,但是保留家目录
usermod {-g,-d} 用户名 #修改已有用户的信息
#列:usermod -g 组名 用户名 修改用户的组、usermod -d 目录 用户名 修改登录目录
groupadd {-g 指定新用户组的组标识号(GID)} 用户组
groupdel 用户组 #删除
newgrp 目的用户组 #切换用户的组
passwd {-l 锁定口令,禁用账号,-u 口令解锁,-d 使账号解锁,-f 强制使用户下次登录修改密码} 用户名 #用户密码
id 用户名 #可以查看用户信息
su 用户名 #切换到指定用户
批量添加用户
1. 先编辑一个文本用户文件,格式与etc/passwd一样
2. 以root执行/usr/sbin/newusers < user.txt
3. 将shadow产生的密码解密,然后回写到passwd中,并将passwd的shdow密码删掉,直接输入命令 pwunconv
4. 编辑密码文件,以用户名:密码 的形式
5. 然后/usr/sbin/chpasswd < passwd.txt
6. pwconv
压缩、解压:
tar -选项 文件/目录
-c 生成打包文件
-x 解压缩 #c、x不能同时出现
-z 通过gzip实现解压缩
-v 在过程中显示文件名
-f 指定文件名字
-C 解压到指定目录
-zcvf 压缩文件,-zxvf 解压到当前目录,-zxvf 文件 -C 目录 解压到指定目录
列:tar -zcvf test.tar.gz a.c 压缩a.c文件为test.tar.gz
创建、查看、复制、查找:
mkdir {-m 直接配置权限,-p 将所需目录递归地创建出来上一级也可以,-v 显示出过程} 文件名 #创建文件夹
rmdir 文件名 #只能删除空文件夹,要删除非空文件夹使用rm -rf 文件名
cp 文件 目的文件 #发现目标目录下的存在相同文件,就会提升,直接 \cp xxx 强制覆盖
cat {-n 显示行号内容} 文件名
head 文件 #默认是查看前10行的内容,同时也可以 head -n x 文件名 x为前x行
tail {-f 追踪文件的更新} 文件 #同理tail是显示末尾10行
find 指定目录 -name 文件名 #在指定目录下查询文件
find 指定目录 -user 用户名 #查找属于这个用户的所有文件
find 指定目录 -size {+n 大于,-n 小于,n 等于} #查找对应大小的文件。
find 指定目录 -amin n #在过去n分钟内被读取过
find 指定目录 -anewer 文件名 #比文件 file 更晚被读取过的文件
find 指定目录 -atime n #在过去n天内被读取过的文件
find 指定目录 -cmin n #在过去n分钟内被修改过
find 指定目录 -cnewer 文件名 #比文件file更新的文件
find 指定目录 -ctime n #在过去n天内被修改过的文件
find 指定目录 -type {f 文件,d 目录,l 链接} #按照类型查找
touch 文件名 #修改文件时间属性为当前系统时间,如果指定的文件不存在,则将创建一个新的空白文件。
mv {-i,-f,-n,-u} 源文件/目录 目的文件/目录 #命令用来为文件或目录改名、或将文件或目录移入其它位置。
#-i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件
#-f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
#-n: 不要覆盖任何已存在的文件或目录。
#-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
#列:mv source_directory(目录) dest_file(文件) 错误命令。mv info/ logs 将 info 目录放入 logs 目录中。注意,如果 logs 目录不存在,则该命令将 info 改名为 logs。将 /usr/runoob 下的所有文件和目录移到当前目录下,命令行为:mv /usr/runoob/* .
diff 文件或目录 文件或目录 {-c 显示全部内文,并标出不同之处,-i 不检查大小写的不同,-q 仅显示有无差异,不显示详细的信息 } #用于比较文件的差异
file 文件名 #用于辨识文件类型
磁盘
文件与磁盘
文件系统通常会将权限与属性放在inode中,实际数据放在数据区块中。
- 超级区块:包含inode与数据区的信息,以及其他相关信息。
- indoe:记录文件属性,一个文件占用一个inode,同时会记录文件数据所在的区块号码。
- 数据区块:存放实际数据。
读取到inode,就可以找到文件对应的数据区块,从而读取数据,这种方式叫做索引式文件系统。比如EXT2就是一种索引式文件系统。
在磁盘分区后,还需要进行格式化,操作系统才能使用。
lsblk 命令可以观察磁盘分区状态。
EXT与NTFS、XFS
EXT2、3、4是centos7之前使用的文件系统,在7之后都是使用XFS,而NTFS是windows使用的文件系统。
- EXT:随着磁盘容量变大,格式化十分缓慢,后被XFS替代。
- XFS:日志式文件系统,适合高容量磁盘和大文件。
- NTFS:NTFS是一个日志文件系统,这意味着除了向磁盘中写入信息,该文件系统还会为所发生的所有改变保留一份日志。
命令
df -选项 文件/目录 #命令用于显示目前在 Linux 系统上的文件系统磁盘使用情况统计
-h, --human-readable 使用人类可读的格式
-i, --inodes 列出 inode 资讯,不列出已使用 block
du -选项 文件/目录 #查询指定目录的磁盘占用情况
-s 指定目录大小汇总
-h --human-readable 使用人类可读的格式
-a 包含每个具体文件
--max-depth=1 子目录深度
-c 显示明细和汇总
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值。
iowait:表示CPU等待IO时间占整个CPU周期的百分比。如果iowait值超过50%,或者明显大于%system、%user以及%idle,表示IO可能存在问题。
tps: 每秒进程下发的IO读、写请求数量。
iostat {选项} 时间间隔 次数 #显示CPU和磁盘IO的信息
-c:只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果
-d:单独输出Device结果,不包括cpu结果
-x:输出更详细的io设备统计信息
列:iostat -x -k -d 1 2。每隔1S输出磁盘IO的详细详细,总共采样2次。
系统管理
进程管理
ps -选项 #进程查看
ps -aux
#格式:
#USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
#VSZ: 占用的虚拟记忆体大小
#RSS: 占用的记忆体大小
#TTY: 终端的次要装置号码 (minor device number of tty)
#STAT: 该行程的状态:
ps -elf #ef只打印进程 elf会打印所有的线程
kill -选项 进程号 #杀死进程
kill -1 #重新加载配置
kill -9 #无条件强制终止
kill - 15 #正常终止
top -选项 #正在运行的进程,能够动态监控进程情况
-p 监控指定进程ID的进程
top中输入:
u 可以选择显示用户名下的进程
k 输入pid杀死对应的进程
m 以内存使用率排名
n 以pid排序
q 退出top
-
第一行: 当前时间 up 44days 17:43 共运行了44天17:43分钟。 1个user
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了,后面的三个数分别是1分钟、5分钟、15分钟的负载情况。
-
第二行:略
-
第三行: us — 用户空间占用CPU的百分比。 sy — 内核空间占用CPU的百分比。ni — 改变过优先级的进程占用CPU的百分比 id — 空闲CPU百分比 wa — IO等待占用CPU的百分比 hi — 硬中断(Hardware IRQ)占用CPU的百分比 si — 软中断(Software Interrupts)占用CPU的百分比。
软件管理
源码安装:
- 在执行make时,make会在当前目录下查找makefile,makefile中记录了源代码如何编译,makefile是通过检测程序检测用户环境后生成的,这个检测程序就是configure。configure会检测用户环境是否有合适的编译器、函数库、其他数据。
- 步骤:
- ./configure
- make clean(可选)执行clean程序操作
- make 执行默认操作
- make install 执行install
rpm:red package manager
rpm -选项 文件名
-i install
-v 显示详细信息
-h 显示安装进度
--test 测试软件安装是否有问题,列:rpm -ivh xxx.rpm --test
-q 查看是否安装
-qa 查看所有已安装软件
-qc 列出所有配置文件
-ql 列出文件与目录所在路径
-qR 列出依赖软件的文件
-qf 后面接上文件名,查看该文件属于哪个软件
-e 删除,经常会由于依赖性不成功
yum:基于rpm包管理的shell前端软件包管理器,可以自动处理依赖关系,一次性安装所需依赖的软件包。
yum.repos.d是yum的核心配置文件,指定去那获取软件。
centos-base.repo是基本包,epel是拓展包。
更换为aliyun:
- 备份一份centos-base.repo,删除原有的。
- 下载新的CentOS-Base.repo到/etc/yum.repos.d/:wget xxxxxxx
- 添加EPEL:wget xxxxxx
- 生成新的缓存并安装:yum makecache、yum install
yum info 软件名 #查看已安装软件的信息
yum check-update #列出可更的新软件
yum update #更新所有软件
yum list #列出可安装的软件
yum remove packagename #删除
yum search packagename #查找
yum clean packages #清除缓存下的软件
yum clean headrs #清除缓存下的headr
yum clean oldheadrs #清除缓存下的旧headr
任务调度
at:由atd服务提供,将任务以文本文件写如入/var/spool/at/,然后等待atd服务执行。
工作流程:
- 查找/etc/at.allow,在文件中的用户就可以使用at。
- 若不存在at.allow,就找at.deny,在文件中的不能使用at。
- 如果两个文件都存在,只有root才能使用。
at -选项 TIME
选项:
-m at完成任务后,发email给使用者
-l 列出当前用户的at任务
-d 取消一个at任务
-c 后面接任务号码,显示任务的具体内容
crontab:由crond服务提供,将任务记录到/var/spool/cron/中。crontab的每一项任务会记录到/var/log/cron中。同样有allow和deny两个文件。
crontab -l #列出任务
crontab -e #编辑任务
crontab -r #删除当前用户的任务
编写格式:* * * * * program
列:
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
周一到周五每天下午5:00寄一封信给alex@domain.name
0 6-12/3 * 12 * /usr/bin/backup
在12月内,每天的早上6点到12点,每隔3个小时0分钟执行一次/usr/bin/backup
0 2 * * 5/test.sh (每月周五两点执行test.sh)
crontab -e 其实就是/etc/crontab这个文件,crontab -e可以用于个人需求使用,若是系统维护运维还是使用编辑/etc/crontab的方式。
var/log/ 存放了各种日志,大致可以分为两种,一种是软件开发商自定义的日志文件,还有一种是通过系统产生,如centos的rsyslog.service。日志不会一直保存,通过logrotate工具来自动处理日志问题。
所有经过systemd启动的服务会由system的journal.service以二进制的方式记录下来,然后将这个信息发送给rsyslog.service。
rsyslog的配置文件:/etc/rsyslog.conf
RULES是生成日志的规则,格式:authprive.* /var/log/secure —> facility.level file
系统中有许多种facility,每种facility都对应了许多程序,这些程序的日志都会根据rsyslog.conf的配置将信息保存到对应的log中去。每种facility都有level, rsyslog会根据level来收集log。
- * 表示全都收集
- LOG_DEBUG
- LOG_INFO
- 。。。。。
级别越高,信息越少,越低越多。
当修改完rsyslog.conf后,可以通过kill -1 xxxx,kill -1 可以使得进程不关闭而重新加载,这样就不会影响整个服务。
; 表示并列关系,none表示排除,* 表示全都收集。
综合就是将除了mail、authpriv、cron的其他设备的info级别信息存入log。
logrotate日志轮转:
- 磁盘有限,日志可以无限,logrotate就可以实现将时间比较早的日志清楚掉,从而一直能够保证硬盘空间。
- 主配置文件:/etc/logrotate.conf 程序运行依靠主配置文件,子配置文件和独立参数都会覆盖掉默认配置。
- 子配置文件:/etc/logrotate.d/* 一般在这实现自定义操作,主文件中会include这个文件,这个文件下有许多程序的log文件,我们可以对其进行不同的设置,这样就能有容错机会。
/etc/logrotate.conf:
weekly
#每周对日志文件进行一次轮替
rotate 4
#keep 4 weeks worth of backlogs rotate 4
#保存4个日志文件,也就是说,如果进行了5次日志轮替,就会删除第一个备份曰志
create
#create new (empty) log files after rotating old ones create
#在日志轮替时,自动创建新的日志文件
datexte
#use date as a suffix of the rotated file dateext
#使用日期作为日志轮替文件的后缀
#uncomment this if you want your log files compressed #compress
#日志文件是否压缩。如果取消注释,则日志会在转储的同时进行压缩
#以上日志配置为默认配置,如果需要轮替的日志没有设定独立的参数,那么都会遵循以上参数
#如果轮替曰志配置了独立参数,那么独立参数的优先级更高
#RPM packages drop log rotation information into this directory include /etc/logrotate.d
#包含/etc/logrotate.d/目录中所有的子配置文件。也就是说,会把这个目录中所有的子配置文件读取进来,进行日志轮替
#no packages own wtmp and btmp -- we'11 rotate them here
#以下两个轮替曰志有自己的独立参数,如果和默认的参数冲突,则独立参数生效
/var/log/wtmp {
#以下参数仅对此目录有效
monthly
#每月对日志文件进行一次轮替
create 0664 root utmp
#建立的新日志文件,权限是0664,umask值一共有4组数字,其中第1组数字用于定义特殊权限,我们一般不予考虑,与一般权限有关的是后3组数字。所有者是root,所属组是utmp组
minsize 1M
#日志文件最小轮替大小是1MB。也就是日志一定要超过1MB才会轮替,否则就算时间达到一个月,也不进行曰志轮替
rotate 1
#仅保留一个曰志备份。也就是只保留wtmp和wtmp.1曰志)
/var/log/btmp {
#以下参数只对/var/log/btmp生效
missingok
#如果日志不存在,则忽略该日志的警告信患
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
/etc/logrotate.d/*:
yum实现自定义的设置,notifempty 空文件不论转。
轮转规则:
拿xferlog举例,设置轮转weekly(看时间刚好7天一份),比如今天20201018,过了24点后,系统就会mv xferlog xferlog-20201018,然后touch xferlog,如果rotate 4,就会保存4份,删除掉920那份。
下一篇会总结服务、shell、内核部分。
更多推荐
所有评论(0)