把以前的几篇零散的笔记合并到这里了(本来就写的很乱,合并之后更乱了)

这些笔记只是我自己的备忘录,可读性很差,建议不要看了

关机和重启

sync

运行 sync 命令将执行用户的所有还未写入硬盘中的数据写入硬盘
如果要 sync 整个系统的数据需要以 root 权限运行
现在的 shutdown 等命令会自动调用 sync

shutdown

用法:shutdown [-krhc] [时间] [自定义消息]
参数:

  • -k 只发出信息,不进行关机操作
  • -r 重启
  • -h(halt)就是一般的关机
  • -c 取消正在倒计时的 shutdown
    时间的单位默认是分钟

其它命令

  • halt
  • poweroff

查看日期

date命令能看日期,date +%Y/%m/%d格式化输出日期
cal看日历📅

文件压缩

tar

压缩格式对应参数

  • -zgzip
  • -jbzip2
  • -Jxz

创建压缩文件用参数-c,解压用-x
-f后接文件或目录,压缩时-C后接被压缩目录

  • -p保留权限和属性信息,常用于备份
  • -P保留绝对路径(允许根目录存在)
  • --exclude排除文件或目录

cpio

  • cpio -ovcB > 文件或设备备份
  • cpio -ivcdu < 文件或设备还原
  • 'cpio -ivct < 文件或设备`查看
    使用管道给cpio提供数据
    没实操过,有机会再用

gzip,bzip2,xz

单独使用的机会不多,不写了

查找命令帮助信息

查找命令帮助信息的三种方法

  • --help 参数
  • man 查阅手册
  • info Linux上特有的方式

–help 参数

没啥好说的,忘记参数时看一下,也有基本的用法信息

man page

man 界面内的操作

  • 空格或者PgUp/PgDn翻页
  • Home键去首页,End键去尾页
  • /[string]向下查找字符串string,?string向上查找
  • n 下一个结果,N 上一个结果(方向相对于查找命令用的方向)
  • q 退出

查看命令手册:man [分类编号] 命令

man page分类编号的意义

  • 1 一般命令和可执行程序
  • 5 配置文件等的文件格式
  • 8 系统管理命令(如/sbin目录下的那些程序)
    常用的就上面三个,完整的去看man man

列出某个命令所有分类下的man page:man -f 命令

这个只对名称进行精确查找,不会匹配简介内容
whatis等效于man -f,需要建立whatis数据库(root运行mandb来建立数据库)

用关键字搜索man page:man -k 命令

会匹配名称和简介内容,忘记命令全名时挺有用
等效于apropos

info

info 界面内操作

  • N (Next)下一个节点
  • P(Prev)之前一个节点
  • U(Up)上一层
  • Tab 节点间切换
    info比较少用,文档可读性比man page好点,不过覆盖没有那么全

locale的设置

locale列出当前的locale设置
LANG=是输出内容的语系,把这个设置成en_US.utf8终端就不会乱码
LC_xxx是数据的储存格式

bash 的使用

几个文件位置

  • /etc/shells包含了系统中所有可用的shell
  • ~/.bash_history上一次登录以来的1000条命令历史(这次登录的还未写入文件)
  • /etc/profile影响系统中所有bash的全局设置,只有login shell才会读
  • ~/.bash_profile用户的设置,同样只有login shell才会读
  • ~/.bashrc用户登录时运行的配置
  • ~/.bash_logout退出shell时执行的操作

shell欢迎信息

欢迎信息包含在/etc/issue/etc/motd
issue比motd先显示

/etc/issue内反斜线转义符号的含义

man一下agetty然后搜索escape

查询是否为bash内置命令

type 命令或文件可以告诉你一个东西是shell内置命令还是外部程序,它还有几个参数可以获得更详细的信息

快捷键

  • \可以转义Enter键,让命令接着下一行输入
  • ^u/^k删除光标向前/向后的字符串
  • ^a/^e将光标移到最前面/末尾位置

查看变量

  • env列出所有环境变量
  • set列出所有环境变量和自定义变量
  • echo $变量单独输出某个变量

设置变量

  • 变量名=变量直接设置自定义变量
  • export 变量名将变量转为环境变量
  • export 变量名=变量直接设定为环境变量
  • declare与export相反

别名

alias与unalias

命令执行判断依据

  • ;前一个命令执行完,马上执行下一个命令
  • &&前一个命令执行成功才执行下一个命令
  • ||前一个命令执行失败才执行下一个命令

磁盘管理

df

显示文件系统用量

  • df -h以gb,kb为单位
  • df -i以inode数量表示

du

显示磁盘用量

  • du -s只显示总量
  • du -h以gb,kb为单位

查看存储设备信息

  • lsblk(list block device)列出存储设备
  • blkid列出文件系统的uuid
  • parted /dev/sda print列出磁盘分区信息

分区工具

  • gdiskGPT分区表用
  • fdiskMBR分区表用
  • cfdisk交互界面的分区工具

格式化

  • mkfs.ext4 [-b blocksize] [-L lable] /dev/sdaX-b指定区块大小,-L指定名称

mount

不带参数执行会列出所有已挂载的信息,加上-l可以显示Lable名称

  • mount -t指定文件系统种类(用于没有超级块的文件系统如FAT)
  • mount -a挂载/etc/fstab中的所有文件系统(设置了noauto参数的除外)
  • mount -o后接挂载参数,指定为loop可以挂载iso镜像
    利用mkfs. -f可以格式化文件为iso`
  • mount --bind将某个目录挂载到其它目录

mount太复杂了,别的参数以后用到再学

umount

  • -f强制
  • -l立即(比-f还牛逼)
  • -n卸载但不更新/etc/mtab

swap

用交换分区

  • 准备一个分区
  • mkswap
  • swapon
  • free查看使用情况

用交换文件

  • dd if=/dev/zero of=[swap文件] bs=1M count=xxx建立交换文件
  • mkswap
  • swapon
  • swapoff来关闭
    如果用交换文件,写进fstab时不能用 uuid 废话

用户和用户组管理

几个文件

  • /etc/passwd记录用户信息
  • /etc/group记录用户组信息
  • /etc/shadow记录用户密码
  • /etc/gshadow记录用户组密码

查看当前用户的信息

id命令查看UID和GID
finger用户的基本信息
chfg修改用户全名,电话等信息
chsh -s修改shell

有效用户组

groups会列出所有加入的用户组,第一个为有效用户组
newgrp <用户组>切换有效用户组,会进入一个新的shell环境

帐号管理

  • useradd [-u uid] [-g 初始用户组] [-mM] 用户名添加用户
    -m表示建立home目录,-M表示不建立Home目录9系统帐号默认)
    useradd -D输出不带参数时的默认设置
  • usermod用来调整用户
    具体参数见–help
  • useradd删除用户,加上-r连着用户的home目录一起删除

用户组管理

  • groupadd [-g gid] [-r] 用户组名称添加用户组,带上-r时表明添加系统用户组
  • grouddel删除用户组
  • groudmod微调参数
  • gpasswd不带参数时修改用户组密码
  • gpasswd -A 用户 用户组将用户设置为用户组管理员

切换用户

su用来切换用户
su -同时读取login-shell的配置
su -p不读取用户的环境配置(使用当前的环境配置)
su只读取non-login的shell配置

查询用户

列出系统上已登录的用户:

  • w
  • who
    这两个命令的输出不一样,包含的信息基本相同

文件和目录管理

特殊目录

  • -上一个工作目录
  • ~user用户user的home目录

文件管理命令的一些常用的参数

  • pwd -P 显示真实路径而非链接路径
  • ls -S 按文件大小排序
  • ls -t 按最后修改时间排序
  • ls --full-time 显示完整的时间
  • mkdir -p 允许建立多级目录
  • mkdir -m 755 设定创建的目录的权限
  • cp -i 目标文件存在时询问是否覆盖
  • cp -p 复制源文件的权限信息
  • cp -a 复制源文件的所有特性(如最后修改时间)
  • cp -u (update)源文件比目标文件新时才进行复制
  • rm -i 删除前询问
  • mv -i 移动前询问
  • mv -u (update)当目标文件已存在且源文件较新时才进行移动

cp 链接

  • cp -l 创建硬链接(hard link)
  • cp -s 创建软链接(symbolic link)

ln 链接

不带参数为硬链接,带 -s为软链接

获取文件/目录名

  • basename获取文件名
  • dirname获取目录名(不包括文件名)
    常用在shell脚本中

查看文件内容

  • cat -n打印出行号
  • tac反向显示最后一行到第一行
  • less可自己翻页,和看man page时的操作一样
  • head -n 6 文件取出前6行(没参数默认10行)
  • tail取尾巴,和head相对
    可以用管道配合head和less来取出任意一段内容
  • od -t type 文件看非纯文本文件,-t指定输出格式,具体看–help

touch

三个时间

  • mtime(modification time)上一次的文件内容变更时间
  • stime(status time)上一次的文件权限和属性更改的时间
  • atime(access time)上一次的文件被读取的时间

touch -[acdmt] 文件
am对应atime和mtime

文件隐藏属性

只有ext文件系统有这个特性
具体参考chattr和lsattr命令

文件查找

  • which于PATH中查找可执行文件路径
  • which -a列出PATH中所有找到的结果
  • find直接在硬盘上搜索
    find太复杂了,而且一般用不到,不展开说了
  • whereis只查找特定目录,whereis -l列出会搜索的目录
  • locate在自己的数据库里查找,用updatedb更新这个数据库

文件权限

umask

用户在建立文件或目录时的默认权限
输入umask查看,输入umask -S查看具体意义
umask数字表示从777减掉的权限
第一个数字是特殊权限,不是指ugo
设置umask:umask命令后面直接接数字

更改所属用户和用户组

chgrp

用法:chgrp [-R] 用户组 文件或目录
-R表示递归,对目录下所有文件和目录都进行更改

chown

用法:

  • chown [-R] 用户 文件或目录
  • chown [-R] [用户]:[用户组] 文件或目录
    第二钟用法可以同时更改用户和用户组,还可以留空用户名来达到更改用户组的目的
    比如chown :wheel file1 只更改用户组
    其实:换成.也行,但最好不要这样用

chmod

文件权限掩码

  • r:4
  • w:2
  • x:1

还可以用符号:
chmod [-R] [u,g,o,a][+,-,=][r,w,x] 文件或目录
符号的意义:

  • u(user)
  • g(group)
  • o(others)
  • a(all)
  • +,-(加上,减去)
  • =(设定为)

特殊权限

  • 4为SUID
  • 2为SGID
  • 1为SBIT

SUID

  • 只对二进制文件有用
  • 执行者需要有该文件的x权限
  • 执行者将在程序执行过程中获得该程序所有者的权限
    举个栗子,passwd程序

SGID

与SUID类似,获得的是所属用户组的权限

SBIT

(Sticky Bit)

  • 只对目录有用
  • 用户需要对目录有wx权限
  • 该目录下创建的文件和目录仅自己和root能删除
    举个栗子,/tmp

ACL权限

设置ACL权限

使用setacl
参数:

  • -m表示设置后面的权限
  • -x删除后面的权限
  • b删除所有的ACL权限
    范例:
    setacl -m u::rwx file1为file1的所有者设置acl权限u::rwx(用户未指明则为所有者)

权限说明:
u:用户:权限
g:用户组名:权限
m:权限有效权限
d:[u|g]:[用户|用户组名]:[权限]目录下新建的文件继承的权限

执行用户的权限和有效权限的交集才是实际的权限

查看ACL权限

getacl 文件