Linux必备命令

常用命令-ls命令:

-l  长格式显示文件信息
-d  显示目录本身信息
-a 显示全部文件,包含隐藏的文件
-A 显示除了.或者..以外的文件,包括隐藏的文件
-i 显示文件的inode号
-S 按大小进行排序
-t 按修改时间进行排序

常用命令-ll 命令:

等同于ls -l

ll /data/
-rw-r--r--

第一个横行表示文件类型,常见有

-  普通文件
d  目录
l  链接文件
c  字符设备(即串行端口的接口设备,例如伪终端等等)
b  块设备(磁盘)
s  套接字文件
p  管道文件

管道文件分为有名管道和无名管道:
有名管道:在磁盘上会存储一个管道文件表示(inode存于内存上),但它不会占据磁盘空间(block),数据并不会存储到磁盘上。
创建有名管道:

mkfifo test.pipe

无名管道:无名管道不存在管道文件,如

ifconfig | grep "inet"

常用命令-pwd命令:

pwd命令主要用于显示或者查看当前所在的目录路径

常用命令-echo命令:

输出指定得字符或者变量

常用命令-alias命令

设置别名,便于执行相关命令

//查看当前环境设置的别名: 
 alias 
 //设置临时别名(关闭shell就失效了)
  alias v32='vim /etc/sysconfig/network‐scripts/ifcfg‐ens32'  
 //设置永久别名
 vim ~/.bashrc  alias v32='vim /etc/sysconfig/network‐scripts/ifcfg‐ens32'

常用命令-df命令

常用于磁盘分区查询

-a 显示所有文件系统的使用情况,包括虚拟文件系统
-B 使用字节大小块
-h 以人们可读的形式显示大小
-H 同-h,但是强制使用1000而不是1024
-i 显示inode信息而非块使用量
-k 即block-size=1K
-l 只显示本机的文件系统

常用命令-du命令

查看文件在磁盘中的使用量,常用du -sh查看当前目录所有文件及文件夹的大小

-a 输出所有文件的磁盘用量,不仅仅是目录

文件管理-cat命令:

查看文件内容或追加文件内容:

‐n或‐‐number:从1开始对所有输出的行数编号;  
‐b或‐‐number‐nonblank:对于空白行不编号;
‐s或‐‐squeeze‐blank:当遇到有连续两行以上的空白行,就代换为一行的空白行; 
 ‐A:显示不可打印字符,行尾显示“$”; 

创建一个文件:

#以覆盖得方式写文件 
 [root@localhost ~]# cat > test.txt << eof 
> this  
> > is   
> > test  
> > eof 
#以追加得方式写文件  
[root@localhost ~]# cat >> test.txt <<f  
> this is new line  
> f

文件管理-cp命令:

用来将一个或多个源文件或者目录复制到指定的目的文件或目录。
语法: cp [OPTION]… SOURCE DEST


option:  
‐a:此参数的效果和同时指定"‐dpR"参数相同;  
‐d:可复制符号连接,不会破坏链接文件与源文件的链接关系。  
‐f:强行复制文件或目录,不论目标文件或目录是否已存在;  
‐i:覆盖既有文件之前先询问用户;  
‐l:对源文件建立硬连接,而非复制文件;  
‐p:保留源文件或目录的属性;  
‐R/r:递归处理,将指定目录下的所有文件与子目录一并处理;  
‐s:对源文件建立符号连接,而非复制文件(指定绝对路径);  
‐u:使用这项参数后只会在源文件的更改时间较目标文件要新的时候或是目标文件并不存在时,才复制文件;  
‐S:在备份文件时,用指定的后缀“SUFFIX”代替文件的默认后缀~; 
‐b:覆盖已存在的文件目标前将目标文件备份,后缀默认是~;  
‐v:详细显示命令执行的操作。 

文件管理-touch命令:

用户创建普通文件或者修改文件时间

touch   file 
‐a      只修改访问时间(属性更改时间也会变)  
‐m      只更改修改时间(属性更改时间也会变) 

stat  file  查看文件的属性 

文件管理-mkdir命令

创建目录

‐p      自动创建上级目录,如果上级目录不存在;如果目录已经,则不创建,不会提示报错

文件管理-less,more命令:

查看大文件,分屏显示,可以使用键盘翻屏

空格    显示下一屏内容  
b       显示上一屏内容  
f       显示下一屏内容

文件管理-gzip命令:

压缩文件,默认压缩完会删除源文件

gzip  [option]   file     
	‐c  将压缩结果通过重定向至其他文件,以此保留源文件。     
	‐d  解压缩      
	‐r      递归压缩目录内文件,只压缩文件,不会压缩目录      ‐
	1~9    指定压缩级别,‐1快压缩,‐9大压缩,更消耗cpu,默认级别是6.      
 实例:   压缩一个文件:  
 gzip  file   
 压缩一个目录下的所有文件,并显示过程:   
 gzip  ‐rv lutixia/   
 压缩一个文件,并保留源文件:   
 gzip  ‐c file > file.gz   
 解压一个文件:   
 gunzip  file.gz   
 gzip ‐d file.gz   
 不解压,直接查看文件内容:   
 zcat  file.gz 

文件管理-bzip2命令:

压缩文件,默认压缩完会删除源文件,不支持递归压缩目录文件

bzip2 [option]  file          
‐k      保留源文件          
‐d      解压缩          
‐1~9    定义压缩级别            
实例:  
压缩文件,并保留源文件: 
 bzip2 ‐k file  
 解压缩文件:  
 bzip ‐d   file.bz2  
 不解压,直接查看文件内容: 
 bzcat file.bz2 

文件管理-tar命令:

归档工具,用来打包和备份。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件; 压缩则是将一个大的文件通过一些压缩算法变成一个小文件

tar [option]  file      
	‐c      创建新的tar包      
	‐f      指定tar包名      
	‐r      添加文件到归档文件,须与f结合使用,指定归档文件      
	‐z      指定gzip压缩tar包,后缀为.tar.gz      
	‐j  指定bzip2解压缩文件,后缀为.tar.bz2      
	‐p      保留文件的权限和属性      
	-u 更新压缩包中的文件
	-x 解压
	-v 显示所有过程

#示例
#将所有.txt打包成all.tar
tar -cf all.tar *.txt

#将所有.txt添加到all.tar
tar -rf all.tar *.txt

#更新原tar包中的hello.txt
tar -uf all.tar hello.txt

#列出all.tar中所有文件
tar -tf all.tar   

#解出all.tar中所有文件
tar -xf all.tar

文件传输-rsync命令:

远程数据同步工具,传送两个文件不同的部分进行同步,而不是全部传送,因此速度较快。

  1. 同步本地目录,使目的目录与源目录保持绝对的一致
rsync ‐av ‐‐delete  A/ /data/B  rsync ‐av ‐‐delete  A /data/B 
ps1: B目录可以不存在,如果不存在则自动创建,但是上级data必须存在。 
ps2:A目录带不带斜杠/,意义是不一样的,带斜杠表示同步A目录下的文件,  不带则同步A目录以及其中文件。 
‐‐delete: B与A保持绝对的一致,B中存在,而A中不存在的文件将被删除
  1. 将本地目录同步到远程目录
rsync ‐av  A/ 10.0.0.130:/data/ 
将本地A目录所有文件,同步至远程服务器132上,  同理,要想实现绝对的一致,需要加上‐‐delete参数。 
使用ssh协议连接到远程,所以可以将本机公钥发给远程主机,  否则每次执行都会提示输入密码。
  1. 将远程目录同步到本地
rsync ‐av  10.0.0.130:/data/C . 
 rsync ‐av  10.0.0.130:/data/C/ . 
.   表示将远程目录C,同步到本地C目录。 
ps:要注意不带斜杠会在本地目录创建一个C目录,      如果带上斜杠/,则只会同步C目录下的文件

文件传输-scp命令:

以加密的方式在本地主机和远程主机之间复制文件

  1. 本地目录复制到远程
scp ‐r  file/ 10.0.0.130:/data/ 
ps:file后面不管带不带/,都可以同步file目录 
如果只想同步目录下文件: scp ‐r  file/*  10.0.0.130:/data/ 
  1. 本地文件复制到远程
scp test.txt 10.0.0.130:/data/
  1. 启动压缩
scp -rC file/ 10.0.0.130:/data

权限管理-chmod命令:

变更文件或目录的权限

u  用户user,文件或目录的所有者。  
g  用户组group,文件或目录所属群组  
o  其它用户others  
a  所有用户all,系统默认使用此项 
+  添加某些权限  
‐  取消某些权限  
=  设置文件的权限为给定的权限  
r  表示可读权限 
w  表示可写权限  
x  表示可执行权限  
‐  表示没有权限    
s  设置权限suid和sgid,使用权限组合“u+s”设定文件的用户的ID位,“g+s”设置组ID位  
t  只有目录或文件的所有者才可以删除目录下的文件 
‐R 递归处理,将指令目录下的所有文件及子目录一并处理 
  1. 【o+w | o=rw】将file1文件其他用户权限设置为可读可写
[root@localhost ~]# ll  
‐rw‐r‐‐r‐‐  1 root root    0 Aug 22 05:09 file1  
[root@localhost ~]# chmod o+w file1   
[root@localhost ~]# ll  ‐rw‐r‐‐rw‐  1 root root    0 Aug 22 05:09 file1  
或者: 
[root@localhost ~]# chmod o=rw file1  
  1. 【o+w】将目录权限设置为其他用户可写,这时普通用户是可以进入到目录中任意删除,修改文 件名(即使不是自己的文件),对文件的其他用户权限为不可写的文件也可以强制保存。
chmod o+w /data/ 
user1用户修改user2用户的文件:  
[user1@localhost data]$ ll  
‐rw‐r‐‐r‐‐ 1 user2 user2        30 Aug 22 05:49 fs  [user1@localhost data]$ vim fs  
...  
#提示不能修改  
E45: 'readonly' option is set (add ! to override)  
这时可以强制保存(:wq!)。  

3.【o-w】将目录权限设置为其他用户不可写,这时普通用户就无法删除,修改文件名,但是如果文 件的其他用户有可写权限,还是可以写数据的。
父目录其他用户有可写权限,其下子文件不管有没有可写权限,均可强行写入,修改! 父 目录其他用户没有可写权限,其下子文件只有可写才有写入权限,且不具备删除,修改文件名权限。
4. 【-t】对目录设置特殊权限,用户只能删除自己的文件。

[root@localhost ~]# chmod o+t /data/  
#user2想删除lutixia1的文件,失败  
[user2@localhost data]$ ll 
‐rw‐r‐‐r‐‐ 1 user1 user1        63 Aug 22 05:58 fs  [user2@localhost data]$ rm ‐rf fs  
rm: cannot remove ‘fs’: Operation not permitted 

  1. 【-s】设置权限suid和sgid,使用权限组合“u+s”设置使文件在执行阶段具有文件所有者的权 限;“g+s”任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。
    【u+s】
#未设置前,普通用户执行netstat ‐ntlp,会提示没有root权限,普通用户看不了pid的属主:  
[user1@localhost data]$ netstat ‐nltp  
(No info could be read for "‐p": geteuid()=1003 but you should be root.)  
Active Internet connections (only servers)  
Proto Recv‐Q Send‐Q Local Address           Foreign Address         State        
PID/Program name      
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      ‐     

#设置suid后:  
chmod u+s /usr/bin/netstat 

[user@localhost data]$ netstat ‐nltp  
Active Internet connections (only servers)  
Proto Recv‐Q Send‐Q Local Address           Foreign Address         State        PID/Program name      tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd             
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1050/sshd 

【g+s】 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组

[root@localhost ~]# chmod g+s /data  
[user2@localhost data]$ ll  
drwxrwsr‐x 2 user1 root         6 Aug 22 07:14 user1  
drwxrwsr‐x 2 user2 root         6 Aug 22 07:15 user2

权限管理-setfacl命令:

设置文件访问控制列表
【-m】修改文件的acl规则

#设置用户权限  setfacl ‐m  u:user1:rw   abc.txt  
#设置组权限  setfacl ‐m  g:userg:rw     abc.txt  
#取消用户所有权限  setfacl ‐m  u:user1:‐  abc.txt  
#取消其他用户得所有权限:  setfacl ‐m o::‐ abc.txt
#用户必须存在,否则会报错:  
[root@localhost ~]# setfacl ‐m u:user1:rw /data/abc.txt  
setfacl: Option ‐m: Invalid argument near character 3  [root@localhost ~]# id user1 
id: user1 : no such user  
[root@localhost ~]# useradd user1
[root@localhost ~]# setfacl ‐m u:user1:rw /data/abc.txt 

#getfacl用于查看文件acl权限:  
[root@localhost ~]# getfacl /data/abc.txt 
 # file: data/abc.txt 
 # owner: root  
 # group: root 
 
#第一个user没有写用户名,代表是默认属主root的权限  user::rw‐  #第二个user代表得是user1用户的权限  user:user1:rw‐  
group::r‐‐  
mask::rw‐  
other::r‐‐ 

#现在user1可以写入数据到abc.txt文件了  
[user1@localhost ~]$ echo "this is user1" > /data/abc.txt 

【-M】从文件中读取相应得权限进行设置,多用于批量管理用户权限

#先创建一个文件:  
touch acl.txt 
 #添加要设置得权限:  
 u:user:rwx  
 u:user1:rw  
 u:user2:x  
 u:user3:rx  
 #执行,其中abc.txt是要进行权限设置得文件:  
 setfacl ‐M acl.txt abc.txt 

【-x】撤销某个用户得acl权限,恢复到普通ugo权限

#不能单独撤销某一个权限,比如只撤销可写权限  
setfacl ‐x u:user abc.txt

【-b】撤销所有用户或者组得acl权限

setfacl ‐b /data/abc.txt 

【–set-file】复制一个文件acl权限到另外一个文件

getfacl file1 | setfacl ‐‐set‐file=‐ file2 
‐表示输出流 
echo hello |cat ‐

【mask】会临时降低acl用户或者组的权限,只能降低用户权限,不能提升

#设置acl用户的权限为rw:  
[root@localhost data]# setfacl ‐m u:user:rw abc.txt  
#这时user用户是可以写入的: 
[user@localhost data]$ echo "this is test" >> abc.txt 
#设置mask:  
[root@localhost data]# setfacl ‐m mask::r abc.txt  
#这时acl用户只有读权限,不再可写:  
[user@localhost data]$ echo "this is test" >> abc.txt   
‐bash: abc.txt: 权限不够 
注意:如果user用户本身r权限(只读权限),即使mask设置为rw,也是不能写的。  而且设置了mask之后,如果再次使用setfacl进行权限的设置,那么mask的作用就失效了。 

【-d】继承上级目录的所有acl权限

#提前设置好主目录的权限,否则,只能在其子目录有rwx权限  setfacl ‐m u:user:rwx user/  
#添加继承权限  
setfacl ‐m d:u:user:rwx user/ 

权限管理-chattr命令:

改变文件属性
【+a】让某个文件只能往里面追加内容,不能删除

chattr +a /var/log/nginx/access.log 
去掉属性就是‐a 

【+i】防止系统中某个关键文件被修改,删除

chattr +i /etc/fstab

用户管理-useradd命令:

创建的新的系统用户
默认是在/home下创建家目录:

[root@localhost ~]# useradd user1  
[root@localhost ~]# su ‐ user1  
[user1@localhost ~]$ pwd  /home/user1

【-b】指定用户家目录的根目录,会自动创建用户家目录

[root@localhost ~]# useradd ‐b /data/  user2  
[root@localhost ~]# su ‐user2  
[user2@localhost ~]$ pwd  /data/user2 

【-d】指定用户的家目录,即指定的目录即为家目录,也会自动创建

[root@localhost ~]# useradd ‐d /data/user4 user4  [root@localhost ~]# su ‐ user4  
[user4@localhost ~]$ pwd  /data/user4 
#必须要指定到user4 

【-r】创建系统用户

[root@localhost ~]# useradd ‐r user6  
[root@localhost ~]# id user6  
uid=994(user6) gid=990(user6) 组=990(user6) 

【-s】指定用户登入后所使用的shell

[root@localhost ~]# useradd ‐s /sbin/nologin  user7  
[root@localhost ~]# grep "user7" /etc/passwd  
user7:x:1014:1014::/home/user7:/sbin/nologin 

用户不能登录系统,多用于创建系统服务用户

用户管理-passwd命令:

修改用户密码

#管理员修改用户密码:  passwd username  
#用户修改自己的密码:  passw

【-l】锁定用户密码,用户登录不了

[root@localhost ~]# passwd ‐l user4  
锁定用户 user4 的密码 。  
passwd: 操作成功  
#用普通用户身份进行切换,因为root切换普通用户,不需要输入密码,所以会感觉没生效 
 [user@localhost ~]$ su ‐ user4  
 密码:
  su: 鉴定故障  
  #或者使用ssh登录普通用户,也可以验证  
  ssh  [email protected]

【-u】解锁用户密码

[root@localhost ~]# passwd ‐u user4  
解锁用户user4 的密码。  
passwd: 操作成功  
[user@localhost ~]$ su ‐ user4  
密码: 
上一次登录:三 8月 21 16:42:12 CST 2019从 192.168.0.124pts/4 上  
最后一次失败的登录:三 8月 21 16:43:07 CST 2019pts/3 上  
最后一次成功登录后有 3 次失败的登录尝试

【-e】使用户密码立即失效

[root@localhost ~]# passwd ‐e user4  
正在终止用户user4 的密码。  
passwd: 操作成功  
[user@localhost ~]$ su ‐ user4  
密码: 
^C 
已经登录不上了。

【–stdin】通过标准输入设置用户密码

[root@localhost ~]# echo "123456" |passwd ‐‐stdin user4  
更改用户 user4 的密码 。  
passwd:所有的身份验证令牌已经成功更新。

用户管理-userdel命令:
删除用户以及相关数据,但是如果不加参数,则只删除用户,不删除其家目录

[root@localhost ~]# useradd user1
[root@localhost ~]# userdel user1
[root@localhost ~]# ls /home 
user1
[root@localhost ~]# id user1
id: user1: no such user

【-r】删除用户的同时,删除与用户相关的所有文件

[root@localhost ~]# userdel -r user1
[root@localhost ~]# ls /home 

【-f】强制删除用户,即使用户处于登录状态。

#用户登录,强制删除: 
[root@localhost ~]# userdel -rf user1
userdel: user user1is currently used by process 2166 
#用户已经被删除了 
[root@localhost ~]# id user1
id: user1: no such user

用户管理-usermod命令:
修改用户的基本信息

【-l】修改用户名

[root@localhost ~]# usermod -l user2 user1
[root@localhost ~]# id user1
id: user1: no such user 
[root@localhost ~]# id user2
uid=1002(user2) gid=1002(user1) groups=1002(user1)
#如何修改root用户名呢?(不建议修改) 
创建/admin目录 
复制/etc/skel/.bash*的文件到/admin目录 
修改/etc/passwd文件的root为admin 
修改/etc/shadow文件的root为admin 
su - admin

【-a】用户添加附加组

[user1@localhost ~]$ sudo ps -ef |grep nginx 
user1不在 sudoers 文件中。此事将被报告。 
[root@localhost ~]# usermod -a -G wheel user1
[user1@localhost ~]$ sudo ps -ef |grep nginx 
user1 2186  2140  0 07:59 pts/1    00:00:00 grep --color=auto nginx

【-d】修改用户登入时的目录,只是修改/etc/passwd中用户的家目录配置信息,不会自动创建新的家 目录,通常和-m一起使用
【-m】移动用户家目录到新的位置,不能单独使用,一般与-d一起使用

[root@localhost ~]# useradd user1
[root@localhost ~]# usermod -md /data/new user1
[root@localhost ~]# su - user1
[user1@localhost ~]$ 
[user1@localhost ~]$ pwd /data/new

【-c】修改用户帐号的备注文字
【-e】修改帐号的有效期限
【-f】修改在密码过期后多少天即关闭该帐号
【-g】修改用户所属的群组
【-G】修改用户所属的附加群组
【-s】修改用户登入后所使用的shell
【-u】修改用户ID
【-U】解除密码锁定

用户管理-groupadd命令:
创建一个新的工作组

#创建普通组 
groupadd web 
#创建系统组 
groupadd -r web2
#创建指定id的组 
[root@localhost ~]# groupadd -g 500 web3 
[root@localhost ~]# grep "web3" /etc/group 
web3:x:500:
查看组信息: tail /etc/group

用户管理-groupdel命令:
删除指定的工作组

[root@localhost ~]# groupdel web3 
[root@localhost ~]# grep "web3" /etc/group
发布了34 篇原创文章 · 获赞 1 · 访问量 526

猜你喜欢

转载自blog.csdn.net/weixin_42440154/article/details/103238248
今日推荐