前言

所谓Shell(壳),一般是指由操作系统提供的,用于计算机用户向操作系统输入相关指令并得到结果的程序。Shell可以字符形式的,也可以是图形界面形式的。
Shell可以通过其条件语句和循环语句等,把一系列linux命令结合在一起,形成一个相当于面向过程的程序。
在windows系统中见到的桌面即explorer.exe(资源管理器)是图形shell,而cmd就是命令行shell(Command shell)。
基础命令行和Shell都可以操作Linux系统,区别在于基础命令行(ls、cd等),是一种单一的操作;Shell可以比基础命令行更复杂,是一种组合型的操作。相比基础命令拥有了面向过程的概念。
图片

常用命令

命令开头的符号# 代表root用户;$ 代表普通用户。
不同参数之间可以直接简写;如-r -t可以直接简写成-rt

文件类

ls(目录)

列出目录内容。
参数:
-a 显示所有文件,包括隐藏的
-l 长格式列出信息
-i 显示文件inode
-t 按修改时间排序
-r 按修改时间倒序排序
示例:

1
2
3
4
5
6
7
8
9
10
11
按修改时间排序:
# ls -t

按修改时间倒序排序:
# ls -rt

长格式列出:
# ls -l

查看文件inode:
# ls -i file

cat(打印)

连接文件和标准输出打印
参数:
-A 查看所有内容
-b 显示非空行行号
-n 显示所有行行号
-T 显示tab,用^I表示
-E 显示以$结尾
示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
连接两个文件:
# cat a z
# cat << EOF
> 999
> ahzoo
> EOF
999
ahzoo

将eof标准输入作为cat标准输出再写到z.txt:
# cat > z.txt << eof
> 999
> ahzoo
> eof

touch(修改)

修改文件或者目录的时间属性。若文件不存在,会自动创建一个新的文件。

参数:

-a 修改文件的读取时间记录。

-m 改修改文件的修改时间记录。

-c 假如文件不存在,不会创建新的文件。与 --no-create 的效果一样

示例:

1
# touch ahzoo.txt                #修改文件时间属性为当前系统时间,若文件不存在则新建

tail(查看)

查看文件的内容,默认显示最后 10 行

参数:

-f 循环读取,常用于查阅正在改变的日志文件

-q 不显示处理信息

-v 显示详细的处理信息

-c<数目> 显示的字节数

-n<行数> 显示文件的尾部 n 行内容

示例:

1
2
3
4
5
6
7
# tail ahzoo.log         # 默认显示最后 10 行

# tail -f ahzoo.log # 持续追踪跟踪ahzoo日志文件的增长情况

# tail -n +10 ahzoo.log # 显示第 10 行至文件末尾的内容

# tail -c 9 ahzoo.log # 显示文件最后9行的内容

wc(统计)

统计文件行数、字节、字符数
参数:
-c 打印文件字节数
-m 打印文件字符数
-l 打印多少行
示例:

1
# wc -l z.txt 						#统计文件多少行

cp(复制)

参数:
-a 归档
-b 目标文件存在创建备份,备份文件是文件名跟~
-f 强制复制文件或目录
-r 递归复制目录
-p 保留原有文件或目录属性
-i 覆盖文件之前先询问用户
-u 当源文件比目的文件修改时间新时才复制
-v 显示复制信息
示例:

1
2
复制目录:
# cp -rf test /opt

mkdir(创建)

参数:
-p 递归创建目录
-v 显示创建过程
示例:

1
2
3
4
5
6
创建多级目录:
# mkdir /opt/test/ahzoo
创建多个目录:
# mkdir {install,tmp}
创建连续目录:
# mkdir {a..z}

mv(移动)

移动文件或重命名
参数:
-b 目标文件存在创建备份,备份文件是文件名跟~
-u 当源文件比目的文件修改时间新时才移动
-v 显示移动信息
示例:

1
2
3
4
移动文件:
# mv a.txt /opt
重命名文件:
# mv a.txt b.txt

find(查找)

搜索文件目录层次结构
格式:find path -参数 动作
参数:
-name 文件名,支持(‘*’, ‘?’, and ‘[]’)
-type 文件类型,d目录,f常规文件等
-perm 符合权限的文件,比如755
-atime -/+n 在n天以内/过去n天被访问过
-ctime -/+n 在n天以内/过去n天被修改过
-amin -/+n 在n天以内/过去n分钟被访问过
-cmin -/+n 在n天以内/过去n分钟被修改过
-size -/+n 文件大小 小于/大于 单位(b、k、M、G)
-maxdepth levels 目录层次显示的最大深度
-regex pattern 文件名匹配正则表达式模式
-inum 通过inode编号查找文件

动作:
-detele 删除文件
-exec command {} \; 执行命令,花括号代表当前文件
-ls 列出当前文件,ls -dils格式
-print 完整的文件名并添加一个回车换行符
-print0 打印完整的文件名并不添加一个回车换行符
-printf format 打印格式

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
查找文件名:
# find / -name "*http*"
查找文件名并且文件类型:
# find /tmp -name core -type f -print
查找文件名并且文件类型删除:
# find /tmp -depth -name core -type f -delete
查找当前目录常规文件并查看文件类型:
# find . -type f -exec file '{}' \;
查找文件权限是664:
# find . -perm 664
查找大于1024k的文件:
# find . -size -1024k
查找3天内修改的文件:
# find /bin -ctime -3
排除多个类型的文件:
# find . ! -name "*.sql" ! -name "*.txt"
或条件查找多个类型的文件:
# find . -name '*.sh' -o -name '*.bak'
# find . -regex ".*\.sh|.*\.bak"
# find . -regex ".*\.\(sh\|bak\)"
并且条件查找文件:
# find . -name "*.sql" -a -size +1024k
只显示第一级目录:
# find /etc -type d -maxdepth 1
通过inode编号删除文件:
# rm `find . -inum 671915`
# find . -inum 8651577 -exec rm -i {} \;

rm(删除)

参数:
-f:强制删除,忽略不存在的文件,不提示确认
-i:在删除前需要确认
-I:删除超过三个文件或者递归删除前要求确认
-r:递归删除目录及其内容
示例:

1
2
3
4
5
6
7
8
删除文件(需要确认)
# rm a.txt
删除目录(目录不需要确认,目录下文件需要确认)
# rm -r dir1
强制删除目录(不需要确认,慎用)
# rm -rf dir1
删除当前目录下的所有文件及目录
# rm -r *

解压缩类

tar(归档)

功能:归档目录或文件
参数:
-c 创建新归档
-d 比较归档和文件系统的差异
-r 追加文件到归档
-t 存档的内容列表
-x 提取归档所有文件
-C 改变解压目录
-f 使用归档文件或设备归档
-j bzip2压缩
-z gzip压缩
-v 输出处理过程

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
创建归档文件来自foo和bar:
# tar -cf archive.tar foo bar
提取归档的所有文件:
# tar -xf archive.tar
创建归档并gzip压缩:
# tar -zcvf archive.tar.gz log
提取归档文件并gzip解压:
# tar -zxvf log.tar.gz
创建归档并bzip2压缩:
# tar -jcvf log.tar.bz log
列出所有在archive.tar的文件:
# tar -tvf archive.tar
提取归档并解压到指定目录:
# tar -zxvf log.tar.gz -C /opt

zip(压缩)

压缩后的文件拓展名为 .zip
常用参数:
-d 从压缩文件内删除指定的文件。
-g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。
-j 只保存文件名称及其内容,而不存放任何目录名称。
-m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。
-q 不显示指令执行过程。
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
-S 包含系统和隐藏文件。
-T 检查备份文件内的每个文件是否正确无误。
-v 显示指令执行过程或显示版本信息。

-b<工作目录> 指定暂时存放文件的目录。
-n<字尾字符串> 不压缩具有特定字尾字符串的文件。
-t<日期时间> 把压缩文件的日期设成指定的日期。
-<压缩效率> 压缩效率是一个介于1-9的数值,呈正比关系,默认为6。

常用实例:
/home/html/这个目录下所有文件和文件夹打包为当前目录下的 html.zip:

1
# zip -q -r html.zip /home/html

如果在我们在 /home/html 目录下,可以执行以下命令:

1
# zip -q -r html.zip *

从压缩文件 cp.zip 中删除文件 a.c

1
# zip -dv cp.zip a.c

uzip(解压缩)

unzip为.zip压缩文件的解压缩程序。
常用参数:
-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。
-f 只更新现有的文件。
-l 显示压缩文件内所包含的文件。
-p-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
-t 检查压缩文件是否正确。
-u-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
-v 执行是时显示详细的信息。
-L 将压缩文件中的全部文件名改为小写。
-n 解压缩时不要覆盖原有的文件。
-o 解压缩时覆盖原有文件。
-P<密码> 使用zip的密码选项。
-q 执行时不显示任何信息。

实例:
查看压缩文件中包含的文件:

1
2
3
4
5
6
7
8
9
10
11
# unzip -l abc.zip 
Archive: abc.zip
Length Date Time Name
-------- ---- ---- ----
94618 05-21-10 20:44 a11.jpg
202001 05-21-10 20:44 a22.jpg
16 05-22-10 15:01 11.txt
46468 05-23-10 10:30 w456.JPG
140085 03-14-10 21:49 my.asp
-------- -------
483188 5 files

gzip(压缩/解压)

压缩后的拓展名为.gz,同样支持.gz文件的解压。
常用参数:
-d 解压缩文件。
-f 强行压缩文件。不理会文件名称或硬连接是否存在以及该文件是否为符号连接。
-l 列出压缩文件的相关信息。
-n 压缩文件时,不保存原来的文件名称及时间戳记。
-N 压缩文件时,保存原来的文件名称及时间戳记。
-q 不显示警告信息。
-r 递归处理,将指定目录下的所有文件及子目录一并处理。
-t 测试压缩文件是否正确无误。
-<压缩效率> 压缩效率是一个介于1-9的数值呈正比关系,默认为6。

实例:
压缩当前目录下所有文件

1
# gzip *

接上例, 列出详细的信息

1
2
3
4
# gzip -dv *
a.c.gz: 0.0% -- replaced with a.c
b.h.gz: 0.0% -- replaced with b.h
d.cpp.gz: 0.0% -- replaced with d.cpp

接上例,显示压缩文件的信息

1
2
3
4
5
# gzip -l *
compressed uncompressed ratio uncompressed_name
24 0 0.0% a.c
24 0 0.0% b.h
26 0 0.0% d.cpp

guzip(解压缩)

用于解开被 gzip 压缩过的文件(扩展名为.gz)。由于 gunzip 就是 gzip 的硬连接,所以下面的命令都可以直接使用 gzip 完成
常用参数:
-f 强行解开压缩文件,不理会文件名称或硬连接是否存在以及该文件是否为符号连接。
-k 保留原始压缩文件。
-l列出压缩文件的相关信息。
-n 解压缩文件时,不保存原来的文件名称及时间戳记。
-N 解压缩文件时,保存原来的文件名称及时间戳记。
-q 不显示警告信息。
-r 递归处理,将指定目录下的所有文件及子目录一并处理。
-t 测试压缩文件是否正确无误。
-v 显示指令执行过程。
实例:

1
# gunzip ab.gz 

系统类

date(日期)

打印或设置系统日期和时间

常用参数:
-d string 显示时间所描述的字符串
-f datefile 读取文件的每一行
-I 输出ISO 8601格式的日期和时间
-r 显示文件的最后修改时间
-R 输出RFC 2822格式的日期和时间
-s string 设置时间所描述的字符串
-u 打印或设置UTC时间

常用控制输出格式:
%D 日期,等价于%m/%d/%y
%F 完整的日期;等价于 %Y-%m-%d
%r 本地的 12 小时制时间(例如 11:11:04 PM)
%R 24 小时制 的小时与分钟; 等价于 %H:%M
%T 时间; 等价于 %H:%M:%S

示例:

1
2
3
4
5
6
7
8
9
10
11
设置系统日期和时间:
# date -s "2016-12-15 00:00:00"
查看当前系统时间戳:
# date +%s
查看当前系统时间:
# date +'%F %T'
把日期和时间转换成时间戳:
# date -d "2016-12-15 18:00:00" +%s
把时间戳转成时间:
# date -d '@1481842800' '+%F %T'

uname(系统信息)

打印系统信息
参数:
-a 打印所有信息
-s 打印内核名称
-n 打印主机名
-r 打印内核发行版
-v 打印内核版本
-m 打印机器硬件名
-p 打印处理器类型
-i 打印硬件平台
-o 打印操作系统

示例:

1
2
3
4
5
6
7
8
打印所有系统信息:
# uname -a
打印主机名:
# uname -n
打印内核版本:
# uname -r
打印操作系统:
# uname -o

网络类

wget(下载)

非交互式网络下载,类似于HTTP客户端
参数:
-b 后台运行

日志记录和输入文件:
-o <日志文件> 记录日志写到文件
-a <日志文件> 记录日志追加到文件
-d 打印debug信息,会包含头信息
-q 安静模式,不输出
-i <下载文件> 从文件中读取所有的URL地址进行下载(批量下载)
下载文件的url格式:

1
2
3
http://ahzoo.cn/a.txt
http://ahzoo.cn/b.txt
http://ahzoo.cn/c.txt

下载选项:
-t, --tries=NUMBER 设置链接重试次数
-O 将下载内容写入到指定文件(通常是一个压缩文件)中
-nc 跳过下载现有的文件
-c 断点续传
--progress=TYPE 设置进度条(dot或bar)
--spider 不下载任何内容(用于判断url是否可用)
-T, --timeout=SECONDS 设置相应超时时间(还有--dns-timeout、--connect-timeout和--read-timeout
-w, --wait=SECONDS 两次重试间隔等待时间
--limit-rate=RATE 限制下载速度
--user=USER 设置ftp和http用户名
--password=PASS 设置ftp和http密码

目录:
-P <文件目录> 保存文件目录

HTTP选项:
--http-user=USER 设置http用户名
--http-password=PASS 设置http密码
--referer=URL 设置Referer
-U,--user-agent=AGENT 设置客户端信息
--no-http-keep-alive 禁用HTTP keep-alive(长连接)
--post-data=STRING 使用POST方法,发送数据

FTP选项:
--ftp-user=USER 设置ftp用户名
--ftp-password=PASS 设置ftp密码
--no-passive-ftp 禁用被动传输模式

示例1:

1
2
3
4
5
6
7
8
9
10
11
12
13
下载单个文件到当前目录:
# wget http://nginx.org/download/nginx-1.11.7.tar.gz
放到后台下载:
# wget -b http://nginx.org/download/nginx-1.11.7.tar.gz
对于网络不稳定的用户使用-c和--tries参数,保证下载完成,并下载到指定目录:
# wget -t 3 -c http://nginx.org/download/nginx-1.11.7.tar.gz -P down
不下载任何内容,判断URL是否可以访问:
# wget --spider http://nginx.org/download/nginx-1.11.7.tar.gz
下载内容写到文件:
# wget http://www.baidu.com/index.html -O index.html
从文件中读取批量URL下载:
# wget -i url.list

示例2:

1
2
3
4
5
6
7
下载ftp文件:
# wget --ftp-user=admin --ftp-password=admin ftp://192.168.1.10/ISO/CentOS-6.5-i386-minimal.iso
伪装客户端,指定user-agent和referer下载:
# wget -U "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36" --referer "http://nginx.org/en/download.html" http://nginx.org/download/nginx-1.11.7.tar.gz
查看HTTP头信息:
# wget -S http://nginx.org/download/nginx-1.11.7.tar.gz
# wget --debug http://nginx.org/download/nginx-1.11.7.tar.gz

进程类

nohup(运行)

运行命令,忽略所有挂起信号
示例:

1
2
后台运行程序,终端关闭不影响:
# nohup bash test.sh &>test.log &

netstat(网络状态)

功能:打印网络连接、路由表、接口统计信息、伪装连接和多播成员
参数:
-r 显示路由表
-i 显示接口表
-n 不解析名字
-p 显示程序名 PID/Program
-l 显示监听的socket
-a 显示所有socket
-o 显示计时器
-Z 显示上下文
-t 只显示tcp连接
-u 只显示udp连接
-s 显示每个协议统计信息
示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
显示所有监听:
# netstat -anltu
显示所有TCP连接:
# netstat -antp
显示所有UDP连接:
# netstat -anup
显示路由表:
# netstat -r

查看当前所有tcp端口
# netstat -ntlp
查看8080端口使用情况
# netstat -ntulp | grep 8080

ss(网络状态)

比netstat更强大的socket查看工具
格式:ss [options] [ FILTER ]
常用参数:
-n 不解析名字
-a 显示所有socket
-l 显示所有监听的socket
-o 显示计时器
-e 显示socket详细信息
-m 显示socket内存使用
-p 显示进程使用的socket
-i 显示内部TCP信息
-s 显示socket使用汇总
-t 只显示TCP socket
-u 只显示UDP socket

过滤:
-o state 显示TCP连接状态信息

示例:

1
2
3
4
5
6
7
8
9
10
11
12
显示所有TCP连接:
# ss -t -a
显示所有UDP连接:
# ss -u –a
显示socket使用汇总:
# ss -s
显示所有建立的连接:
# ss -o state established
显示所有的TIME-WAIT状态:
# ss -o state TIME-WAIT
搜索所有本地进程连接到X Server:
# ss -x src /tmp/.X11-unix/*

lsof(列出文件/进程)

列出打开的文件(进程)

列出打开文件(lists openfiles)也可以表示列出进程。因为在Unix/Linux中,一切(包括网络套接口)都是文件

参数:
-i 监听的网络地址,如果没有指定,默认列出所有。
-U 列出Unix域socket文件
-p 指定PID
-u 指定用户名或UID所有打开的文件
+D 递归搜索

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
列出所有打开的文件:
# lsof
查看哪个进程占用文件:
# lsof /etc/passwd
列出所有打开的监听地址和unix域socket文件:
# lsof -i -U
列出80端口监听的进程:
# lsof -i:80
列出端口1-1024之间的所有进程:
# lsof -i:1-1024
列出所有TCP网络连接:
# lsof -i tcp
列出所有UDP网络连接:
# lsof -i udp
根据文件描述符列出打开的文件:
# lsof -d 1
列出某个目录被打开的文件:
# lsof +D /var/log
列出进程ID打开的文件:
# lsof -p 5373
打开所有登录用户名abc或user id 1234,或PID 123或PID 456:
# lsof -p 123,456 -u 123,abc
列出COMMAND列中包含字符串sshd:
# lsof -c sshd

ps(进程快照)

报告当前进程的快照
常用参数:
-a 显示所有进程
-u 选择有效的用户ID或名称
-x 显示无控制终端的进程
-e 显示所有进程
-f 全格式
-r 只显示运行的进程
-T 这个终端的所有进程
-p 指定进程ID
-m 线程
-L 格式化代码列表

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
查看指定进程信息
# ps 8080
打印系统上所有进程标准语法:
# ps -ef
打印系统上所有进程BSD语法:
# ps aux
打印进程树:
# ps axjf 或 ps -ejH
查看进程启动的线程:
# ps -Lfp PID
查看当前用户的进程数:
# ps uxm 或 ps -U root -u root u

查找java相关的进程(grep是查找命令)
# ps -ef | grep java
查找8080相关的进程
# ps -ef | grep 8080

top(活动进程)

动态显示活动的进程和系统资源利用率
参数:
-d 信息刷新时间间隔
-p 只监控指定的进程PID
-i 只显示正在使用CPU的进程
-H 显示线程
-u 只查看指定用户名的进程
-b 将输出编排成易处理格式,适合输出到文件处理
-n 指定最大循环刷新数

交互命令:
f 添加或删除显示的指标
c 显示完整命令
P 按CPU使用百分比排序
M 按驻留内存大小排序
T 按进程使用CPU时间排序
1 显示每个CPU核心使用率
k 终止一个进程

示例:

1
2
3
4
刷新一次并输出到文件:
# top -b -n 1 > top.log
只显示指定进程的线程:
# top -Hp 123

kill(终止)

参数:
1 (HUP):重新加载进程。
9 (KILL):杀死一个进程。
15 (TERM):正常停止一个进程。

强制杀死进程

1
2
3
4
5
强制杀死8080端口进程
# kill -9 8080

同上
# kill -KILL 8080

权限类

chown(文件所有者)

chown(change owner)用于设置文件所有者和文件关联组的命令。
需要超级用户(root)的权限才能执行此命令。
参数 :
user : 新的文件拥有者的使用者 ID
group : 新的文件拥有者的使用者组(group)
-c : 显示更改的部分的信息
-f : 忽略错误信息
-h :修复符号链接
-v : 显示详细的处理信息
-R : 处理指定目录以及其子目录下的所有文件
实例:
把 /var/run/httpd.pid 的所有者设置 root:

1
# chown root /var/run/httpd.pid

将文件 file1.txt 的拥有者设为 ahzoo,群体的使用者 ahzoogroup :

1
# chown ahzoo:ahzoogroup file1.txt

将当前前目录下的所有文件与子目录的拥有者皆设为 ahzoo,群体的使用者 ahzoogroup:

1
# chown -R ahzoo:ahzoogroup *

/home/ahzoo 的关联组设置为 512 (关联组ID),不改变所有者:

1
# chown :512 /home/ahzoo

chmod(文件权限)

chmod(change mode)用于控制用户对文件的权限。
同样需要超级用户(root)的权限才能执行此命令。

Linux/Unix 的文件调用权限分为三级 : 文件所有者(Owner)、用户组(Group)、其它用户(Other Users)。
图片

可以使用绝对模式(八进制数字模式)或者符号模式指定文件的权限。
图片

语法(符号模式):

1
chmod [-参数] [用户类型][操作符][权限] file [file2] [filen]

语法(八进制语法):

1
chmod [-参数] [八进制数字] file [file2] [filen]

参数:
-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)

符号模式

使用符号模式可以设置多个项目:who(用户类型),operator(操作符)和 permission(权限),每个项目的设置可以用逗号隔开。 命令 chmod 将修改 who 指定的用户类型对文件的访问权限,用户类型由一个或者多个字母在 who 的位置来说明,如 who 的符号模式表所示:

who 用户类型 说明
u user 文件所有者
g group 文件所有者所在组
o others 所有其他用户
a all 所用用户, 相当于 ugo

operator 的符号模式表:

Operator 说明
+ 为指定的用户类型增加权限
- 去除指定用户类型的权限
= 设置指定用户权限的设置,即将用户类型的所有权限重新设置

permission 的符号模式表:

模式 名字 说明
r 设置为可读权限
w 设置为可写权限
x 执行权限 设置为可执行权限
X 特殊执行权限 只有当文件为目录文件,或者其他类型的用户有可执行权限时,才将文件权限设置可执行
s setuid/gid 当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限
t 粘贴位 设置粘贴位,只有超级用户可以设置该位,只有文件所有者u可以使用该位

实例:

将文件 ahzoo.txt 设为所有人皆可读取 :

1
# chmod ugo+r ahzoo.txt

将文件 ahzoo.txt 设为所有人皆可读取 :

1
# chmod a+r ahzoo.txt

将文件 ahzoo.txt 与 999.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :

1
# chmod ug+w,o-w ahzoo.txt 999.txt

为 ahzoo.java 文件拥有者增加可执行权限:

1
# chmod u+x ahzoo.java

将目前目录下的所有文件与子目录皆设为任何人可读取 :

1
# chmod -R a+r *
八进制语法

chmod命令可以使用八进制数来指定权限。文件或目录的权限位是由9个权限位来控制,每三位为一组,它们分别是文件所有者(User) 的读、写、执行;用户组(Group) 的读、写、执行以及其它用户(Other) 的读、写、执行。

# 权限 rwx 二进制
7 读 + 写 + 执行 rwx 111
6 读 + 写 rw- 110
5 读 + 执行 r-x 101
4 只读 r– 100
3 写 + 执行 -wx 011
2 只写 -w- 010
1 只执行 –x 001
0 000

说明:

1
# chmod abc file

其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1

  • 若要 rwx 属性则 4+2+1=7;
  • 若要 rw- 属性则 4+2=6;
  • 若要 r-x 属性则 4+1=5。
    chmod a=rwx filechmod 777 file效果相同。
    chmod ug=rwx,o=x filechmod 771 file效果相同。

例如, 765 将这样解释:

  • 所有者的权限用数字表达:所有者的三个权限位的数字加起来的总和。如 rwx ,也就是 4+2+1 ,应该是 7。
  • 用户组的权限用数字表达:用户组的三个权限位数字的相加的总和。如 rw- ,也就是 4+2+0 ,应该是 6。
  • 其它用户的权限数字表达:其它用户权限位的三个数字相加的总和。如 r-x ,也就是 4+0+1 ,应该是 5。

此外,若用 chmod 4755 filename 可使此程序具有 root 的权限。

对比:
用符号模式将目前目录下的所有文件与子目录皆设为任何人可读取 :

1
# chmod -R a+r *

等同于用数字(八进制语法)来表示同样的权限 :

1
# chmod 777 file

防火墙

firewall

开启防火墙

1
# systemctl start firewalld

开放指定端口(8080)

1
# firewall-cmd --zone=public --add-port=8080/tcp --permanent

命令含义:
–zone #作用域
–add-port=8080/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效

关闭指定端口(8080)

1
# firewall-cmd --zone=public --remove-port=8080/tcp --permanent

重启防火墙

1
# firewall-cmd --reload

查看防火墙所有开放的端口

1
# firewall-cmd --zone=public --list-ports

关闭防火墙

1
# systemctl stop firewalld.service

查看防火墙状态

1
# firewall-cmd --state

查询指定端口(8080)是否开启成功

1
# firewall-cmd --query-port=8080/tcp

iptables

安装命令:

1
# yum install iptables-services
防火墙

查询防火墙状态:

1
# service iptables status

停止防火墙:

1
# service iptables stop

启动防火墙:

1
# service iptables start

重启防火墙:  

1
# service iptables restart
端口(配置文件)

由于防火墙规则的配置文件在/etc/sysconfig/iptables路径,所以我们可以直接对配置文件进行修改。
打开配置文件:

1
# vi /etc/sysconfig/iptables

直接在配置文件中修改(开启8080端口):

1
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT

关闭端口:只需要在上面的配置文件中删除添加的端口即可

端口(命令)

开启22端口:

1
2
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

查看端口是否开启:

1
iptables -L -n 

保存配置:

1
service iptables save

文件传输

需要安装:

1
# yum -y install lrzsz
  • 将当前客户端文件上传到linux

    1
    # lz
  • 将linux文件下载到当前客户端

    1
    sz filename