第6章 Linux文件与目录
数据截取
持续监测文件中的内容是否变化:tail -f /var/log/message
修改文件时间
ls -l --time=ctime #创建时间
ls -l --time=atime #读取过内容
ls -l --time=ctime #更改过状态
touch -t 202112120000 test #更改创建时间及读取过时间,更改过时间不能更改
umask:文件默认权限
umask
umask -S #以符号的方式来显示
umask 002 #修改默认权限
文件隐藏属性:
chattr:配置文件隐藏属性
chattr [+-=] 文件或目录名称
a:只能增加数据,不能删除也不能改写
i:不能删除,改名,无法写入无法新增数据
chattr +i test
charrt -i test
lsattr:显示文件隐藏属性
lsattr test
----i--------------- test
file:观察文件类型
命令与文件查找
which:脚本文件查找(查找【执行文件】)
which yum
/usr/bin/yum
whereis:文件查找,只找几个特定目录(/bin/sbin,/usr/share/man下面的man page)
whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
whereis -l //查看查找哪些目录
locate/updatedb:文件查找,locate寻找的数据是由已建立的数据库 /var/lib/mlocate/里面的数据查找到的,但是使用有限制,数据库的建立默认每天执行一次,所以新建立的文件会提示找不到,这时需要更新数据库:updatedb
locate temp.txt
/root/temp.txt
find:{}代表find查找到的内容,会被放置到{}位置中,-exec一直到 \;,是关键词,代表find额外操作的开始(-exec)到结束(\;),在这中间的就是find命令的额外操作。因为;在bash中有特殊作用,所以用 \表示转义
find / -name "temp.txt" -exec ls -l {} \;
-rw-r--r--. 1 root root 28 8月 6 10:14 /root/temp.txt
第7章、Linux磁盘与文件系统管理
查询linux系统支持哪些文件格式
ls -l /lib/modules/$(uname -r)/kernel/fs
总用量 20
-rw-r--r--. 1 root root 7784 7月 20 13:38 binfmt_misc.ko.xz
drwxr-xr-x. 2 root root 30 7月 23 22:52 cachefiles
drwxr-xr-x. 2 root root 24 7月 23 22:52 ceph
drwxr-xr-x. 2 root root 24 7月 23 22:52 cifs
查询已加载到内存中的文件系统
cat /proc/filesystems
nodev sysfs
nodev tmpfs
nodev bdev
nodev proc
磁盘分区、格式化、检验与挂载
观察磁盘分区状态:lsblk
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 2.4G 0 part /boot
└─sda2 8:2 0 27.6G 0 part
├─cl-root 253:0 0 25.6G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
UUID:全局唯一标识符
blkid
/dev/sda1: UUID="4f15f6a6-7bcf-4ff2-ad62-59b61a9b0108" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="10da9192-01"
/dev/sda2: UUID="804O30-HMQ0-QYbO-XlUC-swI1-uNBk-9HGIdq" TYPE="LVM2_member" PARTUUID="10da9192-02"
/dev/mapper/cl-root: UUID="6ec566e6-c979-40a6-80c9-f968ad642c53" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/cl-swap: UUID="a5335510-3f68-493d-ad56-9b7253e906cf" TYPE="swap"
磁盘分区:gdisk/fdisk,MBR分区表使用fdisk,GPT分区表使用gdisk,除了last其他都可回车。
gdisk /dev/sda
Command (? for help): n
Partition number (3-128, default 3): 3
First sector (34-2047, default = 34) or {+-}size{KMGTP}: 2047
Last sector (2047-2047, default = 2047) or {+-}size{KMGTP}: 2047
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
按w保存之后需要重启,或者使用partprobe保存
partprobe -s //s:打印信息
格式化磁盘
文件系统格式化:mkfs.xfs /dev/sda2
找出cpu核心数:grep 'processor' /proc/cpuinfo
文件系统挂载与卸载
将目录挂载到其他目录:mount --bind /var /data/var
磁盘文件系统参数自定义
8为主要设备代码(major),0为次要设备代码(minor)
ll /dev/sda*
brw-rw----. 1 root disk 8, 0 8月 12 08:58 /dev/sda
brw-rw----. 1 root disk 8, 1 8月 12 08:58 /dev/sda1
brw-rw----. 1 root disk 8, 2 8月 12 08:58 /dev/sda2
设置开机启动挂载
启动挂载:更改/etc/fstab及/etc/mtab,
特殊设备loop挂载(镜像文件不刻录就挂载使用)
mount -o loop ***.iso /tmp
建立大型文件(可用来建立空文件):dd if=/dev/zero of=/srv/loopdev bs=1M count=512
if:输入文件,/dev/zero是会一直输出0的设备
of:输出文件,将一堆0写入到后面的那个文件中
bs:每个block块的大小
count:总共几个bs
挂载iso文件
mount ***.iso /tmp
使用文件创建内存交换文件
1、新增文件
dd if=/dev/zero of=/tmp/swap bs=1M count=128
2、使用mkswap将/tmp/swap这个文件格式化为内存交换文件格式
mkswap /tmp/swap
3、使用swapon将/tmp/swap启动
swapon /tmp/swap
swapon -s
4、使用swapoff关闭swapfile,并设置自动启动
swapoff /tmp/swap
vim /etc/fstab
swapon -a
swapon -s
第8章、文件与文件系统的压缩
建立镜像文件:mkisofs
mkisofs -r -v -o /tmp/system.img -m /root/etc -graft-points /root/=/root/ /home/=/home/ /etc/=/etc/
将image文件刻录到U盘
dd if=/tmp/system.iso of=/dev/sda
第9章 vim程序编辑器
DOS与linux换行符
DOS换行多了一个^M,所以需要转换
unix2dos -k man_db.conf
unix2dos: 正在转换文件 man_db.conf 为DOS格式...
dos2unix -k -n man_db.conf
dos2unix: 正在转换文件 man_db.conf 为Unix格式...
//将文件转成linux换行符,并保留旧文件
dos2unix -k -n man_db.conf man_db.conf.linux
dos2unix: 正在转换文件 man_db.conf 为Unix格式到 man_db.conf.linux...
语系编码转换
iconv -f big5 -t utf8 test -o test_1
第10章、BASH
Bash shell功能
- 命令别名设置功能
alias lm='ls -al'
查询命令是否为Bash shell内置命令:type
[root@localhost ~]# type ls
ls 是 `ls --color=auto' 的别名
[root@localhost ~]# type -t ls
alias
[root@localhost ~]# type -a ls
ls 是 `ls --color=auto' 的别名
ls 是 /usr/bin/ls
shell变量
- 变量的使用前面要加$:echo
echo ${PATH} //或者echo $PATH
- 设置或者修改变量的内容
name=liu
echo ${name}
- 需要借助其他额外的命令提供所需要的信息,可使用单反引号【``】或【$(命令)】
version=(uname -r)
version=`uname -r`
取消变量
unset name
用法
work="/home/kernel/YL"
cd $home
环境变量的功能
- 观察环境变量:env
- 本shell的进程号:$
- 上个命令执行的返回值:?
- 成功返回0
- 失败返回错误代码
- 主机硬件与内核等级:OSTYPE,HOSTTYPE,MACHTYPE
- 要让变量内容在子进程中使用:export
临时将语系转换成英文
LANG=zh_CN.UTF-8
export LC_ALL=en_US.utf-8
第16章 进程管理与SELinux初探
将进程置于后台执行:&
cp test test &
任务管理:job control
数据流重定向进行管理
tar -cvf /xxx.tar.gz /etc > /tmp.log 2>&1 &
将任务丢到后台中:ctrl + z
查看目前后台任务状态:jobs
[z@localhost ~]$ jobs
[1]+ 已停止 vim /etc/passwd
[z@localhost ~]$ jobs -l
[1]+ 8015 停止 vim /etc/passwd
将任务拿到前台处理:fg
[z@localhost ~]$ fg 1
vim /etc/passwd
[1]+ 已停止 vim /etc/passwd
让任务在后台下的状态变成运行中:bg
[z@localhost ~]$ bg 1
[1]+ vim /etc/passwd &
[1]+ 已停止 vim /etc/passwd
管理后台当中的任务:kill
- kill -15:正常状态退出
- kill -9:强制删除一个不正常的任务
进程管理
top:动态查看程序变化
- -d:进程界面更新的秒数
- -p:指定某个PID
top -d 2
//使用top持续查看该pid
echo $$
top -d 2 -p 12321
killall:删除某个服务
- -i:interaction互动,要删除时,会出现提示字符给使用者
- -I:忽略大小写
killall -i -9 httpd
进程的执行顺序
Priority值与Nice值:进程执行的优先顺序,RPI值越低代表越先执行,PRI是由内核动态调整的,如果要调整进程优先级,只能调整nice值
- nice的值为 -20 ~ 19
PRI(new)= PRI(old)+ nice
nice:给予新的nice值,主要用于执行不重要的后台时,这时可以把优先级调低,比如备份
- -n:后面接数值
给nice值一个 -5,用于执行vim
nice -n 5 vim &
renice:已存在进程nice重新调整
renice [number] PID
查看系统资源信息
free:查看内存使用情况
uname:查看系统与内核相关信息
uptime:查看系统与启动时间与任务负载
netstat:追终网络或者socket文件
dmesg:分析内核产生信息
vmastat:检测系统资源变化
特殊文件与进程
具有SUID/SGID权限的命令执行状态
- SUID仅对二进制程序有效
- 执行者对该程序需要具有X的可执行权限
- 仅在执行过程中有效
- 执行者将具有该程序拥有者的权限
/proc/*代表的意义
每个进程的PID都以目录的形式存在于/proc当中
- cmdline:这个进程被启动的命令串
- environ:这个进程的环境变量内容
查询已使用文件或已执行进程使用的文件
fuser:借由文件(或文件系统)找出正在使用该文件的进程
- -u:除了进程pid之外,同时列出该进程的拥有者
- -m:后面文件名会主动地上提到该文件系统的最底层,对umount不成功很有效
- -v:可以列出每个文件与进程还有命令的完整相关性
- -k:找出使用的pid,试图以SIGKILL这个信号给予该PID
- -i:需与-k配合,删除前提示
fuser -muv /home
fuser -mki /home
lsof:列出被进程所使用的文件名称
- -a:多项需要同时成立显示出结果
- -u:该用户相关进程所使用文件
- +d:后面接目录,找出某个目录下面已经被使用的文件
列出关于root的所有进程所使用的socket文件
lsof -u root -a -U
pidof:找出某个正在执行的进程的pid
pidof systemd rsyslogd
19、启动流程、模块管理与loader
19.3.6、启动前的额外功能修改
- 进入救援模式:
- 启动界面按 e 进入编辑模式,
- 在linux那一行后面加入:systemd.unit=rescue.target
- 按ctrl + x进入系统
19.4 、开机过程的问题总结
19.4.1、忘记密码
1、启动界面按e进入编辑模式
2、linux项目最后加上:rd.break
3、按ctrl + x 开始开机,此时是RAM Disk环境,需要挂载/sysroot
4、查看/sysroot挂载,将它挂载成可读写:mount -o remount rw /sysroot
5、切换根目录:chroot /sysroot
6、更改密码:passwd root
7、变回SElinux安全上下文:touch /.autorelabel
8、exit