用户

  • 可以查看/etc/passwd文件, 得到系统用户信息

    • 这个目录最早用来存储用户密码的哈希, 但是所有用户都可以访问
    • 现在用户密码的哈希存储在/etc/shadow中, 只有root可以访问
  • 如果执行apt update发现权限不足, 可以使用sudo !!进行补救, 因为!!表示上一条命令

用户组

  • 一组用户的集合, 使用groups命令查看当前用户组
  • 一般用户在创建的时候, 都会创建一个与用户名相同的用户组

添加用户

  • Debian系列使用adduser可以实现添加用户, 添加组, 将用户添加到组
    • 添加用户: sudo adduser 用户名
    • 添加组: sudo adduser --group 组名
    • 将用户添加指定用户组: sudo adduser 用户名 组名
    • 一般创建的用户没有sudo权限, 可以将用户添加到sudo用户组中

文件

文件权限

  • ls -l可以查看文件的详细信息
    • 第一位是文件类型: -表示普通文件, d表示目录
    • 接下来三位是所属用户的权限
    • 再三位是所属用户组的权限
    • 最后三位是其他人的权限

文件层次

  • Linux下所有的文件从/开始, 以树结构的形式, 其他的分区以挂载的形式挂在了树上
目录 内容
/bin 存放程序文件, 所有用户均可用
/boot 存放启动系统的文件
/dev 存放设备文件
/etc 存放系统和配置文件
/home 存放用户的信息
/lib 存放程序库文件
/media, /mnt 都用于挂载其他文件系统, /media用于挂载可移除文件系统, /mnt挂载临时使用的文件系统
/opt 存放额外的程序包, 一些大型 商用程序
/root root用户的家目录
/srv 存放网络服务数据
/usr 大多数软件存放于此
/tmp 临时目录, 所有用户均可使用
/var 存放会发生变化的程序的相关文件

特殊权限位

  • /etc/shadow存储密码, 只有root用户可以查看修改, 但是普通用户可以通过passwd查看和修改自己的密码
    • 这是因为有三个特殊权限位
权限 解释
setuid 以文件所属的用户身份执行此程序
setgid 对文件来说, 以文件所属用户组的身份执行此程序, 对目录来说, 在这个目录下创建的文件的用户组都与目录的用户组一致, 而不是文件本身的用户组
sticky 目录中的所有文件只能由除了root以外的所有者删除或者移动

比如/tmp下, 可以删除修改自己的文件, 无法删除修改别人的文件
ls -l /usr/bin/passwd查看文件, 可看到权限为-rwsr-xr-x, s表示有特殊权限位setuid

实际用户与有效用户

  • 使用sudo命令修改passwd, 文件却知道具体用户是你, 而不是root
  • 这是因为有两个获取当前进程UID的函数, getuid(), geteuid
  • 前者对应实际用户, 后者对应有效用户, 使用sudo命令, 前者是自己, 后者是root

I/O重定向

  • echo "hello world" > file 可以将hello world 输入到file中, 如果不存在则会创建, 如果已存在则覆盖
  • echo "new" >> file 可以将new追加到file中, 如果不存在则创建, 如果已存在则追加

wget

  • 使用HTTP, FTP协议从网上下载
  • 可以在用户注销以后的后台工作, 支持断点续传

curl

  • 可以下载文件, 也可以模拟web请求

文本处理

  • wc file可以统计文本行数, 单词数, 字节数
    • 如果包含中文, 可以使用wc -m file统计宽字符
  • diff file1 file2比较两个不同的文件, 列出差异
    • -b忽略空白字符的数量变化, -w忽略空白字符
  • head, tail查看文本开头末尾
    • head -n 24 f 查看文本开头24行
    • head -24 f 查看文本开头24行
    • tail -c 10 f 查看文本结尾10个字节
    • tail -f file tail命令独有, 持续输出文本末尾新增加的内容
  • grep查找文本内容
    • grep -i "System" f 查找文本中包含System的行
    • grep -R "hello" 递归查找当前目录下包含hello的文件
  • sed替换文本字符串
    • sed 's/hello/world/g' f使用world全局替换文本中的hello输出
    • sed 's/hello/world' f 使用world替换文本第一个hello输出
    • sed -i 's/hello/world/g' f 使用-i表示直接写入文件
    • sed -i.bak 's/hello/world/g' f 使用-i.bak可以备份到f.bak中再写入f

shell

位置变量 含义
$# 命令行参数个数, 不包括$0
$? 最后命令退出代码, 0表示成功, 其他表示失败
$$ 当前进程的PID
$! 最近一个后台运行进程的进程号
$* 所有参数构成一个字符串
$@ 使用双引号扩起所有参数构成字符串
  • read读取用户输入, 使用-p添加提示, 使用-r避免转移字符

  • echo输出, -e解析转义字符, -n结尾不换行

  • sort

选项 功能
-r 倒序
-o 输出指定文件
-u 去除重复
-n 数值排序, 否则是字典序