前言
并非教程,留给自己平时查阅使用。
Linux 文件权限
用户权限是通过创建用户时分配的用户 ID (User ID,通常缩写为 UID)来跟踪的。UID 是数值,每个用户都有唯的 UID,但在登录系统时用的不是 UID,而是登录名。 Linux 系统使用一个专门的文件来将用户的登录名匹配到对应的 UID 值。这个文件就是 /etc/passwd 文件,它包含了一些与用户有关的信息。 root 用户账户是 Linux 系统的管理员,固定分配给它的 UID 是 0。Linux 系统会为各种各样的功能创建不同的用户账户,而这些账户并不是真的用户。这些账户叫作系统账户,是系统上运行的各种服务进程访问资源用的特殊账户。所有运行在后台的服务都需要用一个系统用户账户登录到 Linux 系统. /etc/passwd 文件中还有很多用户登录名和 UID 之外的信息。 /etc/passwd文件的字段包含了如下信息:
展开
1, 登录用户名 |
出于安全考虑,现在,绝大多数 Linux 系统都将用户密码保存在另一个单独的文件中(叫作 shadow 文件,位置在/etc/shadow)。只有特定的程序(比如登录程序)才能访问这个文件. /etc/shadow 文件对 Linux系统密码管理提供了更多的控制。只有root用户才能访问/etc/shadow 文件,这让它比起 /etc/passwd安全许多。 etc/shadow 文件为系统上的每个用户账户都保存了一条记录。 在/et/shadow 文件的每条记录中都有 9 个字段:
展开
1, 与/etc/passwd 文件中的登录名字段对应的登录名 |
passwd 和 chpasswd
改变用户密码的一个简便方法就是用 passwd 命令。 如果只用 passwd 命令,它会改你自己的密码。系统上的任何用户都能改自己的密码, root 用户オ有权限改别人的密码。 -e 选项能强制用户下次登录时修改密码。可以先给用户设置一个简单的密码,之后再强制在下次登录时改成他们能记住的更复杂的密码。 如果需要为系统中的大量用户修改密码,chpasswd 命令可以事半功倍。chpasswd 命令能从标准输入自动读取登录名和密码对(由冒号分割)列表,给密码加密,然后为用户账户设置。也可以用重定向命令来将含有 userid: passwd 对的文件重定向给该命令。比如
chpasswd < users.txt |
chsh、chfn 和 chage
chsh、chfn 和 chage 工具专门用来修改特定的账户信息。chsh 命令用来快速修改默认的用户登录 shell 使用时必须用 shell 的全路径名作为参数,不能只用 shell 名。这个在使用oh-my-zsh时会用到chsh这个指令。
chfn 命令提供了在/etc/passwd文件的备注字段中存储信息的标准方法。chfn命令会将用于 unix 的 finger 命令的信息存进备注字段,而不是简单地存入一些随机文本(比如名字或昵称之类的),或是将备注字段留空。finger 命令可以非常方便地査看 linux 系统上的用户信息
chage命令中有个好用的功能是设置账户的过期日期。有了它,你就能创建在特定日期自动过期的临时用户,再也不需要记住删除用户了!过期的账户跟锁定的账户很相似:账户仍然存在, 但用户无法用它登录。
创建分区
一开始,你必须在存储设备上创建分区来容纳文件系统。分区可以是整个硬盘,也可以是部分硬盘,以容纳虚拟目录的一部分。 fdisk 工具用来帮助管理安装在系统上的任何存储设备上的分区。它是个交互式程序,允许你输人命令来逐步完成硬盘分区操作。 要启动 fdisk 命令,必须指定要分区的存储设备的设备名,另外还得有超级用户权限。
有时候,创建新磁盘分区最麻烦的事情就是找出安装在 Linux 系统中的物理磁盘。Linux 采用了一种标准格式来为硬盘分配设备名称,但是你得熟悉这种格式。对于老式的 IDE 驱动器,Linux 使用的是/dev/hdx。其中x表示一个字母,具体是什么要根据驱动器的检测顺序(第一个驱动器是 a,第二个驱动器是 b,以此类推)。对于较新的 SATA 驱动器和 SCSI 驱动器, Linux使用/dev/sdx。其中的x具体是什么也要根据驱动器的检测顺序(和之前一样,第一个驱动器是 a,第二个驱动器是 b,以此类推)。在格式化分区之前,最好再检查下是否正确指定了驱动器。
使用变量
环境变量
shell 护着一组环境变量,用来记录特定的系统信息。比如系统的名称、登录到系统上的用户名、用户的系统 ID(也称为 UID)、用户的认主目录以及 shell 査找程序的搜索路径。可以用 set 命令来显示一份完整的当前环境变量列表。 在脚本中,可以在环境变量名称之前加上美元符($)来使用这些环境变量。
用户变量
除了环境变量,shell 允许在脚本中定义和使用自己的变量。定义变量允许临时存储数据并在整个脚本中使用,用户变量可以是任何由字母、数字或下划线组成的文本字符串,长度不超过 20 个。用户变量区分大小写,所以变量 Var1 和变量 var1 是不同的。 使用等号将值赋给用户量。在变量、等号和值之间不能出现空格. shell 脚本会自动決定変量值的数据类型。在脚本的整个生命周期里,shell 脚本中定义的变量会一直保持着它们的值,但在 shell 脚本结束时会被删除掉。
变量每次被引用时,都会输出当前赋给它的值。重要的是要记住,引用一个变量值时需要使用美元符,而引用变量来对其进行赋值时则不要使用美元符。没有美元符,shell 会将量名解释成普通的文本字符串.
命令替换
shell 本中最有用的特性之一就是可以从命令输出中提取信息,并将其赋给变量。把输出赋给变量之后,就可以随意在脚本中使用了。这个特性在处理脚本数据时尤为方便。 有两种方法可以将命令输岀赋给变量
1, 反引号字符(‘)
2, $() 格式
命令替换允许你将 shell 命令的输出赋给变量。尽管这看起来并不那么重要,但它却是脚本编程中的一个主要组成部分。
要么用一对反引号把整个命令行命令围起来:
test = 'order' |
要么使用 $() 格式
shell 运行命令替换符号中的命令,并将其输出赋给变量 test. 注意,赋值等号和命令替换字符之间没有空格。
重定向输入和输出
最基本的重定向将命令的输出发送到一个文件中。bash shell 用大于号(>)来完成这项功能. 显示器上出现的命令输出会被保存到指定的输出文件中。
有时,你可能并不想覆盖文件原有内容,而是想要将命令的输出追加到已有文件中,比如你正在创建一个记录系统上某个操作的日志文件。在这种情况下,可以用双大于号(>>)来追加数据
输入重定向
输人重定向和输出重定向正好相反。输入重定向将文件的内容重定向到命令,而非将命令的输出重定向到文件。输入重定向符号是小于号(<)
管道
有时需要将一个命令的输出作为另一个命令的输入, 这个过程叫作管道连接(piping),管道符号是单个竖线(|)。
管道被放在命令之间,将一个命令的输出重定向到另一个命令中
command | command2 |
Linux 系统实际上会同时运行这两个命令,在系统内部将它们连接起来。在第一个命令产生输出的同时,输出会被立即送给第二个命令。数据传输不会用到任何中间文件或缓冲区。
结构化命令
过某些命令。这样的命令通常称为结构化命令(structured command/“许多程序要求对 shel 脚本中的命令施加一些逻辑流程控制。有一类命令会根据条件使脚本跳
if-then 语句
最基本的结构化命令就是 if-then 语句。if-then 语句有如下格式。
if command |
bash shelll 的 if 语句会运行后面的那个命令。如果该命令的退出状态码是 0(该命令成功运行),位于 then 部分的命令就会被执行。如果该命令的退出状态码是其他值,then部分的命令就不会被执行,bash shell 继续执行脚本中的下一个命令。fi 语句用来表示 if-then 语句到此结東
if-then-e1se 语句
在if-then 语句中,不管命令是否成功执行,你都只有一种选择。如果命令返回一个非零退出状态码,bash shelll 继续执行脚本中的下一条命令。在这种情况下,如果能够执行另一组命令就好了。这正是 if-then-else 语句的作用。
技巧
1, 要想知道系统中有哪些文件,可以使用列表命令(ls)。本节将描述ls命令和可用来格式化 其输出信息的选项。 要把隐藏文件和普通文件及目录一起显示出来,就得用到-a参数。 -R参数是ls命令可用的另一个参数,叫作递归选项。它列出了当前目录下包含的子目录中的文件。如果目录很多,这个输出就会很长。
2, 在基本的输出列表中,ls命令并未输出太多每个文件的相关信息。要显示附加信息,另一个常用的参数是-l。-l参数会产生长列表格式的输出,包含了目录中每个文件的更多相关信息。 这种长列表格式的输出在每一行中列出了单个文件或目录。除了文件名,输出中还有其他有用信息。
3, 文件类型,比如目录(d)、文件(-)、字符型文件(c)或块设备(b); ls命令还支持在命令行中定义过滤器。它会用过滤器来决定应该在输出中显示哪些文件 或目录。 这个过滤器就是一个进行简单文本匹配的字符串。可以在要用的命令行参数之后添加这个过滤器: 当用户指定特定文件的名称作为过滤器时,ls命令只会显示该文件的信息。ls命令能够识别标准通配符,并在过滤器中用它们进行模式匹配. 问号(?)代表一个字符;星号(*)代表零个或多个字符。 在过滤器中使用星号和问号被称为文件扩展匹配(file globbing),指的是使用通配符进行模式匹配的过程。通配符正式的名称叫作元字符通配符(metacharacter wildcards)。除了星号和问号之外,还有更多的元字符通配符可用于文件扩展匹配。可以使用中括号。 另外,可以使用感叹号(!)将不需要的内容排除在外。
4, tree工具。它能够以一种美观的方式展示目录、子目录及其中的文件。 file命令能够探测文件的内部,并决定文件是什么类型的: tail命令会显示文件最后几行的内容(文件的“尾部”)。默认情况下,它会显示文件的末尾10行。 可以向tail命令中加入-n参数来修改所显示的行数。 -f参数是tail命令的一个突出特性。它允许你在其他进程使用该文件时查看文件的内容。 tail命令会保持活动状态,并不断显示添加到文件中的内容。这是实时监测系统日志的绝妙方式。
5, head命令,顾名思义,会显示文件开头那些行的内容。默认情况下,它会显示文件前10行的文本. touch命令非常有用,可以创建空文件和变更已有文件的访问时间或修改时间。
6, 有时你需要知道在某个设备上还有多少磁盘空间。df命令可以让你很方便地查看所有已挂载磁盘的使用情况。 df命令有一些命令行参数可用,但基本上不会用到。一个常用的参数是-h。它会把输出中的磁盘空间按照用户易读的形式显示
7, 如果在卸载设备时,系统提示设备繁忙,无法卸载设备,通常是有进程还在访问该设备或使用该设备上的文件。 这时可用lsof命令获得使用它的进程信息,然后在应用中停止使用该设备或停止该进程。
8, du命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。这一方法可用来快速判断系统上某个目录下是不是有超大文件。
参考
[1] 《Linux 命令行与 shell 脚本编程大全》