busybox学习

1.概述

1.基本信息

Busybox是一个开源的、轻量级的软件工具集合,旨在提供一个精简的Unix工具集,适用于嵌入式系统和资源受限的环境。它将许多常用的Unix工具(如ls、cp、cat、mv、grep、find、telnet等)合并为一个可执行文件,从而减少了系统的存储空间和资源占用

2.官网

https://busybox.net

3.特点

  1. 精简:Busybox的设计理念是将多个工具合并为一个可执行文件,从而减少了系统的存储空间和资源占用
  2. 可定制性:Busybox提供了许多编译选项,可以根据需求选择需要的工具,并排除不需要的工具,从而进一步减小可执行文件的大小
  3. 兼容性:Busybox的工具与传统的Unix工具具有相似的命令行接口和功能,因此可以方便地替代传统的Unix工具

2.使用方式

1.指令格式

  1. busybox后直接跟命令
   busybox ls
  1. 直接将busybox重命名
   cp busybox tar
  1. 创建符号链接
   ln -s busybox rm

推荐使用第三种,但是busybox中每个命令都创建一个软链接比较麻烦

所以存在一个创建软链接的自动方法:

==busybox编译成功后,执行make install,则会产生一个_install目录,其中包含了busybox及每个命令的软链接==

2.语法格式

Busybox的使用方法与传统的Unix工具类似,Busybox的命令和参数根据具体的工具而定

标准的语法格式为:

busybox [选项] [命令] [参数]

获取帮助信息:

busybox --help

3.优点和缺点

1.优点

  • 量级:可执行文件非常小巧,适用于资源受限的环境
  • 灵活性:提供了许多编译选项,可以根据需求选择需要的工具,并排除不需要的工具
  • 兼容性:Busybox的工具与传统的Unix工具具有相似的命令行接口和功能,可以方便地替代传统的Unix工具
  • 支持交叉编译:Busybox可以在一台主机上进行交叉编译,以生成适用于不同架构的可执行文件
  • Busybox还提供了一些额外的工具,如网络工具、文件系统工具等

2.缺点

  • 功能限制:由于Busybox的设计目标是提供一个精简的工具集,因此某些高级功能可能不支持

3.busybox的编译和安装

这里我是在wsl的下的ubuntu安装成功的示例

关于wsl的配置请参考我的博客配置wsl(Ubuntu) – 梦是现实的延续,现实是梦的终结 (giraffexiu.love)

1.安装依赖

apt update
 apt install gcc g++ libc-dev make libpcre3 libpcre3-dev openssl libssl-dev libsystemd-dev zlib1g-dev libncurses5-dev

2.下载源代码

wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2

3.解压源代码

tar -xvf busybox-1.36.1.tar.bz2

4.进入源代码目录

cd busybox-1.36.1.tar.bz2

5.配置编译选项

make menuconfig

6.按照下面的选择,然后exit退出保存

1.选择

BusyBox Setting->Build Options->[ 选]Build Busybox as a static binary (no shared libs)
Shells->chose your default shell(ash):
BusyBox Setting->[*]Don’t use /usr(否则busybox会安装到ubuntu的/usr下,会覆盖原系统原有的命令)

2.去掉

Coreutils—>sync
Linux System Utilities—>nsenter
Linux System Utilities—>Support mounting NFS filesystems(网络文件系统)
Networking Utilities—>inetd(超级服务器)
busybox settings ->build options ->build with large file support

像下图这样选择

image-20240505173559508
image-20240505173642441

7.编译和安装

make
make install

8.指令一览

指令终端的数据:

busybox配置的终端数据 – 碇シンジ (giraffexiu.love)

9.运行验证

busybox
root@长颈鹿:~/busybox-1.36.1# busybox
BusyBox v1.30.1 (Ubuntu 1:1.30.1-4ubuntu6.4) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2015.
Licensed under GPLv2. See source distribution for detailed
copyright notices.

Usage: busybox [function [arguments]...]
   or: busybox --list[-full]
   or: busybox --install [-s] [DIR]
   or: function [arguments]...

        BusyBox is a multi-call binary that combines many common Unix
        utilities into a single executable.  The shell in this build
        is configured to run built-in utilities without $PATH search.
        You don't need to install a link to busybox for each utility.
        To run external program, use full path (/sbin/ip instead of ip).

Currently defined functions:
        [, [[, acpid, adjtimex, ar, arch, arp, arping, ash, awk, basename, bc, blkdiscard, blockdev, brctl, bunzip2,
        busybox, bzcat, bzip2, cal, cat, chgrp, chmod, chown, chpasswd, chroot, chvt, clear, cmp, cp, cpio, crond,
        crontab, cttyhack, cut, date, dc, dd, deallocvt, depmod, devmem, df, diff, dirname, dmesg, dnsdomainname,
        dos2unix, dpkg, dpkg-deb, du, dumpkmap, dumpleases, echo, ed, egrep, env, expand, expr, factor, fallocate,
        false, fatattr, fdisk, fgrep, find, fold, free, freeramdisk, fsfreeze, fstrim, ftpget, ftpput, getopt, getty,
        grep, groups, gunzip, gzip, halt, head, hexdump, hostid, hostname, httpd, hwclock, i2cdetect, i2cdump, i2cget,
        i2cset, id, ifconfig, ifdown, ifup, init, insmod, ionice, ip, ipcalc, ipneigh, kill, killall, klogd, last,
        less, link, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, logread, losetup, ls,
        lsmod, lsscsi, lzcat, lzma, lzop, md5sum, mdev, microcom, mkdir, mkdosfs, mke2fs, mkfifo, mknod, mkpasswd,
        mkswap, mktemp, modinfo, modprobe, more, mount, mt, mv, nameif, nc, netstat, nl, nologin, nproc, nsenter,
        nslookup, nuke, od, openvt, partprobe, passwd, paste, patch, pidof, ping, ping6, pivot_root, poweroff, printf,
        ps, pwd, rdate, readlink, realpath, reboot, renice, reset, resume, rev, rm, rmdir, rmmod, route, rpm, rpm2cpio,
        run-init, run-parts, sed, seq, setkeycodes, setpriv, setsid, sh, sha1sum, sha256sum, sha512sum, shred, shuf,
        sleep, sort, ssl_client, start-stop-daemon, stat, static-sh, strings, stty, su, sulogin, svc, svok, swapoff,
        swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, taskset, tc, tee, telnet, telnetd, test, tftp,
        time, timeout, top, touch, tr, traceroute, traceroute6, true, truncate, tty, tunctl, ubirename, udhcpc, udhcpd,
        uevent, umount, uname, uncompress, unexpand, uniq, unix2dos, unlink, unlzma, unshare, unxz, unzip, uptime,
        usleep, uudecode, uuencode, vconfig, vi, w, watch, watchdog, wc, wget, which, who, whoami, xargs, xxd, xz,
        xzcat, yes, zcat
root@长颈鹿:~/busybox-1.36.1#

这样就安装成功了

10.常见指令的利用

1.文件系统修复

假设嵌入式设备的文件系统出现了问题,可以使用Busybox中的工具来修复

1.查看可用的文件系统修复工具
busybox --list | grep fsck

会列出Busybox中可用的文件系统修复工具,如fsck.ext2、fsck.ext3等

2.选择适用于文件系统的工具,进行修复
busybox fsck.<文件系统类型> <设备路径>

如果你的文件系统是ext4类型,设备路径是/dev/sda1

busybox fsck.ext4 /dev/sda1

2.网络配置

假设嵌入式设备的文件系统出现了问题,可以使用Busybox中的工具来修复

1.查看可用的文件系统修复工具
busybox --list | grep fsck

会列出Busybox中可用的文件系统修复工具,如fsck.ext2、fsck.ext3等

2.配置网络接口的IP地址和子网掩码
busybox ifconfig <网络接口> <IP地址> netmask <子网掩码>

如果配置eth0接口的IP地址为192.168.1.10,子网掩码为255.255.255.0

busybox ifconfig eth0 192.168.1.10 netmask 255.255.255.0
3.添加默认网关
busybox route add default gw <默认网关IP地址> <网络接口>

如果默认网关为192.168.1.1,并且网络接口为eth0

busybox route add default gw 192.168.1.1 eth0

4.相关命令

1.安装以及登录命令

1.reboot

1.权限:

系统管理者

2.作用

reboot命令的作用是重新启动计算机

3.格式
reboot [-n] [-w] [-d] [-f] [-i]
4.参数
  • -n: 在重开机前不做将记忆体资料写回硬盘的动作
  • -w: 并不会真的重开机,只是把记录写到/var/log/wtmp文件里
  • -d: 不把记录写到/var/log/wtmp文件里(-n这个参数包含了-d)
  • -i: 在重开机之前先把所有与网络相关的装置停止
5.补充
  1. 识别文件系统类型: 在Linux中,不同的文件系统有不同的标识符。一些常见的文件系统类型包括:
  • vfat:用于Windows 95/98的FAT 32文件系统
  • ntfs:Windows NT/2000的文件系统
  • hpfs:OS/2的文件系统
  • ext2、ext3:Linux自身使用的文件系统
  • iso9660:CD-ROM光盘使用的文件系统
  1. 确定设备名称: 在Linux系统中,设备名称通常存储在/dev目录下。设备名称的命名有一定规律,例如:
  • IDE设备:以hd开头,例如/dev/hda代表第一个IDE硬盘
  • SCSI设备:以sd开头,例如/dev/sda代表第一个SCSI硬盘
  • 软盘设备:通常为/dev/fd0 设备名称后面的数字通常代表设备的分区,如/dev/hda1代表第一个IDE硬盘的第一个分区
  1. 查找挂载点: 在进行挂载之前,需要确定挂载点,通常是/mnt目录下的子目录,用于挂载不同类型的设备。可以预先创建一些用于挂载特定设备的子目录,例如/mnt/cdrom/mnt/floppy
  2. 执行挂载命令: 执行挂载命令时,需要指定文件系统类型、设备名称和挂载
  • 软盘mount -t ext2 /dev/fd0 /mnt/floppy
  • CD-ROMmount -t iso9660 /dev/hdc /mnt/cdrom
  • SCSI CD-ROMmount -t iso9660 /dev/sdb /mnt/scdrom
  • SCSI CDRmount -t iso9660 /dev/sdc /mnt/scdr
  1. 自动挂载: 大多数现代Linux发行版支持自动挂载文件系统,当插入存储设备时,系统会自动进行挂载。但有些发行版可能需要手动配置挂载点

2.mount

1.作用

mount命令的作用是加载文件系统,它的用权限是超级用户或/etc/fstab中允许的使用者

2.格式
mount -a [-fv] [-t vfstype] [-n] [-rw][-F] device dir
3.参数
  • -h:显示辅助信息
  • -v:显示信息,通常和-f用来除错
  • -a:将/etc/fstab中定义的所有文件系统挂上
  • -F:这个命令通常和-a一起使用,它会为每一个mount的动作产生一个行程负责执行。在系统需要挂上大量NFS文件系统时可以加快加载的速度
  • -f:通常用于除错。它会使mount不执行实际挂上的动作,而是模拟整个挂上的过程,通常会和-v一起使用
  • -t vfstype:显示被加载文件系统的类型
  • -n:一般而言,mount挂上后会在/etc/mtab中写入一笔资料,在系统中没有可写入文件系统的情况下,可以用这个选项取消这个动作

3.exit

1.权限

所有用户

2.作用

退出系统

3.格式
exit
4.参数

无参数

2.文件处理命令

1.mkdir

1.权限

所有用户

2.作用

建立名称为dirname的子目录,与MS DOS下的md命令类似

3.格式
mkdir [options] 目录名
4.参数
  • -m--mode=模式:设定权限,与chmod类似
  • -p--parents:需要时创建上层目录;如果目录早已存在,则不当作错误
  • -v--verbose:每次创建新目录都显示信息
  • --version:显示版本信息后离开
5.示例

在进行目录创建时可以==设置目录的权限==,此时使用的参数是“-m”

假设要创建的目录名是“tsk”,让所有用户都有rwx(即读、写、执行的权限)

使用以下命令:

$ mkdir -m777 tsk

2.grep

1.权限

所有用户

2.作用
  • 指定文件中搜索特定的内容,并将含有这些内容的行标准输出
  • grep全称是Global Regular ExpressionPrint,表示全局正则表达式版本
3.格式
grep [options]
4.参数
  • -c:只输出匹配行的计数
  • -I:不区分大小写(只适用于单字符)
  • -h:查询多文件时不显示文件名
  • -l:查询多文件时只输出包含匹配字符的文件名
  • -n:显示匹配行及行号
  • -s:不显示不存在或无匹配文本的错误信息
  • -v:显示不包含匹配文本的所有行

这里关于正则表达式的相关知识贴一下我自己的博客:正则表达式 – 碇シンジ (giraffexiu.love)

3.dd

1.作用

dd命令用来复制文件,并根据参数将数据转换和格式化

2.格式
dd [options]
3.参数
  • bs=字节:强迫 ibs=及obs=
  • cbs=字节:每次转换指定的
  • conv=关键字:根据以逗号分隔的关键字表示的方式来转换文件
  • count=块数目:只复制指定的输入数据
  • ibs=字节:每次读取指定的
  • if=文件:读取内容,而非标准输入的数据
  • obs=字节:每次写入指定的
  • of=文件:将数据写入,而不在标准输出显示
  • seek=块数目:先略过以obs为单位的指定的输出数据
  • skip=块数目:先略过以ibs为单位的指定的输入数据
4.示例

dd命令常常用来制作Linux启动盘

使用dd命令写入软盘

$ rdev vmlinuz /dev/hda
$dd if=vmlinuzof=/dev/fd0
  1. 这段代码首先使用 rdev 命令将可引导内核 vmlinuz 中的根设备指向 /dev/hda (这意味着内核在引导时会将根文件系统挂载到 /dev/hda
  2. 接着使用 dd 命令将该内核写入软盘 (其中 if 参数指定了输入文件为 vmlinuz) (of 参数指定了输出文件为 /dev/fd0,即软盘设备)

4.find

1.权限

所有用户

2.作用

在目录中搜索文件

3.格式
find [path][options][expression]
  • path指定目录路径,系统从这里开始沿着目录树向下查找文件
  • 它是一个路径列表,相互用空格分离
  • 如果不写path,那么默认为当前目录
4.参数
  • -depth:使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容
  • -maxdepth levels:表示至多查找到开始目录的第level层子目录。level是一个非负数,如果level是0的话表示仅在当前目录中查找
  • -mindepth levels:表示至少查找到开始目录的第level层子目录
  • -mount:不在其它文件系统(如Msdos、Vfat等)的目录和文件中查找
  • -version:打印版本
5.匹配表达式

[expression]是匹配表达式,是find命令接受的表达式

==find命令的所有操作都是针对表达式==

  • -name:支持统配符*和?
  • -atime n:搜索在过去n天读取过的文件
  • -ctime n:搜索在过去n天修改过的文件
  • -group grpoupname:搜索所有组为grpoupname的文件
  • -user 用户名:搜索所有文件属主为用户名(ID或名称)的文件
  • -size n:搜索文件大小是n个block的文件
  • -print:输出搜索结果,并且打印
6.示例
  1. ==根据文件名查找:==使用 -name 参数,后跟要查找的文件名,可以在整个文件系统中查找指定文件名的文件 例如:
   find / -name lilo.conf
  1. ==快速查找文件:==如果已经知道文件位于某个目录中,可以直接在该目录下进行查找,避免遍历整个文件系统 例如:
   find /etc -name smb.conf
  1. ==根据部分文件名查找:== 使用通配符 * 可以匹配任意字符 例如: find / -name ‘abvd‘ 可以查找文件名中包含 abvd 的所有文件
  2. ==混合查找方式:==可以结合多个条件进行混合查找,使用 -and 连接不同的条件 例如:
   find /etc -size +500000c -and -mtime +1

可以查找 /etc 目录下大于500000字节且在24小时内修改过的文件

5.mv

1.权限

所有用户

2.作用
  1. mv命令用来为文件或目录改名,或者将文件由一个目录移入另一个目录中
  2. 该命令如同DOS命令中的ren和move的组合
3.格式
mv[options] 源文件或目录 目标文件或目录
4.参数
  • -i:交互方式操作 如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答“y”或“n”,这样可以避免误覆盖文件
  • -f:禁止交互操作 mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用
5.示例
  • 将/usr/cbu中的所有文件移到当前目录中==(用“.”表示当前目录)==
  $ mv /usr/cbu/* .
  • 将文件cjh.txt重命名为wjz.txt
  $ mv cjh.txt wjz.txt

6.ls

1.权限

所有用户

2.作用

ls命令用于显示目录内容,类似DOS下的dir命令

3.格式
ls [options][filename]
4.参数
  • -a, --all:不隐藏任何以“.” 字符开始的项目
  • -A, --almost-all:列出除了“ . ”及 “.. ”以外的任何项目
  • --author:印出每个文件著作者
  • -b, --escape:以八进制溢出序列表示不可打印的字符
  • --block-size=大小:块以指定的字节为单位
  • -B, --ignore-backups:不列出任何以 ~ 字符结束的项目
  • -f:不进行排序,-aU参数生效,-lst参数失效
  • -F, --classify:加上文件类型的指示符号 (*/=@| 其中一个)
  • -g:like -l, but do not listowner
  • -G, --no-group:inhibit display ofgroup information
  • -i, --inode:列出每个文件的inode号
  • -I, --ignore=样式:不印出任何符合Shell万用字符的项目
  • -k:即--block-size=1K
  • -l:使用较长格式列出信息
  • -L, --dereference:当显示符号链接的文件信息时,显示符号链接所指示的对象,而并非符号链接本身的信息
  • -m:所有项目以逗号分隔,并填满整行行宽
  • -n, --numeric-uid-gid:类似-l,但列出UID及GID号
  • -N, --literal:列出未经处理的项目名称,例如不特别处理控制字符
  • -p, --file-type:加上文件类型的指示符号 (/=@| 其中一个)
  • -Q, --quote-name:将项目名称括上双引号
  • -r, --reverse:依相反次序排列
  • -R, --recursive:同时列出所有子目录层
  • -s, --size:以块大小为序
5.示例
  • 文件类型开头字符:文件类型的第一个字符是文件的类型标识,常见的类型包括:
  • -(普通文件)
  • d(目录)
  • l(符号链接)
  • b(块设备文件)
  • c(字符设备文件)
  • 权限位:文件的权限位包括三组,每组三位,分别表示文件属主、同组用户和其他用户的权限。每一位代表以下权限:
  • r(读取权限)
  • w(写入权限)
  • x(执行权限,对于目录表示进入权限)
  • 特殊权限位:在权限位中,还有两个特殊的标志位:
  • s:当文件被执行时,将该文件的UID或GID赋予执行进程的UID或GID
  • t:设置标志位,使得文件留在内存中不被换出,通常用于目录,以限制其中的文件只能被特定用户删除
  • 文件大小、生成时间、文件或命令名称:在权限位之后,会显示文件的大小、生成时间以及文件或命令的名称

7.diff

1.权限

所有用户

2.作用

diff命令用于两个文件之间的比较,并指出两者的不同

3.格式
diff [options] 源文件 目标文件
4.参数
  • -n:由第一行开始对所有输出的行数编号
  • -b:和-n相似,只不过对于空白行不编号
  • -s:当遇到有连续两行以上的空白行时,就代换为一行的空白行
5.示例
  • ==显示文本文件内容==:使用 cat 命令可以显示指定文件的内容 例如: cat README 将显示 README 文件的内容
  • ==合并文件内容==:cat 命令可以将多个文件的内容合并输出到一个文件中 例如: cat README INSTALL File1 将会合并 README、INSTALL 和 File1 文件的内容,并输出到标准输出或指定的输出文件中
  • ==对行进行编号==:cat 命令可以对行进行编号,方便阅读和参考(使用 -b 参数可以对非空白行进行编号,而使用 -n 参数可以对所有行进行编号) 例如: cat -b /etc/named.conf 将会对 /etc/named.conf 文件中的非空白行进行编号并显示出来

8.ln

1.权限

所有用户

2.作用

ln命令用来在文件之间创建链接

3.格式
ln [options] 源文件 [链接名]
4.参数
  • -f:链结时先将源文件删除
  • -d:允许系统管理者硬链结自己的目录
  • -s:进行软链结(Symbolic Link)
  • -b:将在链结时会被覆盖或删除的文件进行备份
5.示例

硬链接(Hard Link):

  • 硬链接是通过索引节点来进行的连接,也称为索引节点链接
  • 在Linux文件系统中,每个文件都有一个唯一的索引节点号(Inode Index),多个文件名可以指向同一个索引节点
  • 硬链接允许一个文件拥有多个有效路径名,因此可以使用硬链接来创建多个文件名指向同一文件的情况
  • 硬链接的作用是提供文件的多个访问路径,以及防止“误删”的功能,只有当最后一个链接被删除后,文件的数据块及目录的连接才会被释放,文件才会真正删除

符号链接(Symbolic Link):

  • 符号链接也称为软链接,实际上是特殊类型的文件
  • 在符号链接中,文件实际上是一个文本文件,其中包含了另一个文件的路径信息
  • 符号链接可以跨越文件系统、硬盘甚至网络进行链接,因此具有更大的灵活性
  • 删除符号链接并不会影响源文件,但如果源文件被删除,符号链接就会失效
  • 软链接类似于Windows系统中的快捷方式,提供了更灵活的文件管理方式

3.系统安全命令

1.su

1.权限

除超级用户外,都要使用者密码

2.作用

su的作用是变更为其它使用者的身份

3.格式
su [选项]... [-] [USER [ARG]...]
4.参数
  • -f : –fast:不必读启动文件(如 csh.cshrc 等),仅用于csh或tcsh两种Shell
  • -l : –login:加了这个参数之后,就好像是重新登陆为该使用者一样,大部分环境变量(例如HOME、SHELL和USER等)都是以该使用者(USER)为主,并且工作目录也会改变
  • -m, -p :–preserve-environment:执行su时不改变环境变数
  • -c command:变更账号为USER的使用者,并执行指令(command)后再变回原来使用者
  • USER:欲变更的使用者账号,ARG传入新的Shell参数5
5.示例

变更账号为超级用户,并在执行df命令后还原使用者

su -c df root

2.unmask

1.权限

所有用户

2.作用

umask设置用户文件和目录的文件创建缺省屏蔽值

若将此命令放入profile文件,就可控制该用户后续所建文件的存取许可

告诉系统在创建文件时不给谁存取许可

3.格式
umask [-p] [-S] [mode]
4.参数
  • -S:确定当前的umask设置
  • -p:修改umask 设置
  • [mode]:修改数值
5.示例
umask -S//显示当前状态
u=rwx,g=rx,o=rx
umask -p 177//umask值改为177
umask -S//只有文件所有者具有读写文件的权限
u=rw,g=,o=
6.说明
  1. 传统Unix的umask值是022,这样就可以防止同属于该组的其它用户及别的组的用户修改该用户的文件
  2. 既然每个用户都拥有并属于一个自己的私有组,那么这种“组保护模式”就不在需要了
  3. 严密的权限设定构成了Linux安全的基础,在权限上犯错误是致命的

需要注意的是:

  • umask命令用来设置进程所创建的文件的读写权限,==最保险的值是0077==(即关闭创建文件的进程以外的所有进程的读写权限,表示为==-rw——-==)
  • ~/.bash_profile中,加上一行命令umask 0077可以保证每次启动Shell后, 进程的umask权限都可以被正确设定

3.chgrp

1.权限

超级用户

2.作用

chgrp表示修改一个或多个文件或目录所属的组

3.格式
chgrp [选项]... 组 文件...

或者

chgrp [选项]... --reference=参考文件 文件...
4.参数

-f, –silent, –quiet:去除大部分的错误信息
–reference=参考文件:使用的所属组,而非指定的
-R, –recursive:递归处理所有的文件及子目录
-v, –verbose:处理任何文件都会显示信息

6.说明
  • 改变指定指定文件所属的用户组
  • 其中group可以是用户组ID或者/etc/group文件中用户组的组名
  • 文件名是以空格分开的要改变属组的文件列表(==支持通配符==)
  • 如果用户不是该文件的属主或超级用户,则不能改变该文件的组
7.示例

指令:

改变/opt/local /book/及其子目录下的所有文件的属组为book

操作:

$ chgrp - R book /opt/local /book

4.chmod

1.权限

超级用户

2.作用

chmod命令是非常重要的,用于改变文件或目录的访问权限,用户可以用它控制文件或目录的访问权限

3.格式

chmod命令有两种用法。一种是包含字母和操作符表达式的字符设定法(相对权限设定)

另一种是包含数字的数字设定法(绝对权限设定)

4.字符设定法
chmod [who] [+ | - | =] [mode] 文件名
1.操作对象who可以是下述字母中的任一个或它们的组合
  • u:表示用户,即文件或目录的所有者
  • g:表示同组用户,即与文件属主有相同组ID的所有用户
  • o:表示其它用户
  • a:表示所有用户,它是系统默认值
2.操作符号
  • +:添加某个权限
  • -:取消某个权限
  • =:赋予给定权限,并取消其它所有权限(如果有的话)
3.设置mode的权限可用下述字母的任意组合
  • r:可读
  • w:可写
  • x:可执行
  • X:只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x属性
  • s:文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位
  • t:保存程序的文本到交换设备上
  • u:与文件属主拥有一样的权限
  • g:与和文件属主同组的用户拥有一样的权限
  • o:与其它用户拥有一样的权限
  • 文件名:以空格分开的要改变权限的文件列表,支持通配符
  • 一个命令行中可以给出多个权限方式,其间用逗号隔开
5.数字设定法
1.一般形式
chmod [mode] 文件名
2.数字属性的格式
  • “`
    为3个0到7的八进制数 其顺序是(u)(g)(o)文件名
- 以空格分开的要改变权限的文件列表(支持通配符)

###### 3.数字表示的权限的含义:

0001为所有者的执行权限

0002为所有者的写权限

0004为所有者的读权限

0010为组的执行权限

0020为组的写权限

0040为组的读权限

0100为其他人的执行权限

0200为其他人的写权限

0400为其他人的读权限

1000为粘贴位置位

2000表示假

###### 4.用户和组的id设置

- **设置用户 ID(SUID)**

  当一个可执行文件被设置了 SUID 位,那么当任何用户执行该文件时,该进程将以文件所有者的身份来运行,而不是当前用户的身份

  这对于某些需要以特定权限运行的程序来说是非常有用的

  SUID 位用数字 4 来表示

- **设置组 ID(SGID)**

  当一个可执行文件被设置了 SGID 位,那么当任何用户执行该文件时,该进程将以文件所在组的身份来运行,而不是当前用户的身份

  SGID 位用数字 2 来表示



  ==`4000` 表示 SUID 位被设置,`2000` 表示 SGID 位被设置==

  ==文件权限位的第三位(在权限位的最高位处)用来表示 SUID 位,第六位用来表示 SGID 位==

##### 6.示例

###### 1.一个表格(tem)让所有用户填写,那么必须授权用户对这个文件有读写权限:

#chmod 666 tem

666的计算:

0002为所有者的写权限

0004为所有者的读权限

0020为组的写权限

0040为组的读权限
0200为其他人的写权限

0400为其他人的读权限

这6个数字相加就是666(注以上数字都是八进制数)

###### 2.用chmod数字方法设定文件权限

tem文件的权限是-rw-rw-rw-(用户对这个文件有读写权限)

#chmod a =wx tem

#### 5.chown

##### 1.权限

超级用户

##### 2.作用

更改一个或多个文件或目录的属主和属组

##### 3.格式

chown [选项] 用户或组 文件

##### 4.参数

- --dereference:受影响的是符号链接所指示的对象,而非符号链接本身
- -h, --no-dereference:会影响符号链接本身,而非符号链接所指示的目的地(当系统支持更改符号链接的所有者,此选项才有效)
- --from=目前所有者:目前组只当每个文件的所有者和组符合选项所指定的,才会更改所有者和组。其中一个可以省略,这已省略的属性就不需要符合原有的属性
- -f, --silent, --quiet:去除大部分的错误信息
- -R, --recursive:递归处理所有的文件及子目录
- -v, --verbose:处理任何文件都会显示信息

##### 5.说明

chown 将指定文件的拥有者改为指定的用户或组

- 用户可以是用户名或用户ID
- 组可以是组名或组ID
- 文件是以空格分开的要改变权限的文件列表(支持通配符)

==系统管理员经常使用chown命令,在将文件拷贝到另一个用户的目录下以后,让用户拥有使用该文件的权限==

##### 6.示例

###### 1.把文件shiyan.c的所有者改为wan

$ chown wan shiyan.c

###### 2.把目录/hi及其下的所有文件和子目录的属主改成wan,属组改成users

$ chown – R wan.users /hi

##### 6.chattr

##### 1.权限

超级用户

###### 2.作用

修改ext2和ext3文件系统属性(attribute)

###### 3.格式

chattr [-RV] [-+=AacDdijsSu] [-v version] 文件或目录

##### 4.参数

- -R:递归处理所有的文件及子目录
- -V:详细显示修改内容,并打印输出
- -:失效属性
- +:激活属性
- = :指定属性
- A:Atime,告诉系统不要修改对这个文件的最后访问时间
- S:Sync,一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘
- a:Append Only,系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件
- i:Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件
- D:检查压缩文件中的错误
- d:No dump,在进行文件系统备份时,dump程序将忽略这个文件
- C:Compress,系统以透明的方式压缩这个文件。从这个文件读取时,返回的是解压之后的数据;而向这个文件中写入数据时,数据首先被压缩之后才写入磁盘
- s:Secure Delete,让系统在删除这个文件时,使用0填充文件所在的区域
- u:Undelete,当一个应用程序请求删除这个文件,系统会保留其数据块以便以后能够恢复删除这个文件

##### 5.说明

chattr命令不能保护/、/dev、/tmp、/var目录

##### 6.示例

###### 1.恢复/root目录,即子目录的所有文件

chattr -R +u/root

###### 2.用chattr命令防止系统中某个关键文件被修改

chattr +i /etc/fstab

#### 6.ps

##### 1.权限

所用用户

##### 2.作用

ps显示瞬间进程 (process) 的动态

##### 3.格式

ps [options] [–help]

##### 4.参数

- -A:列出所有的进程
- -l:显示长列表
- -m:显示内存信息
- -w:显示加宽可以显示较多的信息
- -e:显示所有进程
- a:显示终端上的所有进程,包括其它用户的进程
- -au:显示较详细的信息
- -aux:显示所有包含其它使用者的进程

###### 5.示例

查看当前的内存进程(突然出现内存超高占用)

ps aux | sort +5n

### 4.其他相关基础命令

#### tar

##### 1. 权限

通常需要足够的文件系统权限以读取和写入文件。

##### 2. 作用

tar命令用于创建归档文件、提取归档文件以及在归档文件中添加或提取文件。

##### 3. 格式

tar [选项] [文件或目录]

##### 4. 参数

- `-c`:创建归档文件
- `-x`:从归档文件中提取文件
- `-v`:显示操作过程中处理的文件列表
- `-f`:指定归档文件的名称
- `-z`:使用gzip压缩归档文件
- `-j`:使用bzip2压缩归档文件
- `-C`:在指定目录中进行操作

##### 5. 示例

创建一个包含文件和文件夹的.tar文件:

tar -cvf archive.tar file1.txt folder1/

解压缩.tar文件:

tar -xvf archive.tar

创建一个包含文件和文件夹的.tar.gz压缩文件:

tar -czvf archive.tar.gz file1.txt folder1/

解压缩.tar.gz文件:

tar -xzvf archive.tar.gz

#### 2.unzip

##### 1. 权限

通常需要足够的文件系统权限以读取和写入文件

##### 2. 作用

unzip命令用于解压缩zip文件

##### 3. 格式

unzip [选项] 文件.zip

##### 4. 参数

- `-l`:列出压缩文件中的内容列表,不解压缩文件
- `-d 目录`:指定解压缩的目标目录
- `-v`:显示解压缩过程中的详细信息

##### 5. 示例

解压缩zip文件:

unzip archive.zip

解压缩zip文件到指定目录:

unzip archive.zip -d /path/to/destination

#### 3.gunzip

##### 1. 权限

通常需要足够的文件系统权限以读取和写入文件

##### 2. 作用

gunzip命令用于解压缩gzip压缩的文件

##### 3. 格式

gunzip 文件.gz

##### 5. 示例

解压缩gzip文件:

gunzip file.gz
“`

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇