logout命令

让用户退出系统
logout

mount命令

挂载指的是将硬件设备的文件系统和Linux系统中的文件系统,通过指定的目录(挂载点)进行关联。

查看系统中已经挂载的文件系统:
mount
/dev/sda3 on / type ext4 (rw) 含义:将/dev/sda3分区挂载到了/目录上,文件系统是ext4,具有读写权限

查看系统中已经挂载的某种类型的文件系统:
mount -t 文件类型名

挂载分区:
(1)创建挂载点目录
mkdir /mnt/disk1
(2)挂载分区
mount [-t 文件系统] 设备文件名 挂载点
mount /dev/sdb1 /mnt/disk1
然后就可以在/mnt/disk1中访问/dev/sdb1的文件系统

以只读模式挂载:
mount -o ro /dev/sdb1 /mnt/disk1 (默认是rw读写模式)
重新挂载为读写模式:
mount -o ro,remount /mnt/disk1

umount命令

卸载已经挂载的设备的文件系统。
umount 设备文件名或挂载点
umount /mnt/usb
umount /dev/sr0
在执行umount命令之前,必须退出挂载目录

netstat命令

通过IP地址,可以找到一台在公网上的服务器。假设服务器中既启动了网页服务(Web服务),又启动了文件传输服务(FTP服务),在用客户端访问服务器中的服务时,就可以通过端口号访问不同的服务,如果访问的是80端口,访问的就是Web服务;如果访问的是21端口,访问的就是FTP服务。

netstat网络状态查看命令
-a 列出所有网络状态,包括Socket程序
-n 使用IP地址和端口号显示,不使用域名与服务名显示;
-p 显示连接对应的PID和程序名;
-t 显示使用TCP协议端口的连接状况;
-u:显示使用UDP协议端口的连接状况;
-I:仅显示监听状态的连接;

查看本机处于监听状态的端口:
netstat -tuln
Proto Recv-Q Send-Q     Local Address             Foreign Address     State
协议 接收队列 发送队列 本机的IP地址及端口号 远程主机的IP地址及端口号 状态
Proto:网络连接使用的协议
Recv-Q:本机接收到的,存储在在本地的缓冲中,还没有被进程取走的数据量
Send-Q:本机发送的,对方还没有收到,依然存在本地的缓冲中的数据量
Local Address:连接的本机IP地址和端口号
ForeignAddress:连接的远程机的IP地址和端口号。
State:连接的状态。
常用的是LISTEN和ESTABLISHED状态,一种表示正在监听,另一种表示已经连接。

查看本机处于监听状态的端口是哪些程序或进程开启的:
netstat -tulnp
Proto Recv-Q   Send-Q     Local Address     Foreign Address     State PID/Program name
协议 接收队列 发送队列 本机的IP地址及端口号 远程主机的IP地址及端口号 状态 进程号/程序名

查看所有连接(包括网络服务产生的连接和Socke程序产生的连接):
netstat -an
Proto Recv-Q Send-Q     Local Address             Foreign Address     State
协议 接收队列 发送队列 本机的IP地址及端口号 远程主机的IP地址及端口号 状态
从"Active UNIX domain sockets"开始,之后的内容就是Socke程序产生的连接,之前的内容都是网络服务产生的连接。

traceroute命令

用来检测本机到目标主机之间经过的网关。
通过这个工具,可以知道从本地主机到互联网另一端的主机走的是什么路径,当然每次数据包走的路径会不太一样,但都差不多。

首先发送一份TTL字段为1的数据包给目的主机,处理这个数据包的第一个路由器将TTL字段减1,因为数据包的TTL字段为0,所以路由器会丢弃该数据包,并给源主机发送一个ICMP报文,这个报文包含了这个路由器的IP地址。然后本机发送一个TTL为2的数据包,一直继续这个过程,直到这个数据包到达目的主机。
traceroute 目的域名
默认一条路径上的每个设备要测3次
默认的数据包的大小是40字节
默认最大跃点为30
某些路由器不会为TTL字段为0并且丢弃的数据包返回ICMP报文,所以该跃点会显示一行*号,也可能是网络的问题。反正就是本地主机收不到ICMP报文。

lastlog命令

查看登陆过当前系统的用户最近一次登陆的时间:
lastlog

Username   Port   From               Latest
用户名 终端 IP地址   最近一次登陆时间

last命令

查询过去登录系统的所有用户的所有信息:
last

用户名 登录终端 登录IP 登录时间 - 退出时间(在线时间)

mail命令

给某个用户发送邮件:
mail 用户名
Subject:邮件标题
邮件内容
.

给某个用户发送某个文件中的内容:
mail -s "邮件标题" 用户名 <文件路径

查看接收到的邮件:
mail
进入交互模式:
N 1 root Mon Dec 5 22:45 68/1777 "test mail"
N 2 root Mon Dec 5 23:08 18/602 "hello"
N表示未读邮件,后面的数字表示邮件编号,要读哪个邮件直接键入编号并回车就可以了。

交互模式还支持这些命令:
h 列出邮件列表
d邮件编号 删除指定编号的邮件
s 邮件编号 文件路径 将邮件内容保存成文件
quit 退出,并保存交互模式下的操作
exit 退出,不保存交互模式下的操作

ifconfig命令

显示网络设备信息
ifconfig

ens33表示第一块网卡
lo表示主机的环回地址

ping命令

用来检测与对方的主机是否能够连通。
向指定的IP地址发送一个一定大小的数据包,如果指定的网络地址存在,会返回同样大小的数据包,如果在规定的时间内没有返回,就认为该IP地址不存在。
ping IP地址或域名

wall命令

向系统当前打开的所有终端上输出信息,若不给予信息内容,则从标准输入读取数据,然后把所得到的数据传送给所有终端。
wall 文本

wall

write命令

向在某个终端登录的用户发送信息:
write 用户名 终端号
输入内容

输入结束后,按Ctrl+D保存并发送。

bunzip命令

解压缩一个.bz2压缩文件:
bunzip2 A.txt.bz2
-k 解压缩默认会删除原来的压缩文件,用这个参数可以保留压缩文件

解压缩两个.bz2压缩文件:
bunzip2 A.txt.bz2 B.txt.bz2

bzip2命令

对单个文件进行压缩:
bzip2 mynote.txt
压缩后的文件名是mynote.txt.bz2
原文件被删除。

对.bz2压缩文件进行解压缩:
bzip2 -d mynote.txt.bz2

对两个文件进行压缩:
bzip2 abc1.txt abc2.txt
压缩后的文件名是abc1.txt.bz2和abc2.txt.bz2

unzip命令

对.zip压缩文件进行解压:
unzip dir1.zip

将.zip压缩文件解压到指定目录:
unzip -d /tmp/ dir1.zip

看看一个.zip压缩文件中有什么文件,但不解压缩:
zip -v zdata.zip

在网上下载一个压缩包时可能会出现下载不全的情况,检查一个压缩文件的完整性:
unzip -t zdata.zip

zip命令

将一个mynote.txt和一个文件夹soft一起压缩成zdata.zip压缩文件:
zip -r zdata.zip mynote.txt soft/
-r 递归压缩文件夹中的文件
zip命令在压缩时会保留原始文件

从.zip压缩文件中删除一个文件,但不解压缩:
zip zdata.zip -d mynote.txt

tar命令

将文件打包成.tar文件:
tar -cvf mynote.txt.tar mynote.txt

将目录打包成.tar文件:
tar -cvf test.tar test/

打包多个文件和目录:
tar -cvf test.tar tmp/ mynote.txt

打包并压缩目录:
压缩命令不能直接压缩目录,必须先用tar命令将目录打包,才能用gzip或bzip2对打包文件进行压缩。
tar -cvf test.tar test/
gzip test.tar
生成压缩文件test.tar.gz

将打包文件解打包到当前目录下:
tar -xvf test.tar

将打包文件解打包到指定目录下:
tar -xvf test.tar -C /tmp

查看打包文件中有哪些文件,但不解打包:
tar -tvf test.tar

将目录同时打包压缩(gz格式):
tar -zcvf tmp.tar.gz /tmp/

将文件同时解压缩解打包(gz格式):
tar -zxvf tmp.tar.gz

将目录同时打包压缩(bz2格式):
tar -jcvf tmp.tar.bz2 /tmp/

将文件同时解压缩解打包(bz2格式):
tar -jxvf tmp.tar.bz2

查看打包压缩文件中有哪些文件,但不解压解打包(gz格式):
tar -ztvf tmp.tar.gz

单独从打包压缩文件中提取出一个文件:
tar -zxvf tmp.tar.gz 123.txt

gzip命令

压缩单个文件:
gzip hero.avi
压缩后原文件被删除,得到hero.avi.gz文件

把压缩文件解压:
gzip -d hero.avi.gz

压缩速度与强度:
总共有9个等级:1~9
1级:速度快,强度低
9级:速度慢,强度高
默认等级为6
gzip -1 error.log
gzip -9 error.log

gunzip命令

解压缩文件:
gunzip install.log.gz

解压缩一个目录下的所有.gz压缩文件:
gunzip -r test/

w命令

显示当前登录系统的用户信息:
w
USER   TTY   FROM   LOGIN@   IDLE   JCPU   PCPU WHAT
USER:登陆到系统的用户名
TTY:登陆终端
FROM:远程登陆主机的IP地址
LOGIN@:用户登陆的日期和时间
IDLE:某个程序上次从终端开始执行到现在所持续的时间
JCPU:和该终端连接的所有进程占用的 CPU 运算时间。
PCPU:当前进程所占用的 CPU 运算时间。
w:表示用户当前执行的是什么命令。

who命令

显示系统最近一次的启动时间:
who -b

显示当前登录系统的用户信息:
who
用户名 登录终端 登录时间(登录来源IP)

passwd命令

修改另一个用户的密码:
passwd 用户名
普通用户只能使用passwd修改自己的密码,不能修改其他用户的密码

修改当前登录用户的密码:
passwd

查看用户密码的状态:
passwd -S 用户名
yincong   PS 10/28/2021       0               99999       7           -1
用户名   状态   设定时间   密码修改间隔时间     密码有效期   警告时间     密码不失效

使用户的密码具有60天有效期,过期10天后停用用户的账号:
passwd -x 60 -i 10 用户名
yincong   PS 10/28/2021       0               60         7           10

锁定账户
passwd -I 用户名
yincong   LK   10/28/2021       0               60         7           10

解锁账户
passwd -u 用户名
yincong   PS   10/28/2021       0               60         7           10

useradd命令

创建用户:
useradd 用户名
(1)在/etc/passwd文件中创建一行与这个用户名相关的数据。
用户名:x:500:500::/home/用户名:/bin/bash
用户的uid为500,用户的家目录是/home/用户名/,用户登陆的shell是/bin/bash
(2)在/etc/shadow文件中增加了一行该用户密码相关的数据。
用户名:!!:15710:0:99999:7:::
该用户还没有设置密码,所以密码字段是!!,表示这个用户没有合法密码,不能正常登陆
(3)在/etc/group文件中创建一行与用户名一样的组。
用户名:x:500:
这个组为这个用户的初始组
(4)在/etc/gshadow文件中增加一行新增组的组密码。
用户名:!::
因为没有设定组密码,所以这里没有密码,也没有组管理员。
(5)分别在/home目录和/var/spod/mail目录下创建家目录和邮箱文件(名字都是该用户的用户名)
(6)将/etc/skel目录中的配置文件复制到新用户的主目录中。

useradd命令在创建用户时,用到的默认值保存在/etc/default/useradd和/etc/login.defs两个文件中。
可以通过命令useradd -D直接查看/etc/default/useradd文件:
GROUP=100 在创建用户时,所有用户的初始组都是GID为100的这个组。在centos中该语句不会生效,而是会自动建立一个和用户名相同的组作为此用户的初始组。
HOME=/home 用户主目录的默认位置
INACTIVE=-1 密码过期后的宽限天数
EXPIRE= 密码失效时间,默认值是空,代表所有新建用户没有失效时间,永久有效。
SHELL=/bin/bash 所有新建立的用户默认 Shell 都是 /bin/bash。
SKEL=/etc/skel 创建新用户后,该用户主目录并不是空目录,会把/etc/skel中的文件都复制过来
CREATE_MAIL_SPOOL=yes 给新建用户建立邮箱,默认是创建

修改默认配置的方法有两种:一种是用vim修改/etc/default/useradd文件,一种是用useradd -D命令
-b 设置所创建的家目录所在的默认目录
-e 设置密码失效时间
-f 设置密码过期的宽限天数
-g 设置新用户所在的初始组
-s 设置新用户的默认 shell
useradd -D -s /bin/csh

其他的默认配置在/etc/login.defs文件中

userdel命令

删除用户:
userdel 用户名

help命令

help只能获取shell内置命令的帮助,所以作用非常有限,而且内置命令的帮助也可以用man命令获取。

help 内置命令
或者
内置命令或外置命令 --help (man命令的简要版)

可以用man help来获取内置命令的列表

man命令

man 内置命令或外置命令

man命令的快捷键:
上箭头 向上移动一行
下箭头 向下移动一行
PgUp 向上翻一页
PgDn 向下翻一页
g 移动到第一页
G 移动到最后一页
q 退出
/字符串 从当前页向下搜索字符串
?字符串 从当前页向上搜索字符串
n 当搜索字符串时,可以使用n键找到下一个字符串
N 当搜索字符串时,使用N键反向查询字符串

命令的级别:
1 普通用户可以执行的系统命令和可执行文件的帮助
2 内核可以调用的函数和工具的帮助
3 C语言函数的帮助
4 设备和特殊文件的帮助
5 配置文件的帮助
6 游戏的帮助(个人版的Linux中是有游戏的
7 杂项的帮助
8 超级用户可以执行的系统命令的帮助
9 内核的帮助

-f:查看命令的级别,以及命令的简要介绍,又多个级别时,都会列出

一个命令可能有好几个级别,用man命令可以指定命令的级别:
man 级别数字 命令

查看命令中包含某个字符串的命令的级别和简介:
man -k 字符串

whatis 命令 等同于man -f
apropos 命令 等同于man -k

grep命令

在某个文件中查找包含某字符串的行:
grep --color 待查找的字符串 文件名
--color:会将找到的字符串高亮显示

在某个文件中查找不包含某字符串的行:
grep -v 待查找的字符串 文件名

在某个文件中查找包含某字符串的行,并显示字符串在文件中的行数:
grep -n 待查找的字符串 文件名

在某个文件中查找包含某字符串的行,但只输出行号,不输出内容:
grep -c 待查找的字符串 文件名

在某个文件中查找包含某字符串的行,同时还要输出该行下面的一行
grep -A 1 待查找的字符串 文件名

在某个文件中查找包含某字符串的行,同时还要输出该行上面的一行
grep -B 1 待查找的字符串 文件名

在某个文件中查找包含某字符串的行,同时还要输出该行上面和下面的一行
grep -C 1 待查找的字符串 文件名

在某个文件中查找包含某字符串的行,不区分大小写:
grep -i 待查找的字符串 文件名

在多个文件中查找包含某字符串的文件列表:
grep -l 待查找的字符串 文件名列表

在多个文件中查找不包含某字符串的文件列表:
grep -L 待查找的字符串 文件名列表

在某个文件中查找包含某个单词的行:
grep -w 待查找的单词 文件名

grep支持基本正则表达式。 直接在字符串中写出就行,要用单引号引上:
grep '^root|bash$' passwd

egrep支持基本的正则表达式和扩展的正则表达式。
egrep '^root|bash$' passwd

fgrep不支持正则表达式:
fgrep '^this' roc.txt

基本正则表达式,只承认“^”、“$”、“.”、“[”、“]”、“*”这些是元字符
扩展正则表达式,在基本正则表达式的基础上增加了“(”、“)”、“{”、“}”、“?”和“+”、“|”等元字符

whereis命令

搜索命令的位置,以及命令的联机帮助文档的位置:
whereis 命令

在使用之前要先手动执行一个updatadb命令,否则可能会不准

which命令

搜索命令的位置:
which 命令

whereis搜索的范围比which广。

locate命令

按照文件名搜索文件或目录:
locate 文件名或目录名
-i 忽略大小写

locate不会在硬盘中搜索,而是先建立一个locate数据库,在数据库中按照文件名搜索,所以耗费系统资源小。

在使用之前要先手动执行一个updatadb命令,否则可能会找不到。如果还是找不到,就要看locate命令的配置文件。

locate命令的配置文件/etc/updatedb.conf:
PRUNE_BIND_MOUNTS = "yes" #让这个配置文件生效
PRUNEFS = "9p afs anonjnodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofe fuse fusectl gfs gfe2 hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfe nfs4 nfsd pipefe proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs" #在local执行搜索时,禁止搜索这些文件系统类型
PRUNENAMES = ".git.hg.svn" #在locate执行搜索时,禁止搜索带有这些扩展名的文件
PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/cache/ccache /var/spod/cups /var/spool/squid /var/tmp" #在locat执行搜索时,禁止搜索这些系统目录

find命令

find命令是在硬盘中搜索,所以如果指定搜索范围过大,会消耗较大的系统资源。
格式:
find 搜索路径 [选项] 搜索内容

按照文件名搜索:
find / -name yum.conf //搜索的文件名必须和搜索的内容一致,如果只是一部分就会找不到。

按照文件名搜索,不区分大小写:
find / -iname yum.conf //搜索的文件名必须和搜索的内容一致,如果只是一部分就会找不到。

按照文件的inode号来搜索文件:
find / -inum 262147
硬链接的inode号与原文件一致。
软连接的inode号与原文件不一致。

按照文件的大小来搜索文件:
在某个目录下搜索大小为25k的文件:
find 目录 -size 25k
在某个目录下搜索大小小于25k的文件:
find 目录 -size -25k
在某个目录下搜索大小大于25k的文件:
find 目录 -size +25k
在某个目录下搜索大小为25M的文件:
find 目录 -size 25M
在某个目录下搜索大小小于25M的文件:
find 目录 -size -25M
在某个目录下搜索大小大于25M的文件:
find 目录 -size +25M
如果省略单位或者单位为b,单位为512字节
如果单位为c,单位为字节
如果单位为w,单位为双字节
如果单位为k,单位为KB
如果单位为M,单位为MB
如果单位为G,单位为GB

按照文件的时间来搜索文件:
atime:访问时间(最后一次读取或执行文件的时间)
ctime:变化时间(最后一次改变文件的属性或权限的时间)
mtime:修改时间(最后一次修改文件的内容的时间)
这三个的单位是天。
amin:访问时间(最后一次读取或执行文件的时间)
cmin:变化时间(最后一次改变文件的属性或权限的时间)
mmin:修改时间(最后一次修改文件的内容的时间)
这三个的单位是分钟。
find / -mtime -5 在系统中查找当前时间到往前推5天之间修改过文件内容的文件
find / -mtime 5 在系统中查找往前推五天到往前推6天之间修改过文件内容的文件
find / -mtime +5 在系统中查找往前推6天到遥远的过去修改过文件内容的文件

按照文件的权限来搜索文件:
查找文件权限刚好是某个权限的文件:
find / -perm 444
查找文件权限包含了某个权限的文件:
find / -perm -200
查找文件权限包含了指定权限中的任意一个权限的文件:
find / -perm +444

按照文件的所有者和所属组来搜索文件:
按照文件所有者的ID来查找文件:
find / -uid 用户ID
按照文件所属组的ID来查找文件:
find / -gid 组ID
按照文件所有者的用户名来查找文件:
find / -user 用户名
按照文件所属组的组名来查找文件:
find / -group 组名
查找没有所有者的文件:
find / -nouser

按照文件类型来搜索文件:
查找目录:
find / -type d
查找普通文件:
find / -type f
查找软连接:
find / -type l

运用逻辑运算符:
-a 逻辑与
find / -size +2k -a -type f
-o 逻辑或
find / -size +2k -a -size 2k
-not 逻辑非
find / -not -size +2k

-exec选项:把find命令的查询结果交给"-exec"选项后面的命令来处理
find / -perm 444 -exec ls -l {}\; {}"和"\;"是标准格式,必须输入,{}代表find命令查询的结果放到其中,交给"-exec"选项后面的命令处理。

umask命令

查看当前的权限掩码:
umask
得到的umask值为0002,第一位0与特殊权限有关,后三位与普通权限rwx有关
以文字的方式来显示当前的权限掩码:
umask -S
u=rwx,g=rwx,o=rx

创建一个普通文件时,默认的权限为666-权限掩码
创建一个目录时,默认的权限为777-权限掩码

设置新的权限掩码:
umask 新的权限掩码(比如027)

chgrp命令

修改文件的所属组:
chgrp 组名 文件名

修改目录的所属组(连同目录中的文件):
chgrp -R 组名 目录名

chown命令

修改文件的所有者:
chown 用户名 文件名

修改文件的所有者和所属组:
chown 用户名:组名 文件名

修改文件的所属组:
chown :组名 文件名

修改目录(连同目录中的文件)的所有者:
chown -R 用户名 目录名

修改目录(连同目录中的文件)的所有者和所属组:
chown -R 用户名:组名 目录名

修改目录(连同目录中的文件)的所属组:
chown -R :组名 目录名

chmod命令

使用数字的方式来修改:
修改文件的权限:
chmod 权限值(比如755) 文件名
修改目录(连同目录中的文件)的权限:
chmod -R 权限值(比如755) 文件名

使用字母的方式来修改:
chmod [-R] [ugoa] [+-=] [rwx] 文件或目录名

ln命令

软连接:软连接文件类似于Windows中的快捷方式,其中的内容记录的是原文件的路径和名称。打开软连接文件时,系统会根据其中的内容找到并打开原文件。与原文件拥有不同的inode号。如果删除原文件,软连接文件名就会变成红色字体表示警告
硬链接:与原文件拥有相同的inode号,但文件名不一样。硬链接文件与原文件的地位相同,修改一个文件,另一个文件的内容也会变化,若要删除文件,只有硬链接和原文件都删除,该文件才会被真正删除。

建立硬链接:
ln 原文件名 硬链接文件名
文件类型为-

建立软连接:
ln -s 原文件名 软链接文件名
文件类型为l

硬链接不可以链接到目录,软连接可以连接到目录,这样就可以用软连接名来代替原目录名来使用。

tail命令

查看文件的后k行:
tail -n k 文件名
tail -k 文件名

查看文件的后k字节:
tail -c k 文件名

监听文件的新增内容:
tail -f 文件名
显示文件最后10行内容,然后光标不退出,每隔一秒检查一下文件,如果文件内容增加,就追加到原来的输出结果后面并显示。

该命令默认显示最后10行内容:
tail 文件名

head命令

查看文件的前k行:
head -n k 文件名

查看文件的前k字节:
head -c k 文件名

该命令默认显示前面10行内容:
head 文件名

less命令

less 文件名
-N 显示行号
-i 搜索时忽略大小写
-m 显示百分比
-x 数字 将Tab键显示为规定的数字个空格

交互指令:
/字符串 向下搜索字符串
?字符串 向上搜索字符串
n 重复前一个搜索
N 反向重复前一个搜索
b 向上移动一页
d 向下移动半页
h 显示帮助页面
q 退出less命令
y 向上移动一行
空格 向下移动一页
回车 向下移动一行
PgDn   向下移动一页
PgUp   向上移动一页
Ctrl+f   向下移动一页
Ctrl+b   向上移动一页
Ctrl+d   向下移动一页
Ctrl+u   向上移动半页
j 向下移动一行
k 向上移动一行
G 移动至最后一行
g 移动到第一行
ZZ 退出less命令
v 使用配置的编辑器编辑当前文件
[ 移动到本文档的上一个节点
] 移动到本文档的下一个节点
p 移动到同级的上一个节点
u 向上移动半页

more命令

more 文件名

每10行显示1屏,同时清除屏幕:
more -c -10 文件名

交互指令:
h 显示帮助
q 退出more命令
v 在当前行启动编辑器
:f 显示文件名和当前行行号
回车键 向下移动一行
空格键 向下移动一页
= 显示当前行的行号
' 转到上一次搜索开始的地方
. 重复上次输入的命令
/字符串 搜索指定的字符串
d 向下移动半页
b 向上移动一页

cat命令

查看文件内容:
cat 文件名
-n 显示行号
-b 显示行号,空行不显示
-T 将Tab键用^I显示
-s 当遇到有连续 2 行以上的空白行时,就替换为 1 行的空白行
-A 列出所有隐藏符号

将两个文件合并输出到另一个文件中:
cat 文件名1 文件名2 < 文件名3

touch命令

创建一个空文件:
touch 文件名 //文件不存在

修改文件的atime、mtime、ctime时间为当前系统时间:
touch 文件名 //文件已经存在

修改文件的数据修改时间mtime:
touch -mt 201012151215.32 文件名

修改文件的访问时间atime:
touch -at 201012151215.32 文件名

stat命令

查看文件的详细信息:
stat 文件名
#文件名
#文件大小 占用的block数 块大小 文件类型
#inode号 链接数
#权限 所有者 所属组
#访问时间
#数据修改时间
#状态修改时间

查看文件所在的文件系统的详细信息:
stat -f 文件名

rm命令

删除文件:
rm 文件名 //每次删除前会询问(默认-i参数)

删除目录(连带删除目录中的文件):
rm -r 目录名

强制删除目录,不询问:
rm -rf 目录名

mv命令

移动文件或目录:
mv 文件名或目录名
-i 如果目标文件存在,询问(默认)
-f 如果目标文件存在,覆盖
-n 如果目标文件存在,不操作
-u 如果目标文件存在,对比更新

给目录或文件改名:
mv 旧名 新名
原文件和目标文件要在同一个目录中

cp命令

复制文件(不改名):
cp 文件名 目标位置/

复制文件(改名):
cp 文件名 目标位置/新文件名

复制目录(不改名):
cp -r 目录名 目标位置/

复制目录(改名):
cp -r 目录名 目标位置/新目录名

在复制软连接文件时,如果不加-d,则复制的是软连接文件的原文件,加-d,复制的是软连接文件。
cp -d 文件名 目标位置/

在用cp命令复制文件时,默认文件的atime、ctime、mtime都会变成系统当前时间。并且文件所有者和所属组都会变成root。保留文件的原属性复制:
cp -p 文件名 目标位置/

另外-a参数相当于-dpr

将目标文件建立为源文件的硬链接:
cp -l 文件名 目标位置/

将目标文件建立为源文件的软链接:
cp -s 文件名 目标位置/

rmdir命令

删除空目录:
rmdir 目录名

删除一连串的目录:
rmdir -p 目录名1/目录名2/目录名3/目录名4
同样要保证各级目录都是空目录,倒着删除。

pwd命令

显示当前目录的绝对路径:
pwd

内置命令:shell自带的命令,没有执行文件,也就不存在执行文件所在的路径 外部命令:由程序员单独开发,有命令的执行文件。

cd命令

cd      相对路径或绝对路径
~ 代表当前登录用户的主目录
~用户名 表示切换至指定用户的主目录
- 代表上次所在目录
. 代表当前目录
.. 代表上级目录

cd什么也不加,也会回到当前登录用户的主目录

mkdir命令

建立单个目录:
mkdir 目录名

在建立目录时,指定目录权限:
mkdir -m 权限值(755) 目录名

建立一连串目录:
mkdir -p 目录名1/目录名2/目录名3/目录名4

ls命令

ls  只显示非隐藏文件的名称,以文件名进行排序,蓝色为目录,白色为一般文件
ls -al 长格式显示所有文件
第一列:文件权限
第二列:引用计数,文件的引用计数表示该文件的硬链接个数,目录的引用计数表示该目录有多少个一级子目录
第三列:文件的所有者
第四列:文件的所属组
第五列:文件大小,单位是字节
第六列:文件内容修改时间mtime
第七列:文件名或目录名

ls -l 指定目录名 显示这个指定目录下的内容的信息
ls -ld 指定目录名 显示这个指定目录下的信息
ls -lh   以人类习惯的方式显示文件的大小
ls -li 显示文件的inode号
ls -l --time=atime     输出atime
ls -l --time=ctime     输出ctime

whoami命令

显示当前用户名:
whoami

wc命令

统计一个文件中的字节数:
wc -c 文件名

统计一个文件中的字符数:
wc -m 文件名

统计一个文件中的行数:
wc -l 文件名

统计一个文件中的单词数:
wc -w 文件名

统计一个文件中最长的行占用的字节数(不包括换行符):
wc -L 文件名

同时统计一个文件中的行数、单词数、字节数:
wc 文件名

top命令

top
top命令的输出内容是动态的可交互的,默认每3秒刷新一次。
前五行显示的是整个系统的资源使用情况,就是通过这五行内容来判断服务器的资源使用情况的:
第一行中:
19:34:34 系统当前时间
up 10 min 系统的运行时间,系统刚运行了10分钟。
3 users 当前登陆了3个用户
load average:0.00,0.02,0.00 系统在之前1分钟、5分钟、15分钟的平均负载。如果CPU是单核的,则这个数值超过1就是高负载;如果CPU是四核的,则这个数值超过4就是高负载;一般认为不应该超过服务器CPU的核数。

第二行中:
Tasks:248 total 系统中的进程数
1 running 正在运行的进程数
247 sleeping 睡眠的进程数
0 stopped 正在停止的进程数
0 zombie 僵尸进程数,如果不是0,就需要手工检查僵尸进程

第三行中:
0.0us 用户模式占用的CPU百分比
0.0sy 系统模式占用的CPU百分比
0.0ni 改变过优先级的用户进程占用的CPU百分比
100id 空闲CPU占用的CPU百分比
0.0wa 等待输入/输出的进程占用的CPU百分比
0.0hi 硬中断请求服务占用的CPU百分比
0.0si 软中断请求服务占用的CPU百分比
0.0st 虚拟CPU等待实际CPU的时间百分比

第四行中:
KiB Mem:2030468 total 物理内存的总量,单位为KB
1763248 free 空闲的物理内存数量
73604 used 己经使用的物理内存数量
193616 buff/cache 作为缓冲的内存数量

第五行中:
KiB Swap:2094076 total 交换分区的总大小
2094076 free 空闲交换分区的大小
0 used 已经使用的交换分区的大小
1769876 avail Mem 作为缓存的交换分区的大小

通过上面这些信息,就可以判断服务器是否正常:如果1分钟、5分钟、15分钟的负载较高,则证明系统压力大;如果CPU的使用率过高,则证明系统压力大;如果物理内存中空闲内存过少,也证明系统压力大。
然后就应该判断是什么进程占用了系统资源,如果是不必要的进程,就应该结束这个进程;如果是必要进程,就应该增加服务器资源,或者建立集群服务器。

缓存(cache):读取硬盘数据时,把最常用的数据保存在内存的缓冲区中,再次读取时直接在缓存中读,不再去硬盘中读取。是用来加速数据从硬盘中读取的
缓冲(buffer):向硬盘写入数据时,先把数据放入缓冲区,然后再一起向硬盘写入,把分散的写操作集中进行。是用来加速数据写入硬盘的。

Top命令的第二部分:
PID:进程的ID
USER:进程所属的用户
PR:进程的优先级,数越小优先级越高
NI:进程的优先级,数越小优先级越高
VIRT:该进程使用的虚拟内存的大小,单位为KB
RES:该进程使用的物理内存的大小,单位为KB。
SHR:共享内存大小,单位为KB。
S:进程状态。
%CPU:该进程占用CPU的百分比。
%MEM:该进程占用内存的百分比。
TIME+:该进程共占用的CPU时间。
COMMAND:进程的命令名。

用top命令查看某个进程:
top -p 进程PID

将top命令的执行结果重定向到文件:
top -b -n 1 > 文件名
-n 1 表示top命令只刷新一次。

top命令的参数:
-d 秒数 指定top命令每隔几秒更新一次,默认3秒
-u 用户名 只查看某个用户的进程

交互操作:
h 帮助信息
P 按照CPU的使用率排序,默认
M 按照内存的使用率排序
N 按照进程的PID排序
T 按照CPU的累积运算时间(TIME+)排序
k 给指定进程发送指定信号
q 退出top命令

 

ps命令

ps aux      查看系统中所有的进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER 进程所属的用户
PID 进程的ID
%CPU 该进程占用CPU资源的百分比
%MEM 该进程占用物理内存的百分比
VSZ 该进程占用虚拟内存的大小
RSS 该进程占用实际物理内存的大小
TTY 该进程运行的终端,tty1~tty7代表本地控制台终端,pts/0~255代表虚拟终端,一般是远程连接的终端
STAT 进程状态。
START 该进程的启动时间
TIME 该进程占用 CPU 的运算时间
COMMAND 产生此进程的命令名

ps -le 查看系统中所有的进程,比ps aux信息更全
F S UID PID PPID C PRI Nl ADDR SZ WCHAN TTY TIME CMD
F 进程的权限。1:进程可以被复制,但是不能被执行;4:进程使用超级用户权限。
S 进程状态。
UID 进程所属的用户ID
PID 进程的ID
PPID 进程的父进程ID
C 该进程的CPU使用率,单位是百分比
PRI 进程的优先级,数值越小,优先级越高,越早被CPU执行
NI 进程的优先级,数值越小,优先级越高,越早被CPU执行
ADDR 进程在内存中的位置
SZ 进程占用多大内存
WCHAN 该进程是否正在运行,"-"代表正在运行
TTY 该进程运行的终端
TIME 该进程占用 CPU 的运算时间
CMD 产生此进程的命令名

查看当前终端产生的进程:
ps -l
输出的列跟ps -le相同

du命令

计算当前文件夹的总大小:
du -sh

计算指定文件的总大小:
du -sh 文件名

计算当前文件夹下每个文件的总大小:
du -sh *

再加上-c参数可以将输出的所有大小求和。
du -csh *

用--max-depth选项可以控制统计的深度(会输出隐藏文件和隐藏文件夹)。
为0时,只统计当前文件夹的总大小
为1时,既统计当前文件夹的总大小,也统计下一级中各文件或文件夹的总大小
为2时,既统计当前文件夹的总大小,也统计下一级中各文件或文件夹的总大小,又统计下下一级中各文件或文件夹的总大小
du --max-depth=0 -h
du --max-depth=1 -h
du --max-depth=2 -h
排除隐藏文件和隐藏文件夹:加入选项--exclude="*/.*"

默认情况下,du命令只输出文件夹的大小,不输出文件的大小。
要输出文件的大小,有两个方法:
(1)加入-a选项
(2)指定普通文件

把当前文件夹下第一级的文件和文件夹按照从大到小排序:
du -sh *|sort -nr

当前文件夹和其子文件夹下的文件和文件夹按照从大到小排序
du -ah .|sort -hr

df命令

显示系统中所有文件系统的硬盘使用情况:
df
Filesystem 1K-blocks Used Available Use% Mounted on
Filesystem:该文件系统位于哪个分区,该列显示的是设备名称
1K-blocks:该文件系统的总大小,默认以KB为单位;
Used:用掉的硬盘空间大小
Available:剩余的硬盘空间大小
Use%:硬盘空间使用率
Mounted on:该文件系统的挂载点

显示系统中所有文件系统的硬盘使用情况(以人们习惯的单位显示):
df -h

clear命令

清屏:
clear

alias命令

定义别名:
alias 别名=命令 如果命令中有空格,就需要用引号括起来

查看定义的别名:
alias

查看指定的别名:
alias 别名

取消定义的别名:
unalias 别名

取消所有别名:
unalias -a

如果别名和某个命令重名了,如何执行这个命令:
(1)使用命令的绝对路径
(2)切换到命令所在的目录,执行./命令
(3)在命令前使用反斜线\

通过alias设置的别名,只能在当前的shell使用,如果系统重启了,就失效了。

shutdown命令

立即重启:
shutdown -r now

指定5点30分重启:
shutdown -r 05:30

取消定时重启或关机:
shutdown -c

10分钟之后重启:
shutdown -r +10

立即关机:
shutdown -h now

指定5点30分关机:
shutdown -h 05:30

reboot命令

重启:
reboot

halt命令

关机:
halt

poweroff命令

关机:
poweroff

init命令

修改Linux运行级别。
关机:
init 0

重启:
init 6

adduser命令

新建用户:
adduser 用户名

新建用户,并指定有效期为2014年1月2日:
adduser -e 1/2/14 用户名

新建用户,并指定用户组:
useradd -g 组名 用户名

新建用户,并指定家目录:
useradd -d /home/myf 用户名

这种新建用户的方法是在新建的同时指定密码。

管道命令

命令1 | 命令2 | 命令3
命令1的输出作为命令2的输入,命令2的输出作为命令3的输入。

重定向操作符>将命令与文件连接起来,用文件来接受命令的输出;
管道符|将命令与命令连接起来,用后一个命令来接收前一个命令的输出。

将一个命令的输出发送到grep命令:
ls -al | grep log.txt

重定向管道的输出到一个文件:
command1 | command2 > output.txt
ls -al | grep log.txt >output.txt

输入重定向操作符<可以在管道中使用,以用来从文件中获取输入:
command1 < input.txt | command2

重定向命令

输入重定向:
(1) 命令 < 文件名
将指定的文件作为命令的输入

(2) 命令 << 分界符(自己定义的)
从标准设备中读取输入,并且遇到分界符才停止,读取的输入中并不包括这个分界符

(3) 命令 < 文件1 > 文件2
将文件1作为命令的输入,该命令的执行结果输出到文件2中


输出重定向:
(1) 命令 > 文件
将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,会清空原有数据,再写入新数据。

(2) 命令 2> 文件
将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,会清空原有数据,再写入新数据。

(3) 命令 >> 文件
将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,新数据将写入到原有内容的后面。

(4) 命令 2>> 文件
将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,新数据将写入到原有内容的后面。

(5) 命令 &>> 文件
将标准输出或者错误输出写入到指定文件,如果该文件中已包含数据,新数据将写入到原有内容的后面

vim替换工具

vim 文件名

首先进入普通模式,在普通模式下输入冒号,就可以进入命令行模式。

将光标所在行遇到的第一个字符串1替换为字符串2
:s/字符串1/字符串2/
将光标所在行遇到的所有字符串1替换为字符串2
:s/字符串1/字符串2/g
将文件中所有行遇到的所有字符串1替换为字符串2
:1,$s/字符串1/字符串2/g
:%s/字符串1/字符串2/g
将文件中从m行到n行遇到的所有字符串1替换为字符串2
:m,ns/字符串1/字符串2/g

转义替换:要替换的字符串中有特殊字符(.):
将S.替换成S->
:s/S\./S->/g

上面的分隔符"/"是可以改变的:
:s#字符串1#字符串2#
:s!字符串1!字符串2!

vim切分窗口

使用vim打开第一个文件:
vim 文件名

输入命令打开第二个文件:
水平切分:
:sp 文件名
垂直切分
:vs 文件名

也可以同时打开两个窗口:
vim -o 文件名1 文件名2

光标切换到另一个窗口的快捷键:
Ctrl+WW

:wq保存并关闭光标所在的窗口

vim显示/取消行号

在命令模式下输入:
:set nu
:set nonu

vim高亮打开/关闭

在命令模式下输入:
:syn on
:syn off

vim的工作模式

用vim工具打开文件后,默认处于命令模式。在这个模式下可以使用上下左右方向键移动光标位置

使用 i、I、a、A、o、O 可以进入输入模式来对文件进行自由编辑:
i 在当前光标所在位置插入随后输入的文本
I 在光标所在行的行首插入随后输入的文本
o 在光标所在行的下面插入新的一行
O 在光标所在行的上面插入新的一行
a 在当前光标所在位置之后插入随后输入的文本
A 在光标所在行的行尾插入随后输入的文本

使用ESC键退出输入模式:
使用:键进入编辑模式,窗口左下方出现:符号,然后就可以输入相应的命令了。

vim的基础操作

使用下面的语句打开文件,如果文件不存在就新建,光标在第一行行首:
vim 文件名

打开文件时还可以指定选项:
vim -R 文件名 把指定的文件以只读方式放入Vim编辑器中
vim + 文件名 打开文件,并将光标置于最后一行的首部
vi +n 文件名 打开文件,并将光标置于第n行的首部
vi +/pattern 文件名 打幵文件,并将光标置于第一个与pattern匹配的位置

在命令模式下查找文本(区分大小写):
/abc 从光标所在位置向后查找字符串abc
/^abc 查找以abc为行首的行
/abc$ 查找以abc为行尾的行
?abc 从光标所在为主向后查找字符串abc
n 向同一方向重复上次的查找指令
N 向相反方向重复上次的查找指定
要查找的字符串中如果有特殊字符,要加上转义字符\
如果要忽略大小写,应该在编辑模式下输入:set ic忽略大小写 :set noic不忽略大小写

在命令模式下修改某一个字符:
定位到要修改字符的地方,按下r,再输入新字符。
在命令模式下修改一连串的字符:
定位到要修改字符的地方,按下R,再输入一连串新字符,按ESC结束。

在命令模式下删除文本:
x 删除光标所在位置的字符
dd 删除光标所在行
ndd 删除当前行(包括此行)后n行文本
dG 删除光标所在行一直到文件末尾的所有内容
D 删除光标位置到行尾的内容
:a1,a2d 函数从a1行到a2行的文本内容(这个是编辑模式)
上面这些被删除的内容都放在了剪贴板中。

在命令模式下复制文本:
p 将剪贴板中的内容粘贴到光标后
P 将剪贴板中的内容粘贴到光标前
y 复制已选中的文本到剪贴板
yy 将光标所在行复制到剪贴板
yw 将光标位置的单词复制到剪贴板

在命令模式下,将两行合并成一行:J

在命令行模式下,撤销刚刚执行的命令:u 可以连续撤销

退出vim编辑器:
:wq 保存并退出
:wq! 保存并强制退出
:q 不保存就退出
:q! 不保存,且强制退出
:w 保存但是不退出
:w! 强制保存
:w filename 另存到 filename 文件
x! 保存并退出
ZZ 直接退出
强制退出和强制保存是用在用户对文件没有写权限的情况。

在命令模式下移动光标:
(1)使用上下左右方向键
(2)以单次为单位移动:
w 光标移动到下一个单词首
b 光标移动到上一个单词首
e 光标移动到下一个单词尾
nw 光标向右移动 n 个单词
nb 光标向左移动 n 个单词
(3)移动至行首或行尾
0或^ 光标移动至当前行的行首
$ 光标移动至当前行的行尾
n$ 光标移动至离当前行只有n行的行尾
(4)移动至当前行指定字符处
fx 光标移动至当前行中下一个x字符处
(5)光标移动至指定行
gg 光标移动到文件开头
G 光标移动至文件末尾
nG 光标移动到第n行
:n 将光标快速定义到指定行的行首(编辑模式下的命令)

在命令模式下的撤销与恢复:
u 撤销最近一次对文本的修改操作
Ctrl+R 恢复最近一次对文本的撤销操作

在命令模式下,进入可视化模式:
v 进入字符可视化模式:此模式下目标文本的选择是以字符为单位的
V 进入行可视化模式,此模式下目标文本的选择是以行为单位的
Ctrl+v 进入块可视化模式,该模式下可以选中文本中的一个矩形区域
可视化模式支持使用的命令:
d 删除选中的部分文本
D 删除选中部分所在的行
y 将选中部分复制到剪贴板中
p 将剪贴板中的内容粘贴到光标之后
P 将剪贴板中的内容粘贴到光标之前
u 将选中部分中的大写字符全部改为小写字符
U 将选中部分中的小写字符全部改为大写字符
> 将选中部分右移一个tab键的长度
< 将选中部分左移一个tab键的长度

对shell脚本中的代码进行注释:
(1)连续行注释:
:第一行,最后一行s/^/#/g
(2)连续行取消注释:
:第一行,最后一行s/^#//g
(3)非连续行添加注释:
定义快捷键:
map 快捷键 执行命令
map t I#<ESC>
按下回车后,在需要注释的行按t就可以了。
(4)非连续行取消注释:
定义快捷键:
map 快捷键 执行命令
map t 0x
按下回车后,在需要删除注释的行按t就可以了。

groupadd命令

创建用户组:
groupadd 组名

groupdel命令

删除用户组:
groupdel 组名

gpasswd命令

把用户加入组:
gpasswd -a 用户名 组名

把用户从组中删除:
gpasswd -d 用户名 组名

newgrp命令

创建一个用户之后,就会建立一个与该用户同名的组,这个组就是该用户的初始组。之后如果该用户加入其他组,其他组就是该用户的附加组,但只有初始组才是该用户的有效组。当该用户创建文件后,这个文件属于该用户的有效组。
改变当前用户的有效组:
newgrp 组名

su命令

普通用户之间切换以及普通用户切换至 root 用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换;从 root 用户切换至其他用户,无需知晓对方密码,直接可切换成功。

普通用户切换成root用户(需要root用户的密码):
su - root
su -

普通用户切换成普通用户(需要普通用户的密码):
su - 用户名

切换回su命令执行之前的用户:
exit

- 代表连带环境变量一起切换,不能省略。
-c 命令 切换用户执行指定的命令,执行后自动切换回来

su - -c 命令 用户名

sudo命令

使用su命令让普通用户切换到root去执行特权指令存在问题:
(1)仅仅为了一个特权操作就赋予了普通用户控制系统的完整权限。
(2)需要公开root用户的密码。
sudo命令也可以切换到其他用户来执行命令,但只需要知道自己的密码就行了。

切换到其他用户来执行一条命令:
sudo -u 用户名 命令

切换到root用户来执行一条命令:
sudo 命令

gcc命令

生成可执行程序:
gcc 源文件名
gcc main.c
生成的可执行文件名默认为a.out

生成可执行文件名时自定义可执行文件名:
gcc 源文件名 -o 可执行文件名
gcc main.c -o main

生成可执行文件名时自定义可执行文件名,并存到其他目录中:
gcc main.c -o ./out/main

运行可执行程序:
./可执行文件名
./main
以上方法是一次性完成编译和链接的整个过程:

将源文件(.c)编译成目标文件(.o):
gcc -c 源文件名
gcc -c main.c
生成的可执行文件名为main.o

将源文件(.c)编译成目标文件(.o),并自己指定目标文件名:
gcc -c 源文件名 -o 目标文件名
gcc -c main.c -o a.o
生成的可执行文件名为a.o

将目标文件连接成可执行文件:
gcc 目标文件名
gcc main.o
生成的可执行文件名为a.out

将目标文件连接成可执行文件,并自己指定可执行文件名:
gcc 目标文件名 -o 可执行文件名
gcc main.o -o main
生成的可执行文件名为main

gcc命令后跟源文件名字或者目标文件名字都可以,gcc命令能自动识别是源文件还是目标文件:如果是源文件,就经过编译和链接两个步骤才能生成可执行文件;如果是目标文件,只需要链接就可以了。

rz命令

使用apt-get install lrzsz来安装该工具
用rz命令将本地文件通过xshell上传至服务器:
rz -y
之后会出现弹窗,选择要上传的文件即可。
 
posted on 2022-10-01 12:22  yc-limitless  阅读(155)  评论(0)    收藏  举报