4.1.cd
cd # 切换到用户主目录
cd ~ # 切换到用户主目录
cd - # 切换到上一个工作目录
cd .. # 切换到上级目录
cd ../.. # 切换到上两级目录
4.2.ls
ls # 列出当前目录可见文件
ls -l # 列出当前目录可见文件详细信息
ls -la # 列出所有文件(包括隐藏)的详细信息
ls -lh # 列出详细信息并以可读大小显示文件大小
ls -lt # 按时间列出文件和文件夹详细信息
ls -ltr # 按修改时间列出文件和文件夹详细信息
ls --color=auto # 列出文件并标记颜色分类
4.3.pwd
pwd 命令用来显示当前目录的绝对路径。
4.4.mkdir
# 在当前目录中创建 zp 和 zp 的子目录 test
mkdir -p zp/test
# 在当前目录中创建 zp 和 zp 的子目录 test;权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问
mkdir -p -m 750 zp/test
4.5.rmdir
# 删除子目录 test 和其父目录 zp
rmdir -p zp/test
4.6.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
4.7.touch
touch 命令有两个功能:一是用于把已存在文件的时间标签更新为系统当前的时间(默认方式),它们的数据将原封不动地保留下来;二是用来创建空文件。
touch ex2
4.8.ln
ln 命令用来为文件创建连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。
注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。
# 将目录 /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
4.9.rename
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 删掉
4.10.stat
stat 命令用于显示文件的状态信息。stat 命令的输出信息比 ls 命令的输出信息要更详细。
stat myfile
4.11.file
file 命令用来探测给定文件的类型。file 命令对文件的检查分为文件系统、魔法幻数检查和语言检查 3 个过程。
file install.log # 显示文件类型
file -b install.log # 不显示文件名称
file -i install.log # 显示 MIME 类型
file -L /var/spool/mail # 显示符号链接的文件类型
4.12.chmod
chmod 命令用来变更文件或目录的权限。在 UNIX 系统家族里,文件或目录权限的控制分别以读取、写入、执行 3 种一般权限来区分,另有 3 种特殊权限可供运用。用户可以使用 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/*
4.13.chown
chown 命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户 D,用户组可以是组名或组 id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
只有文件拥有者和超级用户才可以便用该命令。
# 将目录/usr/meng及其下面的所有文件、子目录的文件主改成 liu
chown -R liu /usr/meng
4.14.locale
locate 命令和 slocate 命令都用来查找文件或目录。
locate 命令其实是 find -name 的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux 系统自动创建这个数据库,并且每天自动更新一次,所以使用 locate 命令查不到最新变动过的文件。为了避免这种情况,可以在使用 locate 之前,先使用 updatedb 命令,手动更新数据库。
locate pwd # 查找和 pwd 相关的所有文件
locate /etc/sh # 搜索 etc 目录下所有以 sh 开头的文件
4.15.find
find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 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"
4.16.cp
cp 命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。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
4.17.scp
scp 命令用于在 Linux 下进行远程拷贝文件的命令,和它类似的命令有 cp,不过 cp 只是在本机进行拷贝不能跨服务器,而且 scp 传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system 时,用 scp 可以帮你把文件移出来。另外,scp 还非常不占资源,不会提高多少系统负荷,在这一点上,rsync 就远远不及它了。虽然 rsync 比 scp 会快一点,但当小文件众多的情况下,rsync 会导致硬盘 I/O 非常高,而 scp 基本不影响系统正常使用。
# 拷贝文件到远程服务器的指定目录
scp @:
scp test.txt [email protected]:/opt
# 拷贝目录到远程服务器的指定目录
scp -r @:
scp -r test [email protected]:/opt
免密码传输
(1)生成 ssh 公私钥对
ssh-keygen -t rsa
(2)将服务器 A 的 \~/.ssh/id_rsa.pub
文件内容复制到服务器 B 的 \~/.ssh/authorized_keys
文件中。
# 服务器 A 上执行以下命令
scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/id_rsa.pub.tmp
# 服务器 B 上执行以下命令
cat ~/.ssh/id_rsa.pub.tmp >> ~/.ssh/authorized_keys
rm ~/.ssh/id_rsa.pub.tmp
4.18.mv
mv 命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source 表示源文件或目录,target 表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
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 # 复制时创建备份
4.19.rm
rm 命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
rm test.txt # 删除文件
rm -i test.txt test2.txt # 交互式删除文件
rm -r * # 删除当前目录下的所有文件和目录
rm -r testdir # 删除目录下的所有文件和目录
rm -rf testdir # 强制删除目录下的所有文件和目录
rm -v testdir # 显示当前删除操作的详情
2.1. cat
cat 命令用于连接文件并打印到标准输出设备上。
cat m1 # 在屏幕上显示文件 ml 的内容
cat m1 m2 # 同时显示文件 ml 和 m2 的内容
cat m1 m2 > file # 将文件 ml 和 m2 合并后放入文件 file 中
2.2. head
head 命令用于显示文件的开头内容。在默认情况下,head 命令显示文件的头部 10 行内容。
tail 命令用于显示文件的尾部内容。在默认情况下,tail 命令显示文件的尾部 10 行内容。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。
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%)可以用下列不同的方法对提示做出回答:
# 显示文件 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/s.log
2.6. sed
sed 是一种流编辑器,它是文本处理工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。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 编辑器完全兼容,而且实现了很多增强功能。
2.8. grep
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
# 在多级目录中对文本递归搜索(程序员搜代码的最爱):
$ 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
tar 命令可以为 linux 的文件和目录创建档案。利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar 最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用 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%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。
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”扩展名的压缩文件
# 将 /home/Blinux/html/ 这个目录下所有文件和文件夹打包为当前目录下的 html.zip
zip -q -r html.zip /home/Blinux/html
2.4. unzip
unzip 命令用于解压缩由 zip 命令压缩的“.zip”压缩包。
unzip test.zip # 解压 zip 文件
unzip -n test.zip -d /tmp/ # 在指定目录下解压缩
unzip -o test.zip -d /tmp/ # 在指定目录下解压缩,如果有相同文件存在则覆盖
unzip -v test.zip # 查看压缩文件目录,但不解压
df 命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为 KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
# 查看系统磁盘设备,默认是 KB 为单位
[root@LinServ-1 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
# 使用 -h 选项以 KB 以上的单位来显示,可读性高
[root@LinServ-1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 140G 27G 106G 21% /
/dev/sda1 996M 61M 884M 7% /boot
tmpfs 1009M 0 1009M 0% /dev/shm
/dev/sdb1 2.7T 209G 2.4T 8% /data1
# 查看全部文件系统
[root@LinServ-1 ~]# df -a
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devpts 0 0 0 - /dev/pts
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
none 0 0 0 - /proc/sys/fs/binfmt_misc
2.3. top
top 命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过 top 命令所提供的互动式界面,用热键可以管理。
free 命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。
free -t # 以总和的形式显示内存的使用信息
free -s 10 # 周期性的查询内存使用信息,每10s 执行一次命令
# 显示内存使用情况
free -m
total used free shared buffers cached
Mem: 2016 1973 42 0 163 1497
-/+ buffers/cache: 312 1703
Swap: 4094 0 4094
2.5. iotop
iotop 命令是一个用来监视磁盘 I/O 使用状况的 top 类工具。iotop 具有与 top 相似的 UI,其中包括 PID、用户、I/O、进程等相关信息。Linux 下的 IO 统计工具如 iostat,nmon 等大多数是只能统计到 per 设备的读写情况,如果你想知道每个进程是如何使用 IO 的就比较麻烦,使用 iotop 命令可以很方便的查看。
Total DISK read: 0.00 B/s | Total DISK write: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> command
1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init [3]
2 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kthreadd]
3 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/0]
4 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/0]
5 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0]
6 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1]
7 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1]
8 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1]
9 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/0]
10 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [events/1]
11 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [khelper]
2572 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [bluetooth]
help 命令用于查看 Shell 内部命令的帮助信息。而对于外部命令的帮助信息只能使用 man 或者 info 命令查看。
whatis 用于查询一个命令执行什么功能。
# 查看 man 命令的简要说明
$ whatis man
# 查看以 loca 开拓的命令的简要说明
$ whatis -w "loca*"
info 是 Linux 下 info 格式的帮助指令。
# 查看 man 命令的详细说明
$ info man
which 命令用于查找并显示给定命令的绝对路径,环境变量 PATH 中保存了查找命令时需要遍历的目录。which 指令会在环境变量$PATH 设置的目录里查找符合条件的文件。也就是说,使用 which 命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
which pwd # 查找命令的路径
说明:which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的!
[root@localhost ~]# which cd
cd: shell built-in command
cd 这个常用的命令竟然找不到啊!为什么呢?这是因为 cd 是 bash 内建的命令!但是 which 默认是找 PATH 内所规范的目录,所以当然一定找不到的!
whereis 命令用来定位指令的二进制程序、源代码文件和 man 手册页等相关文件的路径。
whereis 命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man 说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
whereis git # 将相关的文件都查找出来
man 命令是 Linux 下的帮助指令,通过 man 指令可以查看 Linux 中的指令帮助、配置文件帮助和编程帮助等信息。
$ man date # 查看 date 命令的帮助手册
$ man 3 printf # 查看 printf 命令的帮助手册中的第 3 类
$ man -k keyword # 根据命令中部分关键字来查询命令
2.6.1. man 要点
在 man 的帮助手册中,可以使用 page up 和 page down 来上下翻页。
man 的帮助手册中,将帮助文档分为了 9 个类别,对于有的关键字可能存在多个类别中, 我们就需要指定特定的类别来查看;(一般我们查询 bash 命令,归类在 1 类中)。
man 页面的分类(常用的是分类 1 和分类 3):
前面说到使用 whatis 会显示命令所在的具体的文档类别,我们学习如何使用它
$ whatis printf
printf (1) - format and print data
printf (1p) - write formatted output
printf (3) - formatted output conversion
printf (3p) - print formatted output
printf [builtins](1) - bash built-in commands, see bash(1)
我们看到 printf 在分类 1 和分类 3 中都有;分类 1 中的页面是命令操作及可执行文件的帮助;而 3 是常用函数库说明;如果我们想看的是 C 语言中 printf 的用法,可以指定查看分类 3 的帮助:
$ man 3 printf
curl 命令是一个利用 URL 规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称 curl 为下载工具。作为一款强力工具,curl 支持包括 HTTP、HTTPS、ftp 等众多协议,还支持 POST、cookies、认证、从指定偏移处下载部分文件、用户代理字符串、限速、文件大小、进度条等特征。做网页处理流程和数据检索自动化,curl 可以祝一臂之力。
# 下载文件
$ curl http://man.linuxde.net/text.iso --silent
# 下载文件,指定下载路径,并查看进度
$ curl http://man.linuxde.net/test.iso -o filename.iso --progress
########################################## 100.0%
wget 命令用来从指定的 URL 下载文件。
# 使用 wget 下载单个文件
$ wget http://www.linuxde.net/testfile.zip
telnet 命令用于登录远程主机,对远程主机进行管理。
telnet 192.168.2.10
Trying 192.168.2.10...
Connected to 192.168.2.10 (192.168.2.10).
Escape character is '^]'.
localhost (Linux release 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:44 EST 2012) (1)
login: root
Password:
Login incorrect
ip 命令用来查看或操纵 Linux 主机的路由、网络设备、策略路由和隧道,是 Linux 下较新的功能强大的网络配置工具。
$ ip link show # 查看网络接口信息
$ ip link set eth0 upi # 开启网卡
$ ip link set eth0 down # 关闭网卡
$ ip link set eth0 promisc on # 开启网卡的混合模式
$ ip link set eth0 promisc offi # 关闭网卡的混个模式
$ ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
$ ip link set eth0 mtu 1400 # 设置网卡最大传输单元
$ ip addr show # 查看网卡IP信息
$ ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1
$ ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址
$ ip route show # 查看系统路由
$ ip route add default via 192.168.1.254 # 设置系统默认路由
$ ip route list # 查看路由信息
$ ip route add 192.168.4.0/24 via 192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
$ ip route add default via 192.168.0.254 dev eth0 # 设置默认网关为192.168.0.254
$ ip route del 192.168.4.0/24 # 删除192.168.4.0网段的网关
$ ip route del default # 删除默认路由
$ ip route delete 192.168.1.0/24 dev eth0 # 删除路由
hostname 命令用于查看和设置系统的主机名称。环境变量 HOSTNAME 也保存了当前的主机名。在使用 hostname 命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名。如果需要永久修改主机名,需要同时修改
/etc/hosts
和/etc/sysconfig/network
的相关内容。
$ hostname
AY1307311912260196fcZ
ifconfig 命令被用于查看和配置 Linux 内核中网络接口的网络参数。用 ifconfig 命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。
# 查看网络设备信息(激活状态的)
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3E:00:1E:51
inet addr:10.160.7.81 Bcast:10.160.15.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:61430830 errors:0 dropped:0 overruns:0 frame:0
TX packets:88534 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3607197869 (3.3 GiB) TX bytes:6115042 (5.8 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:56103 errors:0 dropped:0 overruns:0 frame:0
TX packets:56103 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5079451 (4.8 MiB) TX bytes:5079451 (4.8 MiB)
route 命令用来查看和设置 Linux 内核中的网络路由表,route 命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。
# 查看当前路由
route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
112.124.12.0 * 255.255.252.0 U 0 0 0 eth1
10.160.0.0 * 255.255.240.0 U 0 0 0 eth0
192.168.0.0 10.160.15.247 255.255.0.0 UG 0 0 0 eth0
172.16.0.0 10.160.15.247 255.240.0.0 UG 0 0 0 eth0
10.0.0.0 10.160.15.247 255.0.0.0 UG 0 0 0 eth0
default 112.124.15.247 0.0.0.0 UG 0 0 0 eth1
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 # 添加网关/设置网关
route add -net 224.0.0.0 netmask 240.0.0.0 reject # 屏蔽一条路由
route del -net 224.0.0.0 netmask 240.0.0.0 # 删除路由记录
route add default gw 192.168.120.240 # 添加默认网关
route del default gw 192.168.120.240 # 删除默认网关
ssh 命令是 openssh 套件中的客户端连接工具,可以给予 ssh 加密协议实现安全的远程登录服务器。
# ssh 用户名@远程服务器地址
ssh [email protected]
# 指定端口
ssh -p 2211 [email protected]
ssh-keygen 命令用于为 ssh 生成、管理和转换认证密钥,它支持 RSA 和 DSA 两种认证密钥。
firewalld 命令是 Linux 上的防火墙软件(Centos7 默认防火墙)。
2.10.1. firewalld 的基本使用
2.10.2. 使用 systemctl 管理 firewalld 服务
systemctl 是 CentOS7 的服务管理工具中主要的工具,它融合之前 service 和 chkconfig 的功能于一体。
2.10.3. 配置 firewalld-cmd
2.10.4. 在防火墙中开放一个端口
iptables 命令是 Linux 上常用的防火墙软件,是 netfilter 项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。
# 开放指定的端口
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许FTP服务的20端口
iptables -A INPUT -j reject #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问
# 屏蔽IP
iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令是
# 查看已添加的iptables规则
iptables -L -n -v
Chain INPUT (policy DROP 48106 packets, 2690K bytes)
pkts bytes target prot opt in out source destination
5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
191K 90M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
1499K 133M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
4364K 6351M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
pkts bytes target prot opt in out source destination
5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
host 命令是常用的分析域名查询工具,可以用来测试域名系统工作是否正常。
[root@localhost ~]# host www.jsdig.com
www.jsdig.com is an alias for host.1.jsdig.com.
host.1.jsdig.com has address 100.42.212.8
[root@localhost ~]# host -a www.jsdig.com
Trying "www.jsdig.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34671
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.jsdig.com. IN ANY
;; ANSWER SECTION:
www.jsdig.com. 463 IN CNAME host.1.jsdig.com.
Received 54 bytes from 202.96.104.15#53 in 0 ms
nslookup 命令是常用域名查询工具,就是查 DNS 信息用的命令。
[root@localhost ~]# nslookup www.jsdig.com
Server: 202.96.104.15
Address: 202.96.104.15#53
Non-authoritative answer:
www.jsdig.com canonical name = host.1.jsdig.com.
Name: host.1.jsdig.com
Address: 100.42.212.8
nc 命令是 netcat 命令的简称,都是用来设置路由器。
# TCP 端口扫描
[root@localhost ~]# nc -v -z -w2 192.168.0.3 1-100
192.168.0.3: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.0.3] 80 (http) open
(UNKNOWN) [192.168.0.3] 23 (telnet) open
(UNKNOWN) [192.168.0.3] 22 (ssh) open
# UDP 端口扫描
[root@localhost ~]# nc -u -z -w2 192.168.0.1 1-1000 # 扫描192.168.0.3 的端口 范围是 1-1000
ping 命令用来测试主机之间网络的连通性。执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
[root@AY1307311912260196fcZ ~]# ping www.jsdig.com
PING host.1.jsdig.com (100.42.212.8) 56(84) bytes of data.
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=1 ttl=50 time=177 ms
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=2 ttl=50 time=178 ms
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=3 ttl=50 time=174 ms
64 bytes from 100-42-212-8.static.webnx.com (100.42.212.8): icmp_seq=4 ttl=50 time=177 ms
...按Ctrl+C结束
--- host.1.jsdig.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2998ms
rtt min/avg/max/mdev = 174.068/176.916/178.182/1.683 ms
traceroute 命令用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是 40 字节。
traceroute www.58.com
traceroute to www.58.com (211.151.111.30), 30 hops max, 40 byte packets
1 unknown (192.168.2.1) 3.453 ms 3.801 ms 3.937 ms
2 221.6.45.33 (221.6.45.33) 7.768 ms 7.816 ms 7.840 ms
3 221.6.0.233 (221.6.0.233) 13.784 ms 13.827 ms 221.6.9.81 (221.6.9.81) 9.758 ms
4 221.6.2.169 (221.6.2.169) 11.777 ms 122.96.66.13 (122.96.66.13) 34.952 ms 221.6.2.53 (221.6.2.53) 41.372 ms
5 219.158.96.149 (219.158.96.149) 39.167 ms 39.210 ms 39.238 ms
6 123.126.0.194 (123.126.0.194) 37.270 ms 123.126.0.66 (123.126.0.66) 37.163 ms 37.441 ms
7 124.65.57.26 (124.65.57.26) 42.787 ms 42.799 ms 42.809 ms
8 61.148.146.210 (61.148.146.210) 30.176 ms 61.148.154.98 (61.148.154.98) 32.613 ms 32.675 ms
9 202.106.42.102 (202.106.42.102) 44.563 ms 44.600 ms 44.627 ms
10 210.77.139.150 (210.77.139.150) 53.302 ms 53.233 ms 53.032 ms
11 211.151.104.6 (211.151.104.6) 39.585 ms 39.502 ms 39.598 ms
12 211.151.111.30 (211.151.111.30) 35.161 ms 35.938 ms 36.005 ms
netstat 命令用来打印 Linux 中网络系统的状态信息,可让你得知整个 Linux 系统的网络情况。
# 列出所有端口 (包括监听和未监听的)
netstat -a #列出所有端口
netstat -at #列出所有tcp端口
netstat -au #列出所有udp端口
# 列出所有处于监听状态的 Sockets
netstat -l #只显示监听端口
netstat -lt #只列出所有监听 tcp 端口
netstat -lu #只列出所有监听 udp 端口
netstat -lx #只列出所有监听 UNIX 端口
# 显示每个协议的统计信息
netstat -s 显示所有端口的统计信息
netstat -st 显示TCP端口的统计信息
netstat -su 显示UDP端口的统计信息
rpm 命令是 RPM 软件包的管理工具。rpm 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
(1)安装 rpm 包
rpm -ivh xxx.rpm
(2)安装.src.rpm 软件包
这类软件包是包含了源代码的 rpm 包,在安装时需要进行编译
rpm -i xxx.src.rpm
cd /usr/src/redhat/SPECS
rpmbuild -bp xxx.specs #一个和你的软件包同名的specs文件
cd /usr/src/redhat/BUILD/xxx/ #一个和你的软件包同名的目录
./configure #这一步和编译普通的源码软件一样,可以加上参数
make
make install
(3)卸载 rpm 软件包
使用命令 rpm -e 包名
,包名可以包含版本号等信息,但是不可以有后缀.rpm,比如卸载软件包 proftpd-1.2.8-1,可以使用下列格式:
rpm -e proftpd-1.2.8-1
rpm -e proftpd-1.2.8
rpm -e proftpd-
rpm -e proftpd
不可以是下列格式:
rpm -e proftpd-1.2.8-1.i386.rpm
rpm -e proftpd-1.2.8-1.i386
rpm -e proftpd-1.2
rpm -e proftpd-1
有时会出现一些错误或者警告:
... is needed by ...
这说明这个软件被其他软件需要,不能随便卸载,可以用 rpm -e --nodeps 强制卸载
(4)查看与 rpm 包相关的文件和其他信息
rpm -qa # 列出所有安装过的包
yum 命令是在 Fedora 和 RedHat 以及 SUSE 中基于 rpm 的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理 RPM 软件包,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
部分常用的命令包括:
yum install yum-fastestmirror
yum install yumex
yum grouplist
安装
yum install #全部安装
yum install package1 #安装指定的安装包package1
yum groupinsall group1 #安装程序组group1
更新和升级
yum update #全部更新
yum update package1 #更新指定程序包package1
yum check-update #检查可更新的程序
yum upgrade package1 #升级指定程序包package1
yum groupupdate group1 #升级程序组group1
查找和显示
yum info package1 #显示安装包信息package1
yum list #显示所有已经安装和可以安装的程序包
yum list package1 #显示指定程序包安装情况package1
yum groupinfo group1 #显示程序组group1信息yum search string 根据关键字string查找安装包
yum search #查找软件包
删除程序
yum remove #删除程序包package_name
yum groupremove group1 #删除程序组group1
yum deplist package1 #查看程序package1依赖情况
清除缓存
yum clean packages #清除缓存目录下的软件包
yum clean headers #清除缓存目录下的 headers
yum clean oldheaders #清除缓存目录下旧的 headers
yum 的默认源是国外的,下载速度比较慢,所以最好替换为一个国内的 yum 源。
推荐 yum 国内源 | 源地址 |
---|---|
欢迎访问网易开源镜像站 | Centos6:http://mirrors.aliyun.com/repo/Centos-6.repo Centos7:http://mirrors.aliyun.com/repo/Centos-7.repo |
阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 | Centos6:http://mirrors.163.com/.help/CentOS6-Base-163.repo Centos7:http://mirrors.163.com/.help/CentOS7-Base-163.repo |
注意:Cento5 已废弃,只能使用 Index of / 替换,但由于是国外镜像,速度较慢。
替换方法,以 aliyun CentOS7 为例:
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
apt-get 命令是 Debian Linux 发行版中的 APT 软件包管理工具。所有基于 Debian 的发行都使用这个包管理系统。deb 包可以把一个应用的文件包在一起,大体就如同 Windows 上的安装文件。
使用 apt-get 命令的第一步就是引入必需的软件库,Debian 的软件库也就是所有 Debian 软件包的集合,它们存在互联网上的一些公共站点上。把它们的地址加入,apt-get 就能搜索到我们想要的软件。/etc/apt/sources.list 是存放这些地址列表的配置文件,其格式如下:
deb [web 或 ftp 地址][发行版名字] [main/contrib/non-free] 我们常用的 Ubuntu 就是一个基于 Debian 的发行,我们使用 apt-get 命令获取这个列表,以下是我整理的常用命令:
在修改 /etc/apt/sources.list 或者 /etc/apt/preferences 之后运行该命令。
# 更新 apt-get
apt-get update
# 安装一个软件包
apt-get install packagename
# 卸载一个已安装的软件包(保留配置文件)
apt-get remove packagename
# 卸载一个已安装的软件包(删除配置文件)
apt-get –purge remove packagename
# 如果需要空间的话,可以让这个命令来删除你已经删掉的软件
apt-get autoclean apt
# 把安装的软件的备份也删除,不过这样不会影响软件的使用的
apt-get clean
# 更新所有已安装的软件包
apt-get upgrade
# 将系统升级到新版本
apt-get dist-upgrade
cat /etc/redhat-release
(此方法只适合 Redhat 系的 Linux)cat /proc/cpuinfo
lsb_release 不是 bash 默认命令,如果要使用,需要先安装。
安装方法:
yum provides lsb_release
,查看支持 lsb_release 命令的包。yum install -y redhat-lsb-core-4.1-27.el7.centos.1.x86_64
reboot 命令用来重新启动正在运行的 Linux 操作系统。
reboot # 重开机。
reboot -w # 做个重开机的模拟(只有纪录并不会真的重开机)。
exit 命令同于退出 shell,并返回给定值。在 shell 脚本中可以终止当前脚本执行。执行 exit 可使 shell 以指定的状态值退出。若不设置状态值参数,则 shell 以预设值退出。状态值 0 代表执行成功,其他值代表执行失败。
# 退出当前 shell
[root@localhost ~]# exit
logout
# 在脚本中,进入脚本所在目录,否则退出
cd $(dirname $0) || exit 1
# 在脚本中,判断参数数量,不匹配就打印使用方式,退出
if [ "$#" -ne "2" ]; then
echo "usage: $0 "
exit 2
fi
# 在脚本中,退出时删除临时文件
trap "rm -f tmpfile; echo Bye." EXIT
# 检查上一命令的退出码
./mycommand.sh
EXCODE=$?
if [ "$EXCODE" == "0" ]; then
echo "O.K"
fi
shutdown 命令用来系统关机命令。shutdown 指令可以关闭所有程序,并依用户的需要,进行重新开机或关机的动作。
# 指定现在立即关机
shutdown -h now
# 指定 5 分钟后关机,同时送出警告信息给登入用户
shutdown +5 "System will shutdown after 5 minutes"
date 命令是显示或设置系统时间与日期。
# 格式化输出
date +"%Y-%m-%d"
2009-12-07
# 输出昨天日期
date -d "1 day ago" +"%Y-%m-%d"
2012-11-19
# 2 秒后输出
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2012-11-20 14:21.31
# 传说中的 1234567890 秒
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
2009-02-13 23:02:30
# 普通转格式
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
2009/12/12 00:00.00
# apache 格式转换
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
2009-12-05 00:00.37
# 格式转换后时间游走
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
2007-12-05 00:00.37
# 加减操作
date +%Y%m%d # 显示前天年月日
date -d "+1 day" +%Y%m%d # 显示前一天的日期
date -d "-1 day" +%Y%m%d # 显示后一天的日期
date -d "-1 month" +%Y%m%d # 显示上一月的日期
date -d "+1 month" +%Y%m%d # 显示下一月的日期
date -d "-1 year" +%Y%m%d # 显示前一年的日期
date -d "+1 year" +%Y%m%d # 显示下一年的日期
# 设定时间
date -s # 设置当前时间,只有root权限才能设置,其他只能查看
date -s 20120523 # 设置成20120523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 # 设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23" # 这样可以设置全部时间
date -s "01:01:01 20120523" # 这样可以设置全部时间
date -s "2012-05-23 01:01:01" # 这样可以设置全部时间
date -s "20120523 01:01:01" # 这样可以设置全部时间
# 有时需要检查一组命令花费的时间
#!/bin/bash
start=$(date +%s)
nmap man.linuxde.net &> /dev/null
end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.
mount 命令用于挂载文件系统到指定的挂载点。此命令的最常用于挂载 cdrom,使我们可以访问 cdrom 中的数据,因为你将光盘插入 cdrom 中,Linux 并不会自动挂载,必须使用 Linux mount 命令来手动完成挂载。
# 将 /dev/hda1 挂在 /mnt 之下
mount /dev/hda1 /mnt
# 将 /dev/hda1 用唯读模式挂在 /mnt 之下
mount -o ro /dev/hda1 /mnt
# 将 /tmp/image.iso 这个光碟的 image 档使用 loop 模式挂在 /mnt/cdrom 之下
# 用这种方法可以将一般网络上可以找到的 Linux ISO 在不烧录成光碟的情况下检视其内容
mount -o loop /tmp/image.iso /mnt/cdrom
umount 命令用于卸载已经挂载的文件系统。利用设备名或挂载点都能 umount 文件系统,不过最好还是通过挂载点卸载,以免使用绑定挂载(一个设备,多个挂载点)时产生混乱。
# 通过设备名卸载
umount -v /dev/sda1
/dev/sda1 umounted
# 通过挂载点卸载
umount -v /mnt/mymount/
/tmp/diskboot.img umounted
ps 命令用于报告当前系统的进程状态。可以搭配 kill 指令随时中断、删除不必要的程序。ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
# 按内存资源的使用量对进程进行排序
ps aux | sort -rnk 4
# 按 CPU 资源的使用量对进程进行排序
ps aux | sort -nk 3
kill 命令用来删除执行中的程序或工作。kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。程序或工作的编号可利用 ps 指令或 job 指令查看。
# 列出所有信号名称
kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
# 先用 ps 查找进程,然后用 kill 杀掉
ps -ef | grep vim
root 3268 2884 0 16:21 pts/1 00:00:00 vim install.log
root 3370 2822 0 16:21 pts/0 00:00:00 grep vim
kill 3268
kill 3268
-bash: kill: (3268) - 没有那个进程
systemctl 命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令组合到一起。
# 1.启动 nfs 服务
systemctl start nfs-server.service
# 2.设置开机自启动
systemctl enable nfs-server.service
# 3.停止开机自启动
systemctl disable nfs-server.service
# 4.查看服务当前状态
systemctl status nfs-server.service
# 5.重新启动某服务
systemctl restart nfs-server.service
# 6.查看所有已启动的服务
systemctl list -units --type=service
# 7. 开启防火墙 22 端口
iptables -I INPUT -p tcp --dport 22 -j accept
# 8. 彻底关闭防火墙
sudo systemctl status firewalld.service
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
service 命令是 Redhat Linux 兼容的发行版中用来控制系统服务的实用工具,它以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。
service network status
配置设备:
lo eth0
当前的活跃设备:
lo eth0
service network restart
正在关闭接口 eth0: [ 确定 ]
关闭环回接口: [ 确定 ]
设置网络参数: [ 确定 ]
弹出环回接口: [ 确定 ]
弹出界面 eth0: [ 确定 ]
crontab 命令被用来提交和管理用户的需要周期性执行的任务,与 windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
# 每 1 分钟执行一次 command
* * * * * command
# 每小时的第 3 和第 15 分钟执行
3,15 * * * * command
# 在上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 * * * command
# 每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 */2 * * command
# 每个星期一的上午 8 点到 11 点的第 3 和第 15 分钟执行
3,15 8-11 * * 1 command
# 每晚的 21:30 重启 smb
30 21 * * * /etc/init.d/smb restart
# 每月 1、10、22 日的 4 : 45 重启 smb
45 4 1,10,22 * * /etc/init.d/smb restart
# 每周六、周日的 1:10 重启 smb
10 1 * * 6,0 /etc/init.d/smb restart
# 每天 18 : 00 至 23 : 00 之间每隔 30 分钟重启 smb
0,30 18-23 * * * /etc/init.d/smb restart
# 每星期六的晚上 11:00 pm 重启 smb
0 23 * * 6 /etc/init.d/smb restart
# 每一小时重启 smb
* */1 * * * /etc/init.d/smb restart
# 晚上 11 点到早上 7 点之间,每隔一小时重启 smb
* 23-7/1 * * * /etc/init.d/smb restart
# 每月的 4 号与每周一到周三的 11 点重启 smb
0 11 4 * mon-wed /etc/init.d/smb restart
# 一月一号的 4 点重启 smb
0 4 1 jan * /etc/init.d/smb restart
# 每小时执行`/etc/cron.hourly`目录内的脚本
01 * * * * root run-parts /etc/cron.hourly
groupadd 命令用于创建一个新的用户组,新用户组的信息将被添加到系统文件中。
# 建立一个新组,并设置组 ID 加入系统
$ groupadd -g 344 jsdigname
groupdel 命令用于删除指定的用户组,本命令要修改的系统文件包括
/ect/group
和/ect/gshadow
。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
$ groupadd damon # 创建damon用户组
$ groupdel damon # 删除这个用户组
groupmod 命令更改群组识别码或名称。需要更改群组的识别码或名称时,可用 groupmod 指令来完成这项工作。
useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在
/etc/passwd
文本文件中。
# 新建用户加入组
$ useradd –g sales jack –G company,employees # -g:加入主要组、-G:加入次要组
# 建立一个新用户账户,并设置 ID
$ useradd caojh -u 544
userdel 命令用于删除给定的用户,以及与用户相关的文件。若不加选项,则仅删除用户帐号,而不删除相关文件。
userdel 命令很简单,比如我们现在有个用户 linuxde,其 home 目录位于/var
目录中,现在我们来删除这个用户:
$ userdel linuxde # 删除用户linuxde,但不删除其家目录及文件;
$ userdel -r linuxde # 删除用户linuxde,其 home 目录及文件一并删除;
usermod 命令用于修改用户的基本信息。usermod 命令不允许你改变正在线上的使用者帐号名称。当 usermod 命令用来改变 user id,必须确认这名 user 没在电脑上执行任何程序。你需手动更改使用者的 crontab 档。也需手动更改使用者的 at 工作档。采用 NIS server 须在 server 上更动相关的 NIS 设定。
# 将 newuser2 添加到组 staff 中
$ usermod -G staff newuser2
# 修改 newuser 的用户名为 newuser1
$ usermod -l newuser1 newuser
# 锁定账号 newuser1
$ usermod -L newuser1
# 解除对 newuser1 的锁定
$ usermod -U newuser1
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. # 空密码,也就是没有密码;
su 命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。
# 变更帐号为 root 并在执行 ls 指令后退出变回原使用者:
$ su -c ls root
# 变更帐号为 root 并传入`-f`选项给新执行的 shell:
$ su root -f
# 变更帐号为 test 并改变工作目录至 test 的家目录:
$ su -test
sudo 命令用来以其他身份来执行命令,预设的身份为 root。在
/etc/sudoers
中设置了可执行 sudo 指令的用户。若其未经授权的用户企图使用 sudo,则会发出警告的邮件给管理员。用户使用 sudo 时,必须先输入密码,之后有 5 分钟的有效期限,超过期限则必须重新输入
# 指定用户执行命令
$ sudo -u userb ls -l
# 列出目前的权限
$ sudo -l
# 显示sudo设置
$ sudo -L
2.9.1. 给普通用户授权 sudo
假设要给普通用户 mary 配置 sudo 权限:
/etc/sudoers
文件存放了 sudo 的相关用户,但是默认是没有写权限的,所以需要设为可写:chmod u+w /etc/sudoers
mary ALL=(ALL) ALL
,保存并退出,让 mary 具有 sudo 的所有权限/etc/sudoers
的权限恢复到默认状态:chmod u-w /etc/sudoers
2.9.2. 免密码授权 sudo
与给普通用户授权 sudo 类似,区别仅在于第 2 步:mary ALL=(ALL) NOPASSWD: ALL
。