Linux 基本命令
- 一、查看 Linux 命令帮助信息
-
- 1.命令常用用法
- 二、Linux 管理文件目录
-
- 1. Linux 目录结构
-
- 2. Linux 文件属性
-
- 2.1. Linux 文件属于主和属组
- 3. Linux 文件目录管理要点
-
- 3.1. 目录管理
- 3.2. 文件管理
- 3.3. 通用管理文件和目录
- 3. 常用命令
-
- 3.1. cd
- 3.2. ls
- 3.3. pwd
- 3.4. mkdir
- 3.5. rmdir
- 3.6. tree
- 3.7. touch
- 3.8. ln
- 3.9. rename
- 3.10. stat
- 3.11. file
- 3.12. chmod
- 3.13. chown
- 3.14. locate
- 3.15. find
- 3.16. cp
-
- 3.16.1. 参数
- 3.17. scp
-
- 3.17.1. 免密码传输
- 3.18. mv
- 3.19. rm
- 三、Linux 查看编辑文件内容
-
- 1. Linux 文件内容查看编辑要点
- 2. 常用命令
-
- 2.1. cat
- 2.2. head
- 2.3. tail
- 2.4. more
- 2.5. less
- 2.6. sed
- 2.7. vi
- 2.8. grep
- 四、Linux 压缩和解压文件
-
- 1. Linux 文件压缩和解压点
- 2. 常用命令
-
- 2.1. tar
- 2.2. gzip
- 2.3. zip
- 2.4. unzip
- 五、Linux 用户管理
-
- 1. Linux 用户管理要点
- 2. 常用命令
-
- 2.1. groupadd
- 2.2. groupdel
- 2.3. groupmod
- 2.4. useradd
- 2.5. userdel
- 2.6. usermod
- 2.7. passwd
- 2.8. su
- 2.9. sudo
-
- 2.9.1. 授权普通用户 sudo
- 2.9.2. 免密码授权 sudo
- 六、Linux 网络管理
-
- 1. Linux 网络应用要点
- 2. 常用命令
-
- 2.1. curl
- 2.2. wget
- 2.3. telnet
- 2.4. ip
- 2.5. hostname
- 2.6. ifconfig
- 2.7. route
- 2.8. ssh
- 2.9. ssh-keygen
- 2.10. firewalld
-
- 2.10.1. firewalld 的基本使用
- 2.10.2. 使用 systemctl 管理 firewalld 服务
- 2.10.3. 配置 firewalld-cmd
- 2.10.4. 在防火墙上开一个端口
- 2.11. iptables
- 2.12. host
- 2.13. nslookup
- 2.14. nc/netcat
- 2.15. ping
- 2.16. traceroute
- 2.17. netstat
一、查看 Linux 命令帮助信息
Linux 有很多命令,很难背下来。因此,我认为学习 Linux 第一步是了解如何快速检索命令说明。 关键词:help, whatis, info, which, whereis, man
查看 Shell 内部命令的帮助信息 - 使用 help 查看命令的简要说明 - 使用 whatis 查看命令的详细说明 - 使用 info 检查命令的位置 - 使用 which 二进制程序、源代码文件和定位指令 man 手册页等相关文件的路径 - 使用 whereis 查看命令的帮助手册(包括说明、用法等信息) - 使用 man 只记得一些命令关键字 - 使用 man -k
1.命令常用用法
2.1. help help 查看命令 Shell 内部命令的帮助信息。外部命令的帮助信息只能使用 man 或者 info 命令查看。 2.2. whatis whatis 用于查询一个命令执行什么功能。
# 查看 man 简要说明命令 $ whatis man # 查看以 loca 开拓的简要说明命令 $ whatis -w "loca*"
2.3. info info 是 Linux 下 info 格式帮助指令。
# 查看 man 详细说明命令 $ info man
2.4. which which 命令用于搜索和显示给定命令的绝对路径和环境变量 PATH 搜索命令时需要遍历的目录保存在中。which 指令会在环境中变量$PATH 在设置的目录中找到合格的文件。也就是说,使用 which 命令可以看到系统命令是否存在,执行的命令在哪里。
which pwd # 找到命令之路
说明:which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的!
[root@localhost ~]# which cd
cd: shell built-in command
2.5. whereis whereis 命令用来定位指令的二进制程序、源代码文件和 man 手册页等相关文件的路径。 whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man 说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
whereis git # 将相关的文件都查找出来
二、Linux 文件目录管理
1. Linux 目录结构
linux 目录结构是树形结构,其根目录是 / 。一张思维导图说明各个目录的作用:
2. Linux 文件属性
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。 在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组,如:
$ ls -l
total 64
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
实例中,bin 文件的第一个属性用 d
表示。d
在 Linux 中代表该文件是一个目录文件。 在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
- 当为
d
则是目录 - 当为
-
则是文件; - 若是
l
则表示为链接文档(link file); - 若是
b
则表示为装置文件里面的可供储存的接口设备(可随机存取装置); - 若是
c
则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,r
代表可读(read)、w
代表可写(write)、x
代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 -
而已。
每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。
从左至右用 0-9 这些数字来表示。
- 第 0 位确定文件类型
- 第 1-3 位确定属主(该文件的拥有者)拥有该文件的权限。
- 第 4-6 位确定属组(拥有者的同组用户)拥有该文件的权限。
- 第 7-9 位确定其他用户拥有该文件的权限。
- 第 1、4、7 位表示读权限,如果用"r"字符表示,则有读权限,如果用"-"字符表示,则没有读权限。
- 第 2、5、8 位表示写权限,如果用"w"字符表示,则有写权限,如果用"-"字符表示没有写权限。
- 第 3、6、9 位表示可执行权限,如果用"x"字符表示,则有执行权限,如果用"-"字符表示,则没有执行权限。
2.1. Linux 文件属主和属组
$ ls -l
total 64
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
- 对于文件来说,它都有一个特定的拥有者,也就是对该文件具有所有权的用户。
- 同时,在 Linux 系统中,用户是按组分类的,一个用户属于一个或多个组。
- 文件拥有者以外的用户又可以分为文件拥有者的同组用户和其他用户。
- 因此,Linux 系统按文件拥有者、文件拥有者同组用户和其他用户来规定了不同的文件访问权限。
- 在以上实例中,bin 文件是一个目录文件,属主和属组都为 root,属主有可读、可写、可执行的权限;与属主同组的其他用户有可读和可执行的权限;其他用户也有可读和可执行的权限。
3. Linux 文件目录管理要点
3.1. 目录管理
- 切换目录 - 使用 cd
- 查看目录信息 - 使用 ls
- 显示当前目录的绝对路径 - 使用 pwd
- 树状显示目录的内容 - 使用 tree
- 创建目录 - 使用 mkdir
- 删除目录 - 使用 rmdir
3.2. 文件管理
- 创建空文件 - 使用 touch
- 为文件创建连接 - 使用 ln
- 批量重命名 - 使用 rename
- 显示文件的详细信息 - 使用 stat
- 探测文件类型 - 使用 file
- 设置文件或目录的权限 - 使用 chmod
- 设置文件或目录的拥有者或所属群组 - 使用 chown
- 查找文件或目录 - 使用 locate
- 在指定目录下查找文件 - 使用 find
- 查找命令的绝对路径 - 使用 which
- 查找命令的程序、源代码等相关文件 - 使用 whereis
3.3. 文件和目录通用管理
- 复制文件或目录 - 使用 cp
- 复制文件或目录到远程服务器 - 使用 scp
- 移动文件或目录 - 使用 mv
- 删除文件或目录 - 使用 rm
3. 命令常见用法
3.1. cd
cd 命令用来切换工作目录。
参考:http://man.linuxde.net/cd
示例:
cd # 切换到用户主目录
cd ~ # 切换到用户主目录
cd - # 切换到上一个工作目录
cd .. # 切换到上级目录
cd ../.. # 切换到上两级目录
3.2. ls
ls 命令用来显示目录信息。
参考:http://man.linuxde.net/ls
示例:
ls # 列出当前目录可见文件
ls -l # 列出当前目录可见文件详细信息
ls -la # 列出所有文件(包括隐藏)的详细信息
ls -lh # 列出详细信息并以可读大小显示文件大小
ls -lt # 按时间列出文件和文件夹详细信息
ls -ltr # 按修改时间列出文件和文件夹详细信息
ls --color=auto # 列出文件并标记颜色分类
3.3. pwd
pwd 命令用来显示当前目录的绝对路径。
参考:http://man.linuxde.net/pwd
3.4. mkdir
mkdir 命令用来创建目录。
参考:http://man.linuxde.net/mkdir
示例:
# 在当前目录中创建 zp 和 zp 的子目录 test
mkdir -p zp/test
# 在当前目录中创建 zp 和 zp 的子目录 test;权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问
mkdir -p -m 750 zp/test
3.5. rmdir
rmdir 命令用来删除空目录。
参考:http://man.linuxde.net/rmdir
示例:
# 删除子目录 test 和其父目录 zp
rmdir -p zp/test
3.6. tree
tree 命令以树状显示目录的内。
参考:http://man.linuxde.net/tree
示例:
# 列出目录 /private 第一级文件名
tree /private -L 1
/private/
├── etc
├── tftpboot
├── tmp
└── var
# 忽略文件夹
tree -I node_modules # 忽略当前目录文件夹 node_modules
tree -P node_modules # 列出当前目录文件夹 node_modules 的目录结构
tree -P node_modules -L 2 # 显示目录 node_modules 两层的目录树结构
tree -L 2 > /home/www/tree.txt # 当前目录结果存到 tree.txt 文件中
# 忽略多个文件夹
tree -I 'node_modules|icon|font' -L 2
3.7. touch
touch 命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建空文件。
参考:http://man.linuxde.net/touch
示例:
touch ex2
3.8. ln
ln 命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。
🔔 注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。
参考:http://man.linuxde.net/ln
示例:
# 将目录 /usr/mengqc/mub1 下的文件 m2.c 链接到目录 /usr/liu 下的文件 a2.c
cd /usr/mengqc
ln /mub1/m2.c /usr/liu/a2.c
# 在目录 /usr/liu 下建立一个符号链接文件 abc,使它指向目录 /usr/mengqc/mub1
# 执行该命令后,/usr/mengqc/mub1 代表的路径将存放在名为 /usr/liu/abc 的文件中
ln -s /usr/mengqc/mub1 /usr/liu/abc
3.9. rename
rename 命令用字符串替换的方式批量重命名。
参考:http://man.linuxde.net/rename
示例:
# 将 main1.c 重命名为 main.c
rename main1.c main.c main1.c
rename "s/AA/aa/" * # 把文件名中的 AA 替换成 aa
rename "s//.html//.php/" * # 把 .html 后缀的改成 .php 后缀
rename "s/$//.txt/" * # 把所有的文件名都以 txt 结尾
rename "s//.txt//" * # 把所有以 .txt 结尾的文件名的.txt 删掉
3.10. stat
stat 命令用于显示文件的状态信息。stat 命令的输出信息比 ls 命令的输出信息要更详细。
参考:http://man.linuxde.net/stat
示例:
stat myfile
3.11. file
file 命令用来探测给定文件的类型。file 命令对文件的检查分为文件系统、魔法幻数检查和语言检查 3 个过程。
参考:http://man.linuxde.net/file
示例:
file install.log # 显示文件类型
file -b install.log # 不显示文件名称
file -i install.log # 显示 MIME 类型
file -L /var/spool/mail # 显示符号链接的文件类型
3.12. chmod
chmod 命令用来变更文件或目录的权限。在 UNIX 系统家族里,文件或目录权限的控制分别以读取、写入、执行 3 种一般权限来区分,另有 3 种特殊权限可供运用。用户可以使用 chmod 指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
参考:http://man.linuxde.net/chmod
知识扩展:
Linux 用 户分为:拥有者、组群(Group)、其他(other),Linux 系统中,预设的情況下,系统中所有的帐号与一般身份使用者,以及 root 的相关信 息, 都是记录在/etc/passwd
文件中。每个人的密码则是记录在/etc/shadow
文件下。 此外,所有的组群名称记录在/etc/group
內!
linux 文件的用户权限的分析图
-rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
# ↑╰┬╯╰┬╯╰┬╯
# ┆ ┆ ┆ ╰┈ 0 其他人
# ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组
# ┆ ╰┈┈┈┈ u 属组
# ╰┈┈ 第一个字母 `d` 代表目录,`-` 代表普通文件
例:rwx rw- r–
r=读取属性 //值= 4 w=写入属性 //值= 2 x=执行属性 //值= 1
示例:
chmod u+x,g+w f01 # 为文件f01设置自己可以执行,组员可以写入的权限
chmod u=rwx,g=rw,o=r f01
chmod 764 f01
chmod a+x f01 # 对文件f01的u,g,o都设置可执行属性
# 将/home/wwwroot/里的所有文件和文件夹设置为755权限
chmod -R 755 /home/wwwroot/*
3.13. chown
chown 命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户 D,用户组可以是组名或组 id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
只有文件拥有者和超级用户才可以便用该命令。
参考:http://man.linuxde.net/chown
示例:
# 将目录/usr/meng及其下面的所有文件、子目录的文件主改成 liu
chown -R liu /usr/meng
3.14. locate
locate 命令和 slocate 命令都用来查找文件或目录。
locate 命令其实是 find -name 的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux 系统自动创建这个数据库,并且每天自动更新一次,所以使用 locate 命令查不到最新变动过的文件。为了避免这种情况,可以在使用 locate 之前,先使用 updatedb 命令,手动更新数据库。
参考:http://man.linuxde.net/locate_slocate
示例:
locate pwd # 查找和 pwd 相关的所有文件
locate /etc/sh # 搜索 etc 目录下所有以 sh 开头的文件
3.15. find
find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
参考:http://man.linuxde.net/find
# 当前目录搜索所有文件,文件内容 包含 “140.206.111.111” 的内容
find . -type f -name "*" | xargs grep "140.206.111.111"
# 列出当前目录及子目录下所有文件和文件夹
find .
# 在 /home 目录下查找以 .txt 结尾的文件名
find /home -name "*.txt"
# 同上,但忽略大小写
find /home -iname "*.txt"
# 当前目录及子目录下查找所有以 .txt 和 .pdf 结尾的文件
find . -name "*.txt" -o -name "*.pdf"
# 匹配文件路径或者文件
find /usr/ -path "*local*"
# 基于正则表达式匹配文件路径
find . -regex ".*\(\.txt\|\.pdf\)$"
# 同上,但忽略大小写
find . -iregex ".*\(\.txt\|\.pdf\)$"
# 找出 /home 下不是以 .txt 结尾的文件
find /home ! -name "*.txt"
3.16. cp
cp 命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp 命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。
参考:http://man.linuxde.net/cp
示例:
3.16.1. 参数
- 源文件:制定源文件列表。默认情况下,cp 命令不能复制目录,如果要复制目录,则必须使用
-R
选项; - 目标文件:指定目标文件。当“源文件”为多个文件时,要求“目标文件”为指定的目录。
示例:
# 将文件 file 复制到目录 /usr/men/tmp 下,并改名为 file1
cp file /usr/men/tmp/file1
# 将目录 /usr/men下的所有文件及其子目录复制到目录 /usr/zh 中
cp -r /usr/men /usr/zh
# 强行将 /usr/men下的所有文件复制到目录 /usr/zh 中,无论是否有文件重复
cp -rf /usr/men/* /usr/zh
# 将目录 /usr/men 中的以 m 打头的所有 .c 文件复制到目录 /usr/zh 中
cp -i /usr/men m*.c /usr/zh
3.17. scp
scp 命令用于在 Linux 下进行远程拷贝文件的命令,和它类似的命令有 cp,不过 cp 只是在本机进行拷贝不能跨服务器,而且 scp 传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system 时,用 scp 可以帮你把文件移出来。另外,scp 还非常不占资源,不会提高多少系统负荷,在这一点上,rsync 就远远不及它了。虽然 rsync 比 scp 会快一点,但当小文件众多的情况下,rsync 会导致硬盘 I/O 非常高,而 scp 基本不影响系统正常使用。
示例:
# 拷贝文件到远程服务器的指定目录
scp <file> <user>@<ip>:<url>
scp test.txt root@192.168.0.1:/opt
# 拷贝目录到远程服务器的指定目录
scp -r <folder> <user>@<ip>:<url>
scp -r test root@192.168.0.1:/opt
3.17.1. 免密码传输
(1)生成 ssh 公私钥对
ssh-keygen -t rsa
(2)将服务器 A 的 \~/.ssh/id_rsa.pub
文件内容复制到服务器 B 的 \~/.ssh/authorized_keys
文件中。
# 服务器 A 上执行以下命令
scp ~/.ssh/id_rsa.pub root@192.168.0.2:~/.ssh/id_rsa.pub.tmp
# 服务器 B 上执行以下命令
cat ~/.ssh/id_rsa.pub.tmp >> ~/.ssh/authorized_keys
rm ~/.ssh/id_rsa.pub.tmp
3.18. mv
mv 命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source 表示源文件或目录,target 表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
参考:http://man.linuxde.net/mv
示例:
mv file1.txt /home/office/ # 移动单个文件
mv file2.txt file3.txt file4.txt /home/office/ # 移动多个文件
mv *.txt /home/office/ # 移动所有 txt 文件
mv dir1/ /home/office/ # 移动目录
mv /usr/men/* . # 将指定目录中的所有文件移到当前目录中
mv file1.txt file2.txt # 重命名文件
mv dir1/ dir2/ # 重命名目录
mv -v *.txt /home/office # 打印移动信息
mv -i file1.txt /home/office # 提示是否覆盖文件
mv -uv *.txt /home/office # 源文件比目标文件新时才执行更新
mv -vn *.txt /home/office # 不要覆盖任何已存在的文件
mv -f *.txt /home/office # 无条件覆盖已经存在的文件
mv -bv *.txt /home/office # 复制时创建备份
3.19. rm
rm 命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
参考:http://man.linuxde.net/rm
rm test.txt # 删除文件
rm -i test.txt test2.txt # 交互式删除文件
rm -r * # 删除当前目录下的所有文件和目录
rm -r testdir # 删除目录下的所有文件和目录
rm -rf testdir # 强制删除目录下的所有文件和目录
rm -v testdir # 显示当前删除操作的详情
三、Linux 文件内容查看编辑
关键词:
cat
,head
,tail
,more
,less
,sed
,vi
,grep
1. Linux 文件内容查看编辑要点
- 连接文件并打印到标准输出设备 - 使用 cat
- 显示指定文件的开头若干行 - 使用 head
- 显示指定文件的末尾若干行,常用于实时打印日志文件内容 - 使用 tail
- 显示文件内容,每次显示一屏 - 使用 more
- 显示文件内容,每次显示一屏 - 使用 less
- 自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等 - 使用 sed
- 文本编辑器 - 使用 vi
- 使用正则表达式搜索文本,并把匹配的行打印出来 - 使用 grep
2. 命令常见用法
2.1. cat
cat 命令用于连接文件并打印到标准输出设备上。
参考:http://man.linuxde.net/cat
示例:
cat m1 # 在屏幕上显示文件 ml 的内容
cat m1 m2 # 同时显示文件 ml 和 m2 的内容
cat m1 m2 > file # 将文件 ml 和 m2 合并后放入文件 file 中
2.2. head
head 命令用于显示文件的开头内容。在默认情况下,head 命令显示文件的头部 10 行内容。
参考:http://man.linuxde.net/head
2.3. tail
tail 命令用于显示文件的尾部内容。在默认情况下,tail 命令显示文件的尾部 10 行内容。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。
参考:http://man.linuxde.net/tail
示例:
tail file # 显示文件file的最后10行
tail -n +20 file # 显示文件file的内容,从第20行至文件末尾
tail -c 10 file # 显示文件file的最后10个字符
2.4. more
more 命令是一个基于 vi 编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持 vi 中的关键字定位操作。more 名单中内置了若干快捷键,常用的有 H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。
该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:–More–(XX%)可以用下列不同的方法对提示做出回答:
- 按 Space 键:显示文本的下一屏内容。
- 按 Enier 键:只显示文本的下一行内容。
- 按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
- 按 H 键:显示帮助屏,该屏上有相关的帮助信息。
- 按 B 键:显示上一屏内容。
- 按 Q 键:退出 rnore 命令。
参考:http://man.linuxde.net/more
示例:
# 显示文件 file 的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。
more -dc file
# 显示文件 file 的内容,每 10 行显示一次,而且在显示之前先清屏。
more -c -10 file
2.5. less
less 命令的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 命令允许用户向前或向后浏览文件,而 more 命令只能向前浏览。用 less 命令显示文件时,用 PageUp 键向上翻页,用 PageDown 键向下翻页。要退出 less 程序,应按 Q 键。
示例:
less /var/log/shadowsocks.log
2.6. sed
sed 是一种流编辑器,它是文本处理工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
参考:http://man.linuxde.net/sed
示例:
# 替换文本中的字符串
sed 's/book/books/' file
# -n 选项 和 p 命令 一起使用表示只打印那些发生替换的行
sed -n 's/test/TEST/p' file
# 直接编辑文件选项 -i ,会匹配 file 文件中每一行的第一个 book 替换为 books
sed -i 's/book/books/g' file
# 使用后缀 /g 标记会替换每一行中的所有匹配
sed 's/book/books/g' file
# 删除空白行
sed '/^$/d' file
# 删除文件的第2行
sed '2d' file
# 删除文件的第2行到末尾所有行
sed '2,$d' file
# 删除文件最后一行
sed '$d' file
# 删除文件中所有开头是test的行
sed '/^test/'d file
2.7. vi
vi 命令是 UNIX 操作系统和类 UNIX 操作系统中最通用的全屏幕纯文本编辑器。Linux 中的 vi 编辑器叫 vim,它是 vi 的增强版(vi Improved),与 vi 编辑器完全兼容,而且实现了很多增强功能。
参考:http://man.linuxde.net/vi
引申阅读:Vim 入门指南
2.8. grep
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
参考:http://man.linuxde.net/grep
示例:
# 在多级目录中对文本递归搜索(程序员搜代码的最爱):
$ grep "class" . -R -n
# 忽略匹配样式中的字符大小写
$ echo "hello world" | grep -i "HELLO"
# 匹配多个模式:
$ grep -e "class" -e "vitural" file
# 只在目录中所有的.php和.html文件中递归搜索字符"main()"
$ grep "main()" . -r --include *.{
php,html}
# 在搜索结果中排除所有README文件
$ grep "main()" . -r --exclude "README"
# 在搜索结果中排除filelist文件列表里的文件
$ grep "main()" . -r --exclude-from filelist
四、Linux 文件压缩和解压
关键词:
tar
,gzip
,zip
,unzip
1. Linux 文件压缩和解压要点
- 压缩和解压 tar 文件 - 使用 tar
- 压缩和解压 gz 文件 - 使用 gzip
- 压缩和解压 zip 文件 - 分别使用 zip、unzip
2. 命令常见用法
2.1. tar
tar 命令可以为 linux 的文件和目录创建档案。利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar 最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用 tar 命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
参考:http://man.linuxde.net/tar
示例:
tar -cvf log.tar log2012.log # 仅打包,不压缩
tar -zcvf log.tar.gz log2012.log # 打包后,以 gzip 压缩
tar -jcvf log.tar.bz2 log2012.log # 打包后,以 bzip2 压缩
tar -ztvf log.tar.gz # 查阅上述 tar 包内有哪些文件
tar -zxvf log.tar.gz # 将 tar 包解压缩
tar -zxvf log30.tar.gz log2013.log # 只将 tar 内的部分文件解压出来
2.2. gzip
gzip 命令用来压缩文件。gzip 是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出“.gz”扩展名。
gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip 不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和 tar 命令一起构成 Linux 操作系统中比较流行的压缩文件格式。据统计,gzip 命令对文本文件有 60%~ 70%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。
参考:http://man.linuxde.net/gzip
示例:
gzip * # 将所有文件压缩成 .gz 文件
gzip -l * # 详细显示压缩文件的信息,并不解压
gzip -dv * # 解压上例中的所有压缩文件,并列出详细的信息
gzip -r log.tar # 压缩一个 tar 备份文件,此时压缩文件的扩展名为.tar.gz
gzip -rv test/ # 递归的压缩目录
gzip -dr test/ # 递归地解压目录
2.3. zip
zip 命令可以用来解压缩文件,或者对文件进行打包操作。zip 是个使用广泛的压缩程序,文件经它压缩后会另外产生具有“.zip”扩展名的压缩文件。
参考:http://man.linuxde.net/zip
示例:
# 将 /home/Blinux/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip
zip -q -r html.zip /home/Blinux/html
2.4. unzip
unzip 命令用于解压缩由 zip 命令压缩的“.zip”压缩包。
参考:http://man.linuxde.net/unzip
示例:
unzip test.zip # 解压 zip 文件
unzip -n test.zip -d /tmp/ # 在指定目录下解压缩
unzip -o test.zip -d /tmp/ # 在指定目录下解压缩,如果有相同文件存在则覆盖
unzip -v test.zip # 查看压缩文件目录,但不解压
五、Linux 用户管理
关键词:
groupadd
,groupdel
,groupmod
,useradd
,userdel
,usermod
,passwd
,su
,sudo
1. Linux 用户管理要点
- 创建用户组 - 使用 groupadd
- 删除用户组 - 使用 groupdel
- 修改用户组信息 - 使用 groupmod
- 创建用户 - 使用 useradd
- 删除用户 - 使用 userdel
- 修改用户信息 - 使用 usermod
- 设置用户认证信息 - 使用 passwd
- 切换用户 - 使用 su
- 当前用户想执行没有权限执行的命令时,使用其他用户身份去执行 - 使用 sudo
2. 命令常见用法
2.1. groupadd
groupadd 命令用于创建一个新的用户组,新用户组的信息将被添加到系统文件中。
参考:http://man.linuxde.net/groupadd
示例:
# 建立一个新组,并设置组 ID 加入系统
$ groupadd -g 344 jsdigname
2.2. groupdel
groupdel 命令用于删除指定的用户组,本命令要修改的系统文件包括
/ect/group
和/ect/gshadow
。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。参考:http://man.linuxde.net/groupdel
示例:
$ groupadd damon # 创建damon用户组
$ groupdel damon # 删除这个用户组
2.3. groupmod
groupmod 命令更改群组识别码或名称。需要更改群组的识别码或名称时,可用 groupmod 指令来完成这项工作。
参考:http://man.linuxde.net/groupmod
2.4. useradd
useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在
/etc/passwd
文本文件中。参考:http://man.linuxde.net/useradd
示例:
# 新建用户加入组
$ useradd –g sales jack –G company,employees # -g:加入主要组、-G:加入次要组
# 建立一个新用户账户,并设置 ID
$ useradd caojh -u 544
2.5. userdel
userdel 命令用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。
参考:http://man.linuxde.net/userdel
示例:
userdel 命令很简单,比如我们现在有个用户 linuxde,其 home 目录位于/var
目录中,现在我们来删除这个用户:
$ userdel linuxde # 删除用户linuxde,但不删除其家目录及文件;
$ userdel -r linuxde # 删除用户linuxde,其 home 目录及文件一并删除;
2.6. usermod
usermod 命令用于修改用户的基本信息。usermod 命令不允许你改变正在线上的使用者帐号名称。当 usermod 命令用来改变 user id,必须确认这名 user 没在电脑上执行任何程序。你需手动更改使用者的 crontab 档。也需手动更改使用者的 at 工作档。采用 NIS server 须在 server 上更动相关的 NIS 设定。
参考:http://man.linuxde.net/usermod
示例:
# 将 newuser2 添加到组 staff 中 $ usermod -G staff newuser2 # 修改 newuser 的用户名为 newuser1 $ usermod -l newuser1 newuser #
锁定账号 newuser1 $ usermod -L newuser1 # 解除对 newuser1 的锁定 $ usermod -U newuser1
2.7. passwd
passwd 命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
参考:http://man.linuxde.net/passwd
示例:
# 如果是普通用户执行 passwd 只能修改自己的密码。
# 如果新建用户后,要为新用户创建密码,则用 passwd 用户名,注意要以 root 用户的权限来创建。
$ passwd linuxde # 更改或创建linuxde用户的密码;
Changing password for user linuxde.
New UNIX password: # 请输入新密码;
Retype new UNIX password: # 再输入一次;
passwd: all authentication tokens updated successfully. # 成功;
# 普通用户如果想更改自己的密码,直接运行 passwd 即可,比如当前操作的用户是 linuxde。
$ passwd
Changing password for user linuxde. # 更改linuxde用户的密码;
(current) UNIX password: # 请输入当前密码;
New UNIX password: # 请输入新密码;
Retype new UNIX password: # 确认新密码;
passwd: all authentication tokens updated successfully. # 更改成功;
# 比如我们让某个用户不能修改密码,可以用`-l`选项来锁定:
$ passwd -l linuxde # 锁定用户linuxde不能更改密码;
Locking password for user linuxde.
passwd: Success # 锁定成功;
$ su linuxde # 通过su切换到linuxde用户;
$ passwd # linuxde来更改密码;
Changing password for user linuxde.
Changing password for linuxde
(current) UNIX password: # 输入linuxde的当前密码;
passwd: Authentication token manipulation error # 失败,不能更改密码;
$ passwd -d linuxde # 清除linuxde用户密码;
Removing password for user linuxde.
passwd: Success # 清除成功;
$ passwd -S linuxde # 查询linuxde用户密码状态;
Empty password.