Linux常用命令整理(适合初学)_linux常用命令大全新手入门-程序员宅基地

技术标签: 运维  linux  服务器  

关机、重启操作、帮助文档

1、帮助命令

1.1 help

help cd				#查看cd命令的帮助信息<help仅支持查看linux内建命令>
vim --help			#查看vim命令的帮助信息<--help仅支持查看linux外部命令>

内建命令:是shell程序的一部分,在linux系统加载运行时shell就被加载并驻留在系统内存中
外部命令:是linux系统中的实用程序部分,并不随系统一起被加载到内存中,而是在需要时才将其调用内存
查看方法:type command

1.2 man command

man stat			#查看stat命令帮助手册

1.3 info command

info reboot			#查看reboot命令的详细信息

2、关机、重启

2.1 重启shutdown、reboot、init

shutdown -r 10		#10分钟后重启
shutdown -r now		#立即重启
init 1				#立即重启
reboot				#立即重启

2.2 关机shutdown、poweroff、init、halt

shutdown -h 10		#10分钟后关机
shutdown -h 12:00	#12点关机<如果时间大于12:00则第二日相同时间关机>
shutdown -h now		#立即关机
poweroff			#立即关机
init 0				#立即关机
halt				#立即关机<不理会目前系统状况下,进行硬件关机,不建议使用>

目录、文件操作

1、目录切换 cd

命令:cd

cd ~				#切换到当前登录用户家目录
cd ~username		#切换到username用户家目录<root用户使用>
cd -				#切换到上次访问目录
cd /				#切换到根目录
cd ..				#切换到上一级目录
cd /home			#切换到根下的home目录

ESC+. 表示引用上一个命令的最后一个参数(等价于!$)

2、目录、文件查看 pwd、tree、ls、stat

pwd					#显示当前工作目录路径
tree /home/			#树状显示目录结构
ls					#查看当前目录下的所有目录和文件<不包含隐藏文件>
ls -a				#查看当前目录下的所有目录和文件<包含隐藏文件>
ll					#列表查看当前目录下的所有目录和文件<不包含隐藏文件>
ls -l				#列表查看当前目录下的所有目录和文件<不包含隐藏文件>
ll -d /home/		#列表查看home目录本身的信息
ll file.txt			#查看file.txt文件的信息<包含文件类型、权限、属主、属组、修改时间等信息>
stat /home/			#查看home目录本身的详细信息
stat /home/file.txt	#或查看文件的详细信息

3、目录、文件操作[创建、删除、修改、查找]

3.1 创建目录 mkdir

用法:mkdir [选项]… 目录…

mkdir dir					#在当前目录下创建dir目录
mkdir /home/dir1 			#在/home目录下创建dir1目录
mkdir -p dir/dir2/dir3		#在当前目录下递归创建dir2、dir3目录<dir目录已存在就不会再创建>
mkdir -m 761 /home/dir4		#创建dir5是指定目录权限为rwxrw---x
mkdir -v dir{
    1..10}			#一次创建dir1-dir10十个目录并显示创建过程

3.2 创建空文件 touch

用法:touch [选项]… 文件…
linux中的touch命令不常用,一般用来修改文件时间戳,或者新建一个不存在的文件。

touch file.txt						#创建空文件file.txt,如果文件已存在则修改文件时间戳

touch -a file.txt					#只更改文件的存取时间
touch -m file.txt					#只更改变动时间

touch -r file.txt log.txt			#将file.txt文件的时间戳修改为log.txt的时间戳
touch -t 201910101212.30 file.txt	#按照[[CC]YY]MMDDhhmm[.SS]格式修改文件时间戳

3.3 删除目录、文件 rmdir、rm

mkdir用法:rmdir [选项]… 目录…<只能删除空目录>

rmdir dir10					#删除当前目录下的空目录dir10
rmdir -p dir/dir2			#递归删除目录,当子目录dir2删除后其父目录dir为空时,也一同被删除

rm用法:rm [选项]… 文件…

rm file						#删除文件
rm -r dir					#删除目录

rm -f file					#强制删除文件不提示
rm -rf dir					#强制删除目录下所有内容不提示

rm -rfv dir					#强制删除目录下所有内容不提示并显示删除过程

3.4 目录、文件修改 mv、cp、scp

mv用法: mv [选项]… 源文件或目录 目标文件或目录

mv old-file new-file		#将文件old-file重命名为new-file
mv old-dir new-dir			#将目录old-dir重命名为new-dir

mv old-file /home			#将文件old-file移动到/home目录下
mv old-dir /home			#将目录old-dir移动到/home目录下

mv file1 file2 /home		#将多个文件移动到/home目录下
mv dir1 dir2 dir3 /home		#将多个目录移动到/home目录下

mv -f file1 file2			#重命名file1为file2时如果file2已存在,直接强制覆盖不提示
mv file1 -b file2			#文件被覆盖前做简单备份

cp用法: cp [选项]… 源文件或目录 目标文件或目录

cp file.log file.txt		#拷贝file.log文件并命名为file.txt
cp file	/home				#将file文件拷贝到/home目录
cp -r dir1 dir2				#拷贝dir1目录并命名为dir2<如果dir2已存在,就会将dir1拷贝到dir2目录内>

cp -a dir3 dir4				#拷贝dir3目录为dir4时不改变时间戳
cp -r dir5 dir6				#将目录dir5的所有文件及其子目录复制到目录dir6中

scp用法: scp [选项]… 源文件或目录 [远程主机用户名]@[远程主机IP地址]:目标文件或目录

scp /home/centos/ll.txt 192.168.189.130:/home/centos/				#将文件拷贝到远程主机不改变文件名<未指定用户名,默认root>
scp /home/centos/ll.txt [email protected]:/home/centos/			#将文件拷贝到远程主机不改变文件名

scp /home/centos/ll.txt 192.168.189.130:/home/centos/cc.txt			#将文件拷贝到远程主机并改变文件名<未指定用户名,默认root>
scp /home/centos/ll.txt [email protected]:/home/centos/cc.txt	#将文件拷贝到远程主机并改变文件名

scp -r /home/centos/ 192.168.189.130:/home/centos/					#将目录拷贝到远程主机不改变目录名<未指定用户名,默认root>
scp -r /home/centos/ [email protected]:/home/centos/				#将目录拷贝到远程主机不改变目录名
scp -r /home/centos/ [email protected]:/home/tt/					#将目录拷贝到远程主机并改变目录名

3.5 文件查看 nl、cat、more、less、head、tail、wc

用法:nl [选项]… [文件]…

nl file.txt					#查看文件并显示行号<空白行不加行号>
nl -b a file.txt			#查看文件并显示行号<空白行加行号>

用法:cat [选项]… [文件]…

cat file.txt						#一次显示整个文件
cat -n file.txt						#查看文件并显示行号<空白行加行号>
cat -b file.txt						#查看文件并显示行号<空白行不加行号>

cat > cat.txt <<EOF					#从键盘创建一个新文件,不能编辑已有文件<EOF为输入结束符,可自定义>
cat file1.txt file2.txt >file.txt	#将多个文件合并为一个文件

用法:more [选项]… [文件]…
仅支持向下翻页

more file.txt				#会以一页一页的显示文件内容

more +10 file.txt			#从第10行开始显示文件内容
more -10 file.txt			#自定义屏幕大小为10行显示

用法:less [选项]… [文件]…
less功能与more类似,但是支持上下翻页,比more用户更多的搜索功能,而且less 在查看之前不会加载整个文件

less file.txt				#会以一页一页的显示文件内容
less file1.txt file2.txt	#同时查看多个文件 
less -N file.txt			#查看文件并显示行号

用法:head [选项]… [文件]…

head log.txt				#查看文件的开头<默认显示10行>

head -n 30 log.txt			#查看文件的前30行
head -n -30 log.txt			#查看文件除了最后30行以外的内容

head -c 100 log.txt			#查看文件前100个字节
head -c -100 log.txt		#查看文件除了最后100个字节以外的内容

用法:tail [选项]… [文件]…

tail log.txt				#查看文件的末尾<默认显示10行>

tail -n 20 log.txt			#查看文件的后20行
tail -n +10 log.txt			#从第10行开始显示文件

tail -c 200 log.txt			#查看文件最后200个字节
tail -c +200 log.txt		#从第200个字节开始显示文件

用法:wc [选项]… [文件]…
wc命令可以计算文件的Byte数、字数、或是列数

wc file.txt					#依次显示文件的行数、字数、Byte数
wc file1.txt file2.txt		#同时计算多个文件的文件信息

wc -l file.txt				#只显示文件的行数
wc -w file.txt				#只显示文件的字数
wc -c file.txt				#只显示文件的Byte数<字节数>

3.6 文件查找 which、whereis、locate、find

用法:which [选项]… [命令]…

which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果

which which					#用which找出which命令的位置
which vim					#用which找出vim命令的位置

用法:whereis [选项]… 程序名…
whereis命令只能从数据库中查找程序名,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。但是该数据库文件默认情况下时一星期更新一次,因此,在用whereis 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。

whereis python				#将python相关的文件都查找出来
whereis -b python			#将python相关的二进制文件查找出来
whereis -m python			#将python相关的man说明文件查找出来
whereis -s python			#将python相关的源代码文件查找出
whereis -u python			#将python除可执行文件、源代码文件、帮助文件以外的其它文件

用法:locate [选项]… 搜索模式…

locate vim					#查找和vim相关的所有文件
locate /home/l				#在/home目录下查找以l开头的文件
locate /home/*txt			#在/home目录下查找以txt结尾的文件

Find 查找文件

用法:find 搜索路径… [选项]…搜索内容…[执行操作]…
find 是比较特殊的命令,它有两个参数:
第一个参数用来指定搜索路径
第二个参数用来指定搜索内容

按照文件名搜索

选项:
-name: 按照文件名搜索
-iname: 按照文件名搜索,不区分文件名大小
-inum: 按照 inode 号搜索

find / -name yum.conf		#在根目录下査找文件名是yum.conf的文件

find 命令是完全匹配的,必须和搜索关键字一模一样才会列出

touch yum.conf.bak			#在/root/目录下建立一个文件yum.conf.bak
find /-name yum.conf		#搜索只能找到yum.conf文件,而不能找到 yum.conf.bak 文件
/etc/yum.conf
按照 inode 号搜索

是区分硬链接文件的重要手段,因为硬链接文件的 inode 号是一致的

ls -i file					#查询文件的inode
ls -id /home				#查询目录的inode
stat 目录名/文件名			#查询目录或者文件的inode

find / -inum 64				#在根目录下查找inode号是64的文件
按照文件大小搜索

选项:-size [±]大小
“+“的意思是搜索比指定大小还要大的文件,”-” 的意思是搜索比指定大小还要小的文件。

find -size 25k				#当前目录下查找大小刚好是25k的文件
find -size -25k				#当前目录下查找小于25k的文件
find -size +25k				#当前目录下查找大于25的文件
按照修改时间搜索

选项:
-atime [±] 时间:按照文件访问时间搜索
-mtian [±] 时间:按照文件数据修改时间搜索
-ctime [±] 时间:按照文件状态修改时间搜索

find -atime -10				#查找十天内访问过的文件
find -mtime 10				#查找前十至十一天修改过数据的文件
find -ctime +10				#查找11天前修改过状态的文件

Find 时间轴如下图:
find时间轴

按照文件权限搜索

选项:
-perm 权限模式:査找文件权限刚好等于"权限模式"的文件
-perm -权限模式:査找文件权限全部包含"权限模式"的文件
-perm +权限模式:査找文件权限包含"权限模式"的任意一个权限的文件

find -perm 444				#查找权限等于444的文件<査找的文件权限必须和指定的权限模式一模一样才可以找到>
find -perm -200				#查找权限全部包含200的文件<文件的权限必须全部包含搜索命令指定的权限模式才可以找到>
find -perm +200				#查找权限只要包含200任意一个权限的文件<只要包含任意一个指定权限就可以找到>
按照文件属主和属组搜索

选项:
-uid 用户: ID按照用户 ID 査找所有者是指定 ID 的文件
-gid 组 ID:照用户组 ID 査找所属组是指定 ID 的文件
-user 用户名:按照用户名査找所有者是指定用户的文件
-group 组名:按照组名査找所属组是指定用户组的文件
-nouser:査找没有所有者的文件

find -uid 1000				#查找属主uid是1000的全部文件
find -gid 1001				#查找属组uid是1001的全部文件
find -user centos			#查找属主是centos用户的全部文件
find -group centos			#查找属组是centos组的全部文件
find -nouser				#查找没有所有者的文件,主要用于査找垃圾文件
按照文件类型搜索

选项:
-type d :查找目录
-type f :查找普通文件
-type l :查找软链接文件

find /etc -type d			#查找 /etc目录下有哪些子目录
find /etc -type f			#查找 /etc目录下有哪些普通文件
find /etx -type l			#查找 /etc目录下有哪些软链接文件

查看文件类型:file 文件名

—普通文件(文本文件,二进制文件,压缩文件,电影,图片…)
d 目录文件(蓝色)
b 设备文件(块设备)存储设备硬盘,U盘 /dev/sda, /dev/sda1
c 设备文件(字符设备)打印机,终端 /dev/tty1, /dev/zero
s 套接字文件
p 管道文件
I 链接文件(淡蓝色)

逻辑运算符

-a :and逻辑与
-o :or逻辑或
-not :not逻辑非

find -size +2k -a -type f		#在当前目录下查找大于2k的普通文件
find -name cangls -o -name bols	#在当前目录下查找文件名要么是cangls,要么是bols的文件
find -not -name cangls			#在当前目录下查找文件名不是cangls的文件
-exec、-ok选项

find 搜索路径 [选项] 搜索内容 -exec 命令2{} ;
首先,这里的"{}“和”;“是标准格式,只要执行”-exec"选项,这两个符号必须完整输入
其次,这个选项的作用其实是把 find 命令的结果交给由"-exec"调用的命令来处理。"{}"就代表 find 命令的査找结果。

find -perm 444 -exec ls -l {
    } \;		#查找权限等于444的文件并且查看文件信息
find -name ll.txt -exec rm -rf {
    } \;	#查找文件名为ll.txt的文件并强制删除

find 搜索路径 [选项] 搜索内容 -ok 命令2{} ;
“-ok"选项和”-exec"选项的作用基本一致,区别在于:"-exec"的命令会直接处理,而不询问;"-ok"的命令 2 在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行

find .-perm 444 -ok rm -rf{
    } \;
<rm…./test2>?y  <-需要用户输入y,才会执行

4、文件编辑 vim

vim支持同时编辑两个文件,ctrl+ww进行切换,q退出、qall全部退出

vim -O /etc/hosts /etc/hostname

vimdiff将两个相似文件不同的地方特别标识出来(用于两个相同的文件进行对比改错)

vimdiff /etc/host /etc/host1
4.1、命令模式

命令模式里面使用ZZ<大写Z>保存退出

光标定位

h			#左
j			#下
k			#上
l			#右
0			#定位到光标所在行首
$			#定位到光标所在行尾
gg			#定位到第一行第一个
G			#定位到最后一行第一个
3G			#定位到第3(n)行第一个
/字符		#以搜索的方式进行定位(n--向下循环移动,N--向上循环移动)
/^d			#定位以d开头行的内容
/txt$		#定位以txt结尾行的内容

文本编辑

y			#复制(yy-复制1行,3yy-复制3行,ygg--从光标处一直复制到第一行,yG--从光标出一直复制到最后一行)
d			#删除(dd-删除1行,3dd-删除3行,dgg--从光标处一直删除到第一行,dG--从光标出一直删除到最后一行)
p			#粘贴

x			#删除光标所在字符
D			#从光标处删除到行尾

u			#undo撤销
^r			#redo重做(反撤销)
r			#用来修改光标处的一个字符(r--单字符替换;R--多字符替换)
4.2、编辑模式

进入到编辑模式

a			#从光标后插入
i			#从光标前插入
o			#从光标所在行另起一行插入
A			#从光标所在行尾插入
4.3、 扩展模式

保存退出

:10			#进入第10行
:w			#保存
:q			#退出
:wq			#保存并退出
:w!			#强制保存
:q!			#强制退出
:wq!		#强制保存退出
:x			#保存并退出(X--保存并加密码)

查找替换:

:范围 s/old/new/选项

:1,5 s/old/new/		#从1-5行将old替换为new(只会替换掉1-5行含old的第一列)
:1,5 s/old/new/g	#从1-5行将old替换为new,g代表全局,1-5行所有含old都会进行替换
:5,$ s/old/new/		# $表示最后一行
:1,$ s/old/new/		#等价于% s/old/new/g   %表示全文,g表示全局
: ,8 s/old/new/		#从当前行到第8行将old替换为new
:4,9 s/^#//			#将4-9行的开头#替换为空
:5,10 s/.*/#&/		# 5-10行前插入#(.*表示整行,&引用查找的内容)

保存、另存、读取

:w						#保存到当前文件
:w /new/aaa.txt			#另存为/new/aaa.txt
:1,3 w /new/bbb.txt		#将1-3行另存为/new/bbb.txt
:r /etc/old				#读入文件到当前行后
:5 r /etc/old			#读入文件到第5行后

临时环境设置

:set nu				#设置行号
:set nonu			#取消行号设置
:set ic				#不区分大小写
:set noic			#区分大小写
:set ai				#自动缩进
:set list			#显示控制字符

永久环境设置–修改vim环境配置文件

/etc/vimrc			#影响所有用户
~/.vimrc			#影响某一个用户
[centos@centos ~]$ vim ~/.cimrc
set ic
set nu
#在文件最后添加即可
4.4、可视模式
v				#进入可视模式
^v				#进入可视块模式
V				#进入可是行模式
r				#单字符替换
R				#进入替换模式,可多字符替换
块插入			#选择块,I (大写的i),在块前插入字符,ESC
块替换			#选择块,r,输入替换字符
块删除			#选择块,d、x
块复制			#选择块,Y

5、目录、文件权限查看修改

在这里插入图片描述
在这里插入图片描述
用户获取文件权限的顺序: 先看是否为所有者,如果是,则后面权限不看;再看是否为所属组,如果是,则后面权限不看。

针对目录加执行权限,文件不加执行权限(因文件具备执行权限有安全隐患)
root账户不受文件权限的读写限制,执行权限受限制

查看目录、文件权限
ll file						#查看文件权限<包含文件类型、属主、属组、对应权限、修改时间等>
ll dir						#查看目录下面的文件权限
ll-d dir					#查看目录本身的权限
修改目录、文件属主、属组 chown、chgrp

用法:chown [选项]… [所有者][:[组] 文件…

chown root /var/run/httpd.pid			#将 /var/run/httpd.pid 的属主修改为 root
chown :ubuntu /home/centos/file.txt		#将 /home/centos/file.txt的属组修改为ubuntu
chown runoob:runoobgroup file1.txt		#将文件 file1.txt 的属主修改为 runoob,属组 runoobgroup 

chown 1000 /var/run/httpd.pid			#将 /var/run/httpd.pid 的属主修改为1000<用户ID>
chown :1001 /home/centos/file.txt		#将 /home/centos/file.txt的属组修改为1001<组ID>

用法:chgrp [选项]… 用户组 文件…

chgrp groupname /home/centos/file.txt	#将/home/centos/file.txt的属组修改为groupname

更改文件/目录的属主/属组相当于将文件的所有权转移给新的属主/属组

修改目录、文件权限 chmod

mode法格式:chmod who opt per file
在这里插入图片描述

chmod u+x file				#给文件属主添加执行权限
chmod u-x file				#将文件属主去掉执行权限
chmod u=rwx file			#将文件属主权限更改为读/写/执行
chmod u=rwx,o=r file		#文件所有者拥有读写执行权限,其他人只有读权限
chmod u=r file1 file2		#同时修改2个文件的权限

数字法格式:chmod XXX file

chmod 777 file				#将文件file的属主、属组、其他人权限都更改成读写执行
chmod 764 file				#将文件file的属主、属组、其他人权限更改成读写执行、读写、读
chmod 7 file				#等价于chmod 007 file
chmod 7 file1 file2			#同时修改两个文件的权限
chmod 777 dir				#给目录dir本身设置权限
chmod -R 777 dir			#递归设置目录dir的权限
ACL权限管理 getfacl、setfacl

查看文件acl权限

getfacl /home/centos			#查看/home/centos目录本身的acl权限

给文件添加acl权限

setfacl -m u:username:0 file	#使username账户对指定file文件无权限
setfacl -m u:username:rw file	#使username账户对指定file文件有读写权限
setfacl -m g:group:rw file		#使group组对指定file文件有读写权限

删除文件acl权限

setfacl -x u:username file		#删除username账户对指定file文件的ACL权限
setfacl -x g:group file			#删除group组对指定file文件的ACL权限

ACL权限执行顺序类似于用户获取文件权限的顺序,getfacl顺序从上到下执行,一旦生效,下面的将不再生效(如果属于多个组,权限累加)

acl权限下的mask
设置用户对指定文件所能拥有的最大权限(限高作用)

setfacl -m mask::r file			#使指定文件file所拥有的最大权限位读r
setfacl -x mask::r file			#取消指定文件file的最大权限限制mask
setfacl -b file					#取消file文件所有的ACL权限

ACL生效顺序:所有者、自定义用户、自定义组、其他人

acl权限的继承:default

setfacl -m  d:u:centos:rwx dir	#d等同于default,赋予用户centos以后在目录dir下新建的文件有读写执行的权限

继承是针对于之后的,继承之前(现在)不起作用

备份和恢复ACL权限

getfacl -R /tmp/dir>acl.txt					#将dir目录下ACL权限备份
setfacl -R --restore=acl.txt				#恢复dir目录下ACL权限restore(前提是先进入到dir的上层目录)
getfacl file1 | setfacl --set-file1=- file2	#将file1文件的acl权限设置给file2文件
特殊权限suid、sgid、sticky

suid
作用:给一个用户继承二进制程序属主拥有的权限
suid权限位 位于所有者的执行权限位上,如果一个文件具有suid权限,则所有者执行位为s(如果一个文件属主本身具有执行权限的同时再附加suid权限,则所有者执行位为s),文件表现为红色背景

chmod u+s ll.txt			#给ll.txt文件增加suid权限
ll ll.txt					#查看文件信息
-rwSrwxr--+ 1 ubuntu ubuntu 1175 11月  3 12:29 ll.txt

chmod 4755 ll.txt			#suid数字法表示为4
ll ll.txt 					#查看文件信息
-rwsr-xr-x+ 1 ubuntu ubuntu 1175 11月  3 12:29 ll.txt

sgid
作用1:给一个用户继承二进制程序属组拥有的权限
作用2:作用在目录上时,使一个目录下的新建的文件继承目录的所属组拥有的权限
sgid权限位 位于所有组的执行权限位,如果一个文件具有sgid权限,则所有组的执行位为s(如果一个文件属组具有执行权限的同时再附加sgid权限,则所有者执行位为s),文件表现为黄色背景

chmod g+s ll.txt			#给ll.txt文件增加sgid权限
ll ll.txt 					#查看文件信息
-rwsr-Sr-x. 1 ubuntu ubuntu 1175 11月  3 12:29 ll.txt

chmod 2775 ll.txt			#sgid数字法表示为2
ll ll.txt 					#查看文件信息
-rwxrwsr-x. 1 ubuntu ubuntu 1175 11月  3 12:29 ll.txt

sticky
作用:作用于目录上,此目录的文件只能被所有者删除(root、文件所有者、目录的所有则可以删除)
sticky权限位 位于其他的执行权限位上,如果一个文件具有sticky权限,则其他的执行位为t,目录表现为绿色背景

chmod o+t dir/				#给dir目录增加sticky权限(添加之后目录其他的执行位为t)
ll -d dir/					#查看目录本身信息
drwxr-xr-t. 2 root root 6 11月  4 11:18 dir/

chmod 1777 dir/				#sticky数字表示法为1(添加之后目录其他的执行位为t)
ll -d dir/					#查看目录本身信息
drwxrwxrwt. 2 root root 6 11月  4 11:18 dir/
目录、文件隐藏属性 chattr、lsattr

lsattr 命令,专门用来查看文件或目录的隐藏属性

chattr 命令,专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用。添加隐藏属性之后即使是root也无法进行删除、修改操作.
基本格式:
chattr [±=][属性] 文件或目录名

  • 表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录设定一些属性
    在这里插入图片描述
    注意:通常情况下,不要使用 chattr 命令修改 /、/dev/、/tmp/、/var/ 等目录的隐藏属性,很容易导致系统无法启动。另外,chattr 命令常与 lsattr 命令合用,前者修改文件或目录的隐藏属性,后者用于查看是否修改成功
chattr +i dir/			#给目录赋予隐藏属性
lsattr -d dir/			#查看目录隐藏属性
----i----------- dir/	
touch dir/file			#在目录下创建文件报错
touch: 无法创建"dir/file": 权限不够

chattr +a file			#给文件赋予隐藏属性
lsattr file				#查看文件隐藏属性
-----a---------- file

chattr -a file			#删除文件隐藏属性
chattr -i dir/			#删除目录隐藏属性
Linux权限管理之进程掩码 mask umask

新建文件、目录的默认权限会受到umask的影响,umask表示要减掉的权限。默认情况下,文件夹的umask值为022,文件的umask值为133(在文件夹权限的基础上减去执行权限)。
umask:表示查看减掉的权限
umask -S:表示查看减掉之后该有的权限

umask 000				#临时设置新建的文件夹的权限为读写执行全给,同时影响新建文件的权限
mkdir dir900
touch file900
ll -d dir900 file900
drwxrwxrwx. 2 root root 4096 3月 11 19:44 dir900
-rw-rw-rw-. 1 root root 0 3月 11 19:44 file900
vim /etc/profile		#永久修改shell umask值
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002    #影响文件夹的权限
else
umask 022    #影响文件的权限
fi
source /etc/profile		#立即在当前shell中生效
vim /etc/login.defs		#通过umask决定新建用户HOME目录的权限
UMASK 077
useradd gougou			#新建用户
ll -d /home/gougou/		#查看用户家目录权限
drwx------. 4 gougou gougou 4096 3月 11 19:50 /home/gougou/

vim /etc/login.defs		#通过umask决定新建用户HOME目录的权限
UMASK 000
useradd yangyang		#新建用户
ll -d /home/yangyang/	#查看用户家目录权限
drwxrwxrwx. 4 yangyang yangyang 4096 3月 11 19:53 /home/yangyang/
umask 777;touch file	#修改mask值并创建文件(修改的mask值在重启前都有效)
(umask 777;touch file)	#修改mask值并创建文件(修改的mask值只针对新建的file文件有效)

给命令添加()表示在子进程subshell中执行

6、文件压缩及解压 tar

打包:目的就是为了管理方便
压缩:目的就是为了节省空间
用法: tar 选项… 文件…

tar -czf ll.tar.gz ll.txt			#打包并调用gzip压缩到当前位置
tar -xzf ll.tar.gz					#解压到当前位置<其中z可以不写让系统自动判断压缩包类型>
tar -xf ll.tar.gz -C /home/centos	#-C重定向到/home/centos目录

扩展:将A机器上 /etc(海量小文件)拷贝到B机器 /tmp(快速拷贝大量文件)

[root@centos home]# firewall-cmd --permanent --add-port=8888/tcp	#开放8888端口
[root@centos home]# firewall-cmd --reload							#关闭防火墙
或者
[root@centos home]# systemctl stop firewalld.service				#关闭防火墙

[root@centosjobs home]# nc -l 8888 |tar -xzf - -C /tmp				#在B机器上执行
[root@centos home]# tar -czf - /etc |nc 192.168.6.130 8888			#在A机器上执行

用户、组管理

1、创建用户 useradd

用法:useradd [选项] 用户名

useradd tt			#创建tt用户
#未指定用户的主组、附加组、家目录、shell、UID;系统会自动创建一个和用户名相同的组作为它的主组、家目录
useradd -g root tt			#创建用户tt并指定tt用户的主组为root
useradd -d /home/myd cc		#创建用户cc并指定家目录
useradd -t xx				#创建一个系统用户xx
useradd -u 544 zz			#创建用户zz并指定ID
useradd aa -s /sbin/nologin	#创建用户aa并指定shell

用户的主组有且只有一个,使用-g可以进行指定或者系统自动创建;附加组可以有多个也可以没有,创建时使用-G进行指定或者使用usermod、gpasswd进行修改
注意:-g,-G仅在创建新用户时才可以使用,指定的组必须事先存在

/sbin/nologin 用户无法登陆系统实现管理、仅作为运行进程的的用户
/bin/bash 登陆系统实现管理

2、查看用户信息 id

id						#查看当前用户信息
id tt					#查看tt用户信息

用户信息配置文件/etc/passwd

root	:x			:0		:0		:root	:/root	:/bin/bash
用户名	:密码占位符	:uid	:gid	:描述	:home	:shell

密码信息配置文件/etc/shadow

root:$6$anuXmRiOlc2YJHqo$L5EojaibMiK1J7P/TyKK5BFpJlomzVD0YyuGjuR8qzdElx3CrRQw.8GfQOEsB1Gtc.7qfnvaxdCnJmyK0RJbp.::0:99999:7:::
第一个字段为:用户名					#root
第二个字段为:加密的密码				#$6$anuXmRiOlc2YJHqo$L5EojaibMiK1J7P/TyKK5BFpJlomzVD0YyuGjuR8qzdElx3CrRQw.8GfQOEsB1Gtc.7qfnvaxdCnJmyK0RJbp.
第三个字段为:密码最后一次修改的时间		#(chage -d)--空(代表从未修改)
第四个字段为:密码最小修改间隔时间		#(chage -m)--0
第五个字段为:密码最大修改间隔时间		#(chage -M)--99999
第六个字段为:密码需要变更前的警告天数	#(chage -W)--7
第七个字段为:密码过期后的宽限天数		#(chage -I)--空
第八个字段为:账号失效时间				#(chage -E)--空
第九个字段为:保留

密码:
$6			$anuXmRiOlc2YJHqo				$L5EojaibMiK1J7P/TyKK5BFpJlomzVD0YyuGjuR8qzdElx3CrRQw.8GfQOEsB1Gtc.7qfnvaxdCnJmyK0RJbp.
加密算法		盐(用于区分开同密码)的密码串		密码字符串
三块组合成为用户密码哈希值

加密算法:$1:MD5		$5:SHA-256		$6:SHA-512

组配置文件 /etc/group

wheel	:x				:10		:centos
组名		:密码占位符		:GID	:组成员

3、设置密码 passwd、chage

用法:passwd [选项] 用户名

passwd							#给当前用户设置密码
passwd aa						#给aa用户设置密码,只有root用户才可以给其他用户修改密码

更改用户账户、密码的过期信息:chage
用法:chage [选项] 用户

chage -l root					#查看用户密码的有效期
chage -E 0 ubuntu				#设置密码过期时间为立即过期
chage -d 0 ubuntu				#设置登陆必须修改密码
chage -M 60 -m 7 -W 7 ubuntu	#设置ubuntu用户密码60天后过期,至少7天后才能修改密码,密码过期前7天开始收到告警信息

编辑 /etc/login.defs 来设定几个参数,以后设置口令默认就按照参数设定为准:

PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7

编辑 /etc/default/useradd 可以找到如下2个参数进行设置:

useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

通过修改配置文件,能对之后新建用户起作用,而目前系统已经存在的用户,则直接用chage来配置。

4、修改用户 usermod

用法:usermod [选项] 用户名

usermod -d /home/hnlinux xx		#修改用户家目录
usermod -u 777 cc				#修改用户UID

5、删除用户 userdel

用法:userdel [选项] 用户名

userdel hnlinux					#删除用户账户
userdel -r hnlinux				#删除用户时同时删除用户家目录、邮件、spool

6、切换用户 su、sudo

su用于用户之间的切换,切换前的用户依然保持登录状态

su					#切换至root用户,需要输入root用户密码,切换后家目录任然是原用户家目录<等同于su root>
su -				#切换至root用户,需要输入root用户密码,切换后家目录变成root用户家目录<等同于su -root>

ctrl+d				#退出当前用户登陆状态,返回至切换前用户登陆状态

使用su切换到root账户就需要知道root账户密码,非常不安全。sudo则可以使普通用户临时具有root权限,使用sudo时只需要输入自己的密码即可。

使用root账户编辑 /etc/sudoers文件或者visudo可以修改配置文件,使用户具有sudo权限

gpasswd -a centos wheel					#将centos用户添加到wheel组
visudo									#修改配置文件

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
centos  ALL=(ALL)       ALL				#添加此行

## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL		

## Same thing without a password
%wheel  ALL=(ALL)       NOPASSWD: ALL	#将此行去掉注释,代表在使用sudo执行命令时无需输入密码
less /etc/sudoers			#普通用户查看/etc/sudoers提示权限不够
/etc/sudoers: 权限不够
sudo less /etc/sudoers		#在命令前加上sudo就可以了

7、创建组 groupadd

用法:groupadd [选项] 组

groupadd runoob				#创建一个新组
groupadd -g 333 runoob		#创建新组并指定GID
/etc/group					#组信息
wheel	:x              :10		:centos
组名		:密码占位符		:GID	:组成员

8、删除组 groupdel

用法:groupdel [选项] 组

groupdel linuxcool					#使用groupdel命令删除linuxcool工作组
cat /etc/group | grep linuxcool		#查看linuxcool组是否删除成功

9、添加到组中 gpasswd

用法:gpasswd [选项] 组

gpasswd -a user group				#将user添加到group组当中 
gpasswd -d user group               #将user从group组删除
gpasswd -a user wheel               #将user添加到wheel(类似于管理员组),加sudo即可以管理员身份执行命令

网络管理

1、主机管理uname、hostname

用法:uname [选项]…

-a, --all 以如下次序输出所有信息。其中若-p 和-i 的探测结果不可知则被省略
-s – 输出内核名称
-n – 输出网络节点上的主机名
-r – 输出内核发行号
-v – 输出内核版本
-m – 输出主机的硬件架构名称
-p – 输出处理器类型或"unknown"
-i – 输出硬件平台或"unknown"
-o – 输出操作系统名称

uname				#输出内核名称,相当于uname -s
uname -a			#输出一组系统信息
uname -n			#查看系统主机名

用法:hostname [选项]…

hostname			#查看系统主机名
hostname linux		#将系统主机名临时设置成linux,立即生效。重启后失效

hostnamectl							#查看系统主机信息
hostnamectl set-hostname linux		#永久修改主机名
cat /etc/hostname					#查看是否修改
reboot								#重启生效

2、查看网卡信息 ip、nmcli

用法:ip [选项] 常用对象 { 命令 | 帮助 }
常用对象: { link | address | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila | vrf }

ip addr show												#显示网卡IP信息
ip link show												#显示网络接口信息

ip route show												#显示系统路由
ip route list												#查看路由信息

用法:nmcli [选项] 常用对象 { 命令 | 帮助 }

nmcli				#查看所有网络设备的完整信息
nmcli device		#查看所有网络设备的状态
nmcli device show	#查看所有网络设备的连接信息
nmcli connection	#查看已连接的网络设备信息

常用查看ip的命令

ip a				#ip addr show的简写

nmcli				#效果与ip a 类似

hostname -I			#只显示IP地址,其余不显示

3、修改网卡配置 nmtui

用法:nmtui [选项]…
图形模式配置网卡信息

nmtui				#修改网卡配置
nmtui hostname		#修改主机名
ip addr add 192.168.1.10/24 dev ens33						#设置ens33网卡IP地址192.168.1.10(临时生效,重启失效)
ip addr del 192.168.1.10/24 dev ens33						#删除ens33网卡IP地址
ip link set ens33 up										#开启网卡
ip link set ens33 down										#关闭网卡
ip link set ens33 promisc on								#开启网卡的混合模式
ip link set ens33 promisc offi								#关闭网卡的混个模式
ip link set ens33 txqueuelen 1000							#设置网卡队列长度
ip link set ens33 mtu 1500									#设置网卡最大传输单元
ip route add default via 192.168.1.254						#设置系统默认路由
ip route add 192.168.10.0/24  via  192.168.0.254 dev ens33	#设置192.168.10.0网段的网关为192.168.0.254,数据走ens33接口
ip route add default via  192.168.0.254  dev ens33			#设置默认网关为192.168.0.254
ip route del 192.168.10.0/24								#删除192.168.10.0网段的网关
ip route del default										#删除默认路由
ip route delete 192.168.10.0/24 dev ens33					#删除路由

centos 7 修改网卡名
对已经装好系统的机器修改网卡配置文件:

cd /etc/sysconfig/network-scripts/
mv ifcfg-ens33 ifcfg-eth0
vim ifcfg-ens33
NAME="ens33"改为NAME="eth0"
DEVICE="ens33"改为DEVICE="eth0"

vim /etc/sysconfig/grub
GRUB_CMDLINE_LINUX="spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
#添加
net.ifnames=0

grub2-mkconfig -o /boot/grub2/grub.cfg
rebbot

对未安装的机器在安装时修改:
选中安装centos7之后按tab键
在这里插入图片描述在下面输入net.ifnames=0
在这里插入图片描述

其他命令

1、bash基本特性

bash输入自动补全

bash快捷键

^C		#终止前台运行的程序
^		#退出、等价于exit
^L		#清屏
^A		#光标移动到命令行的最前端
^E		#光标移动到命令行的最后端
^U		#删除光标前所有字符
^K		#删除光标后所有字符

bash历史命令

history		#查看所有历史命令(history -c	#临时清除终端上的历史命令。rm -rf ~/.bash.history;history -c	#永久清除)
光标上下键	#依次查看上一个命令
^R			#利用关键字搜索历史命令
!220		#使用第220条命令(!表示引用)
!字符串		#搜索历史命令中最近一个以xxxx字符开头的命令
!$			#引用上一个命令的最后一个参数
ESC.		#应用上一个命令的最后一个参数

命令别名

alias										#查看当前系统的别名

alias bieming='cd /home/ubuntu2204/'		#建立别名(临时的,仅在当前shell生效)
unalias bieming								#取消别名
type -a ls									#查看命令类型(是什么的别名)
\ls											#使用过程中别名优先,如果需要跳过别名可以在前面加‘\’

永久别名

vim /etc/bashrc								#bashrc为shell配置文件之一
alias bieming='cd /home/ubuntu2204/'

2、Linux进程管理

2.1、查看进程 /proc 、ps aux 、top

第一种方式:在/proc这个目录下保存着所有进程的信息

ls /proc/

第二种方式:可以使用命令ps静态查看进程

ps aux					#查看系统中所有的进程信息
ps aux --sort rss		#按照进程rss升序进行排列
ps aux --sort -rss		#按照进程rss降序进行排列
ps axo 字段				#按照自定义字段的顺序显示进程
ps axo user,pid,rss,vsz				#按照user/pid/rss/vsz的顺序显示进程
ps axo user,pid,rss,vsz --sort rss	#按照user/pid/rss/vsz的顺序显示进程并且按照rss升序排列
ps -ef								#简洁显示进程
ps aux |grep sshd					#查看指定进程sshd
pstree								#查看进程树(层级关系)
ps axj								#可以查看进程的父进程号

pgrep 是一个命令行实用程序,可让您根据给定的条件查找正在运行的程序的进程PID

用法:pgrep [选项] [模式] 进程名/用户名

pgrep ssh				#查看ssh进程的PID
pgrep -l ssh			#查看ssh进程的PID和进程名
pgrep -u root			#查看root用户的所有进程
pgrep -u root,centos	#同时查看root、centos用户的进程

第三种方式:使用top命令动态查看进程

top						#动态的查看进程的信息,其中的信息默认3秒会更新
进程命令:
h	#帮助
M	#按内存的使用排序
P	#按cpu的使用排序
N	#以PID的大小排序
R	#对排序进行反转
f	#自定义显示字段  空格选中,右键选中,上下键移动,回车确定,Q退出(未保存)/W保存
1	#显示所有CPU的负载
<	#向前
>	#向后
z	#彩色
w	#保存top环境设置,保存到~/.toprc中
top -d 1 -p 进程号 -u 进程名     

-d 1		#进程刷新时间为1秒
-p 进程号	#查看指定进程
-u 进程名	#查看指定用户运行的进程
-b -n 2		#查看2次

2.2、信号控制进程 kill、killall、pkill

kill -l				#查看全部进程信号(后面只能跟PID或者作业编号)
1)、SIGHUP			#重新加载配置  PID不变
2)、SIGINT			#键盘中断^C
3)、SIGQUIT			#键盘退出
9)、SIGKILL			#强制终止
15)、SIGTERM		#终止(正常结束 )
18)、SIGCONT		#继续
19)、SIGSTOP		#停止
20)、SIGTSTP		#暂停^Z
ps aux |grep sshd			#查看指定进程sshd的信息
kill -1 XXXX(进程PID)		#重载sshd进程
kill -15 XXXX(进程PID)		#正常结束sshd进程
kill -9 XXXX(进程PID)		#强制结束sshd进程

killall 用于杀死一个进程,与 kill 不同的是它会杀死指定名字的所有进程。后面可以跟进程的名字或者用户名

用法:killall [选项] 进程名/用户名

killall -1 sshd			#重新加载sshd进程
killall -1 -u centos	#重新加载ubuntu用户的所有进程

pkill 命令和 killall 命令的用法相同,pkill可以按终端号踢出用户

用法:killall [选项] 进程名/终端号

pkill -15 vim			#按名称结束进程

w						#查看当前在线终端
pkill  -t tty2			#终止终端tty2上所有进程
pkill  -9 -t tty2		#终止终端tty2上所有进程并结束终端tty2

2.3、进程优先级 nice

相对优先级 sched_other
nice值越高:表示优先级越低,例如+19,该进程容易将CPU使用量让给其他进程
nice值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU

NI:实际nice级别
PR:将nice级别显示为映射到更大优先级列队,-20映射到0,+19映射到39

ps查看进程TS表示该进程使用的调度策略是相对优先级sched_other

nice -n -20 sleep 8000							#指定进程的nice值
nice -n -20 sleep 1000 systemctl start httpd	#进程启动时就指定nice值
renice -20 10089								#使用shell更改进程的nice值

2.4、作业控制 jobs

sleep		#sleep命令可以用来将目前动作延迟一段时间

sleep 2		#延迟2秒显示结果,等同于sleep 2s
sleep 2m	#延迟2分钟显示结果
sleep 2h	#延迟2小时显示结果
sleep 2d	#延迟2天显示结果

sleep 100	#前台运行sleep
sleep 100&	#后台运行sleep
ps aux |grep sleep		#查看sleep进程
root        7591  0.0  0.0  11460   996 pts/0    T    20:54   0:00 sleep 100
root        7593  0.0  0.0  11460  1004 pts/0    S    20:55   0:00 sleep 1000
root        7596  0.0  0.1  12184  2372 pts/0    S+   20:58   0:00 grep --color=auto sleep
jobs					#查看当前终端放入后台的工作
[1]+  已停止               sleep 100
[2]-  运行中                sleep 1000 &

^Z 暂时停止进程运行

符号T 表示停止
符号S 表示后台运行

& 表示后台符(只有放在最后才是后台符)

bg %1		#将进程转入后台运行,1表示作业号,作业号前面可以不加%
fg  %1		#将进程转入前台运行,1表示作业号,作业号前面可以不加%
kill %1		#将后台运行的进程关闭,1表示作业号,作业号前面需要加%

扩展:screen;screen --list;screen -r 进程号
xshell 远程连接后先使用screen(或者screen -S 命名),突然断网后再次连接使用screen --list查看进> 程号,再使用screen -r 进程号恢复进程

3、I/O重定向

标准输入:文件描述符0 对应键盘 只能读
标准输出:文件描述符1 对应屏幕 只能写
标准错误:文件描述符2 对应屏幕 只能写

ll /proc/$$/fd
总用量 0
lrwx------. 1 root root 64 11月  8 13:19 0 -> /dev/pts/0
lrwx------. 1 root root 64 11月  8 13:19 1 -> /dev/pts/0
lrwx------. 1 root root 64 11月  8 13:19 2 -> /dev/pts/0
lrwx------. 1 root root 64 11月  8 13:19 255 -> /dev/pts/0

3.1、输出重定向

>覆盖        >>追加

正确输出:1>(等价于>)、1>>(等价于>>)
错误输出:2>、2>>

date > date.txt								#输出重定向(覆盖)
date >> date.txt							#输出重定向(追加)
ls /jgjhgjg 2>error.txt						#错误输出重定向

ls /home/ /jgjhgjg &>list.txt				#正确和错误都输出到相同位置
ls /home/ /jgjhgjg >list.txt 2>&1			#正确和错误都输出到相同位置

ls /home/ /jgjhgjg >list.tt 2>/dev/null		#正确输出到list.txt,错误输出到空设备/dev/null
ls /home/ /jgjhgjg &>/dev/null				#正确和错误都输出到空设备/dev/null

利用重定向建立多行文件示例:
手动shell创建多行文件

cat >file <<EOF				#EOF 表示结束符
> 111
> 222
> 333
> 444
> EOF

脚本script创建多行文件

vim create_file.sh			#编辑脚本文件内容
cat >file.txt <<-EOF
111
222
333
444
555
EOF
[centos@centos ~]$ bash create_file.sh		#执行脚本
[centos@centos ~]$ cat file.txt				#查看文件内容
111
222
333
444
555

如果/dev/null设备被删除:
1、mknod -m 666 /dev/null c 1 3
“-m 666”表示增加权限 “c”表示设备类型 “1”代表主设备号 “3”代表从设备号
2、重启系统自动创建

3.2、输入重定向

标准输入:< 等价于 0<

mail					#查看当前用户邮件

mail centos				#给centos用户发送邮件
Subject:hello			#邮件主题
111						#邮件内容
222
333
.						#在新的一行输入.表示结束输入
EOT
mail -s "hello" centos < /etc/hostname		#将/etc/hostname里面的内容作为数据以邮件的方式发送给centos用户
cat < file.txt >cat.txt						#通过重定向file.txt作为输入设备,并输出重定向到cat.txt,最终实现了将 file.txt 文件中内容复制到 cat.txt 中。
vim at.txt					#创建并编辑新的文件
date						#文件内容:时间查看

at now +5 min <at.txt		#输入重定向:将文件内容作为数据输入至at now +5 min命令,结果显示时间为当前时间加5分钟

3.3、进程管道

将/etc/passwd中的用户按UID进行排序
sort -t":" -k3 -n /etc/passwd			#以:分隔,将第三列按数字升序
sort -t":" -k3 -n /etc/passwd -r		#降序
sort -t":" -k3 -n /etc/passwd |head		#只显示前10个

> -t:指定字段分隔符
> -k:指定列
> -n:按数值
> -r:降序
ps aux --sort=-%cpu |head -6					#统计出最占CPU的5个进程(前6行,首行为标签)
ps aux --sort=-%cpu |head -6 |grep -v '%cpu'    #过滤掉首行
awk -F:'{print $7}' /etc/passwd |sort |uniq -c	#统计出当前/etc/passwd中用户使用的shell类型

> -F:指定字段分隔符
> $7:第7个字段
ip a |grep 'inet ' |awk '{print $2}' |awk -F"/" '{print $1}'		#打印当前所有IP

df -P |grep '/$' |awk '{print $5}' |awk -F"%" '{print $1}'			#打印根分区已用空间百分比(仅打印数字)

tee 管道
tee命令可以在标准输出将数据输出到屏幕的同时重定向到文件中

ip a |grep 'inet ' |awk '{print $2}' |awk -F"/" '{print $1}' |tee -a ip.txt		#打印根分区已用空间百分比(仅打印数字)并且重定向到ip.txt
date |tee date.txt							#显示当前日期并重定向到date.txt
cat /etc/passwd | tee –a /passwd.txt		#查看文件的同时将文件重定向到另一个文件末尾(-a 表示追加)

4、磁盘分区 fdisk

Linux安装环境:minimal install(最小安装)
系统分区-添加挂载点:
1./				//系统根目录
2./swap			//交换分区/虚拟内存/当系统内存耗尽时将硬盘当内存使用防止程序随机杀死进程
3./boot			//存放linux系统启动文件,例如系统内核等
4./home			//用户家目录

主分区主要是用来启动操作系统的,它主要放的是操作系统的启动或引导程序,/boot分区最好放在主分区上;

扩展分区是不能使用的,它只是作为逻辑分区的容器存在的,先创建一个扩展分区,在扩展分区之上创建逻辑分区;

真正存放数据的是主分区和逻辑分区,大量数据都放在逻辑分区中。

fdisk -l /dev/sda		#查看磁盘是否被分区、分区是否满

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000e594d

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    41943039    19921920   8e  Linux LVM
[centos@centos ~]$ lsblk 		#查看分区
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1 1024M  0 rom

4.1、创建主分区

fdisk /dev/sdb															#创建分区
n		add a new partition												#新建分区
p		print the partition table										#显示分区信息
1		分区号 (1-4,默认 1)#设置分区号
Enter	起始 扇区 (2048-2097151,默认为 2048):							#起始扇区
        将使用默认值 2048    
+200M   Last 扇区, +扇区 or +size{
    K,M,G} (2048-2097151,默认为 2097151)#分区大小
		分区 1 已设置为 Linux 类型,大小设为 200 MiB
w		write table to disk and exit									#保存修改

4.2、创建扩展分区

fdisk /dev/sdb创建分区
n		add a new partition													#新建分区
e		print the partition table											#显示分区信息
3		分区号 (3-4,默认 3)#设置分区号
Enter	起始 扇区 (1026048-2097151,默认为 1026048)#起始扇区
		将使用默认值 1026048    
Enter	Last 扇区, +扇区 or +size{
    K,M,G} (1026048-2097151,默认为 2097151):	#分区大小
		分区 3 已设置为 Extended 类型,大小设为 523 MiB
w		write table to disk and exit										#保存修改

4.3、创建逻辑分区

fdisk /dev/sdb																#创建分区
n		add a new partition													#新建分区
l		print the partition table											#显示分区信息
Enter	起始 扇区 (1028096-2097151,默认为 1028096)#起始扇区
		将使用默认值 1028096    
+200M   Last 扇区, +扇区 or +size{
    K,M,G} (1028096-2097151,默认为 2097151)#分区大小
		分区 5 已设置为 Linux 类型,大小设为 200 MiB
w		write table to disk and exit										#保存修改

partprobe /dev/sdb: 手动更新分区表,为新设备创建设备文件

fdisk /dev/sdb: MBR分区,建议硬盘小于2T时使用
gdisk /dev/sdc: GPT分区,建议硬盘大于2T时使用(GPT分区只有主分区)

Disk label type:dos: MBR分区表(只有4个主分区,扩展分区,逻辑分区,例如:3主1扩展n逻辑)
Disk label type:gpt: GPT分区表(128个主分区)

4.4、创建文件系统(格式化)

mkfs.xfs /dev/sdb		#将sdb分区格化式为xfs文件系统
mkfs.ext4 /dev/sdc		#将sdc分区格化式为ext4文件系统

4.5、挂载 mount

临时挂载

mount -t ext4 -o acl /dev/sdb1 /mnt/sdk1	#挂载时指定文件系统类型为etx4,指定acl权限
mount -o noexec /dev/sdb1 /mnt/sdk1			#挂载时指定权限为无执行权限
mount -t xfs -o ro /dev/dsb1 /vm			#挂载时指定权限为只读

-o noexec:不允许二进制文件执行
-o nouser:禁止普通用户mount与umount
-o remount:重新挂载
-o ro:只读
-o rw:允许读写
-o user: 允许普通用户mount与umount
-o acl:访问控制列表
vim /etc/fastab			#通过编辑 /etc/fstab文件挂载

在这里插入图片描述
在这里插入图片描述

建议使用UUID进行挂载,尽量不使用设备名挂载(设备名是有可能会改变的)

blkid /dev/sdb1		#查看分区UUID
mount -a			#读取 /etc/fstab文件,将未挂载的文件进行挂载。相当于添加挂载点之后的重启

umount /dev/sdb1	#将sdb1的挂载点进行卸载(卸载时可以跟设备名也可以跟挂载点)

5、逻辑卷lvm管理

查看命令:

pvs		pvscan		pvdisplay

vgs		vgscan		vgdisplay

lvs		lvscan		lvdiisplay

5.1、创建逻辑卷

pvcreate /dev/sdd					#创建pv
pvs									#查看pv

vgcreate datevg /dev/sdd			#创建vg,指定vg名称
vgs									#查看vg

lvcreate -L 100M -n lv1 datevg		#创建lv1(-L后面跟空间大小100M),指定lv大小、名称
lvcreate -l 25 -n lv2 datevg		#创建lv2(-l后面跟LE数量,未指定的情况下默认1PE=4M),指定lv大小、名称
lvs									#查看lv
```bash
lvdisplay /dev/datevg/lv2			#查看lv2详细信息
  --- Logical volume ---
  LV Path                /dev/datevg/lv2
  LV Name                lv2
  VG Name                datevg
  LV UUID                1dHKZ8-VXEE-TgBs-0Wp0-yZU1-ZgO8-NZB3n1
  LV Write Access        read/write
  LV Creation host, time centos, 2022-10-09 19:51:28 +0800
  LV Status              available
  # open                 0
  LV Size                100.00 MiB	#LV大小
  Current LE             25			#LV占用的LE数量
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
lvremove /dev/datevg/lv2			#删除lv
vgremove datevg						#删除vg
pvremove /dev/sdd					#删除pv

5.2、为lv创建文件系统

mkfs.xfs /dev/datevg/lv1	#为lv1创建xfs文件系统

meta-data=/dev/vmvg/lv1		isize=512    agcount=4, agsize=6400 blks
			=				sectsz=512   attr=2, projid32bit=1
			=				crc=1        finobt=0, sparse=0
data		=				bsize=4096   blocks=25600, imaxpct=25
			=				sunit=0      swidth=0 blks
naming  =version 2			bsize=4096   ascii-ci=0 ftype=1
log			=internal log	bsize=4096   blocks=855, version=2
			=				sectsz=512   sunit=0 blks, lazy-count=1
realtime	=none			extsz=4096   blocks=0, rtextents=0
mkfs.ext4 /dev/datevg/lv2	#为lv2创建ext4文件系统

mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33685504
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks:
    8193, 24577, 40961, 57345, 73729

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

5.3、挂载

mkdir /mnt/lv1		#创建挂载目录
mkdir /mnt/lv2

vim /etc/fstab		#编辑/etc/fstab文件挂载

mount -a			#/读取 /etc/fstab文件,将未挂载的文件进行挂载。相当于添加挂载点之后的重启
df -Th				#查看分区

5.4、vg管理

扩大vg

pvcreate /dev/sde			#创建pv
vgextend datevg /dev/sde	#将新建的pv加入到vg
vgs							#查看vg

减小vg,通常先做数据迁移

pvmove /dev/sdd /dev/sde    #将sdd的数据迁移到sde        
pvs							#查看pv
vgreduce datevg /dev/sdd	#将datevg下的sdd移除                           
pvs							#查看pv

lv扩容

lvscan								#查看lv
lvextend -L 800M /dev/datevg/lv1	#扩容到800M
lvscan								#查看lv
lvextend -L +100M /dev/datevg/lv2	#扩容100M(再加100M)
lvscan								#查看lv

vim /etc/fstab						#编辑/etc/fstab文件挂载
mount -a							#/读取 /etc/fstab文件,将未挂载的文件进行挂载。相当于添加挂载点之后的重启
xfs_growfs /dev/datevg/lv1			#将xfs类型的文件系统添加到逻辑卷
resize2fs /dev/datevg/lv2			#将ext4类型的文件系统添加到逻辑卷
df -Th

lv快照

lvcreate -L 5M -n lv2-snap -s /dev/datevg/lv2				#在/dev/datevg/lv2创建一个5M名叫lv2-snap的快照

lvscan														#查看lv

ACTIVE            '/dev/centos/root' [15.00 GiB] inherit
ACTIVE            '/dev/centos/swap' [<3.00 GiB] inherit
ACTIVE            '/dev/datevg/lv1' [800.00 MiB] inherit
ACTIVE   Original '/dev/datevg/lv2' [200.00 MiB] inherit	#原始卷
ACTIVE   Snapshot '/dev/datevg/lv2-snap' [8.00 MiB] inherit	#快照卷

mkdir /mnt/lv2-snap											#新建快照目录                                          
mount -o ro /dev/datevg/lv2-snap /mnt/lv2-snap				#临时进行挂载(ext4文件系统)

mount -o nouuid,ro /dev/datevg/lv2-snap /mnt/lv2-snap		#临时进行挂载(xfs文件系统,原因是xfs文件系统在挂载时不支持uuid)

6、交换分区swap管理

交换分区可以是基本分区、LVM、文件

free -m			#查看交换分区
swapon -s		#查看交换分区

6.1、使用分区作为交换分区

lsblk				#查看分区                                                              
fdisk /dev/sdd		#创建分区                                               
partprobe /dev/sdd	#手动更新分区表                                      
ll /dev/sdd*		#查看新的分区                                                   
brw-rw----. 1 root disk 8, 48 10月 10 14:40 /dev/sdd
brw-rw----. 1 root disk 8, 49 10月 10 14:40 /dev/sdd1

mkswap /dev/sdd1	#新的分区格式化                                 
blkid /dev//sdd1	#查看分区的UUID                                          
vim /etc/fstab		#挂载
/dev/mapper/centos-swap		swap	swap	defaults	0 0		#此处swap不能变更                                             
swapon -a			#激活所有的交换分区                                              
swapon -s			#查看交换分区
                                              
swapoff /dev/sdd1	#关闭交换分区   

6.2、使用逻辑卷作为交换分区

vgs										#查看vg
lvcreate -L 200M -n lv-swap datevg		#创建逻辑卷
mkswap /dev/datevg/lv-swap				#格式化逻辑卷
vim /etc/fstab 							#挂载
swapon -a								#激活
swapon -s								#查看

6.3、使用文件作为交换分区

df -Th											#查看磁盘空间情况
dd if=/dev/zero of=/swap.img bs=1M count=512	#创建swap文件
ll /swap.img -h									#查看swap文件
mkswap /swap.img								#将文件格式化
vim /etc/fstab									#挂载(建议使用“/swap.img挂载”
swapon -a										#激活交换分区(提示权限危险)
chmod 0600 /swap.img							#修改swap权限
swapon -a										#激活交换分区

7、链接管理 ln

7.1、软链接

软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
软链接可以 跨文件系统 ,硬链接不可以
软链接可以对一个不存在的文件名进行链接
软链接可以对目录进行链接

ln -s log2013.log link2013		#为log2013.log文件创建软链接link2013(如果log2013.log丢失link2013将失效)

7.2、硬链接

硬链接,以文件副本的形式存在。但不占用实际空间。
不允许给目录创建硬链接
硬链接只有在同一个文件系统(分区)中才能创建

ln log2013.log ln2013			#为log2013.log创建硬链接ln2013(log2013.log与ln2013的各项属性相同)

8、软件包管理

uname -m					#查看系统平台
x86_64

cat /etc/redhat-release		#查看系统版本
CentOS Linux release 7.9.2009 (Core)

yum repolist				#列出当前可用的源
源标识					源名称					状态
base/7/x86_64			CentOS-7 - Base			10,072
extras/7/x86_64			CentOS-7 - Extras		515
updates/7/x86_64        CentOS-7 - Updates		4,300
repolist: 14,887

常用命令

yum check-update			#列出所有可更新的软件清单
yum update					#更新所有软件
yum install <package_name>	#仅安装指定的软件
yum update <package_name>	#仅更新指定的软件
yum list					#列出所有可安裝的软件清单

删除软件包:

yum remove <package_name>	#仅卸载软件包本身,没有卸载依赖包

yum history					#查看安装历史动作(动作编号)
yum history info 9			#查看第9个动作是什么
yum history undo 9			#把第9个动作撤销掉(相当于删除软件包及其依赖包)

查找软件包:

yum list <package_name>		#从本地rpm数据库和yum源中查询
yum list installed			#从rpm数据库查看已装过的软件包 
yum info <package_name>		#查看软件包的详细信息

清除软件包缓存:

yum clean packages			#清除缓存目录下的软件包
yum clean headers			#清除缓存目录下的 headers
yum clean oldheaders		#清除缓存目录下旧的 headers

yum clean all				#清除缓存目录下的软件包及旧的 headers
or
yum clean packages; yum clean oldheaders
yum update --downloadonly	#下载update软件包但不安装

安装update软件并保留软件包
vim /etc/yum.conf			#编辑/etc/yum.conf文件
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1					#将此处的0更改为1
debuglevel=2

yum clean all				#清除缓存
yum -y install update		#安装update软件

9、调度任务管理 at、cron

9.1、一次性调度任务执行 at

yum -y install at		#安装at软件
systemctl start atd		#启动atd
systemctl enable atd	#设置开机自动启动atd
touch at.job			#创建任务文件
vim at.job				#编辑任务文件
at now +1min < at.job	#使用at调度任务执行(使用重定向进入任务输入)

9.2、周期性调度任务 cron

crond进程每分钟会处理一次计划任务,如果执行任务的时间错过了将不再执行
启动crond:systemctl status crond.service

9.2.1、用户级计划任务

计划任务存放的位置:/var/spool/cron/

列出当前用户的计划任务:crontab -l the jobs for the current user
删除当前用户的计划任务:crontab -r Remove all jobs for the current users
编辑当前用户的计划任务:crontab -e Edit jobs for the current user

拒绝username01、username02两个用户使用计划任务:

vim /etc/cron.deny
username01
username02

基本格式:

*     *   *   *   *   command
分   时  日  月  周   命令

第1列表示分钟0~59  每分钟用*或者 */1表示
第2列表示小时0~23
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
9.2.2、系统级计划任务

定义位置一: /etc/crontab
定义位置二: /etc/cron.d/

基本格式:

*     *    *    *   *     user-name  command to be executed
分   时  日  月  周   命令

第1列表示分钟0~59  每分钟用*或者 */1表示
第2列表示小时0~23
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的用户及命令
cat /etc/cron.d/0hourly		#查看计划任务文件
# Run the hourly jobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
01 * * * * root run-parts /etc/cron.hourly

run-parts表示后面跟的是一个文件夹,计划任务会执行文件夹里面所有的计划任务

/etc/cron.hourly/0anacron
anacron进程由cron进程每分钟唤醒一次,防止某些计划任务被错过执行

/etc/crontab 是cron 的配置文件
/etc/anacrontab 是anacrontab 的配置文件

cat /etc/anacrontab
#period in days   delay in minutes   job-identifier       command
		1				5            cron.daily           nice run-parts /etc/cron.daily
		7				25           cron.weekly       	  nice run-parts /etc/cron.weekly
	@monthly			45           cron.monthly         nice run-parts /etc/cron.monthly

period in days		#执行周期、频率,天
delay in minutes	#延迟,分钟
job-identifier		#任务标识
command				#命令
系统执行anacron任务的记录

cat /var/spool/anacron/cron.daily
20221015
cat /var/spool/anacron/cron.weekly
20221010
cat /var/spool/anacron/cron.monthly
20221010
tail /var/log/cron	#cron执行日志

10、日志管理

rsyslogd–主要是采集记录系统相关的日志

常见的日志文件(系统、进程、应用程序)

/var/log/messages		#系统主日志文件
/var/log/secure			#认证、安全
/var/log/maillog		#邮件
/var/log/cron			#crond、at进程产生的日志
/var/log/dmesg			#和系统启动相关
/var/log/audit			#系统审计日志
/var/log/yum.log		#yum安装日志
w			#当前登录到该系统的用户
last		#查看最近登录的用户
lastlog		#所有用户的登录日志
rpm -qc rsyslog
/etc/logrotate.d/syslog			#和日志轮转(切割)相关
/etc/rsyslog.conf				#syslogd的主配置文件
less /etc/sysconfig/rsyslog		#syslogd相关文件
/etc/logrotate.conf				#轮转主配置文件
tree /etc/logrotate.d			#轮转文件
/etc/logrotate.d
├── bootlog
├── chrony
├── firewalld
├── httpd
├── syslog
├── vsftpd
├── wpa_supplicant
└── yum

11、修复文件系统 fsck

dump2fs /dev/sda1		#查看ext3/4文件系统
fsck.ext4 /dev/sda1		#修复ext3/4文件系统
xfs_info /dev/sda1		#查看xfs文件系统
xfs_repair				#修复xfs文件系统

修复损坏的文件系统(ext3、ext4)

fsck命令最简单的用例是修复无根损坏的ext3或ext4文件系统。

umout /dev/sdc1			#卸载设备
fsck -p /dev/sdc1		#修复文件系统<-p选项使fsck自动修复可以安全修复的任何问题而无需用户干预>
mount /dev/sdc1			#修复文件后安装分区

修复根文件系统(Root File System)

fsck无法检查正在运行的计算机上的根文件系统,因为无法将其卸载。
如果要检查或修复根文件系统,可以将fsck设置为在引导时运行,以恢复模式引导系统或使用实时CD。

在恢复模式下运行fsck

1、进入启动菜单,然后选择高级选项
2、选择恢复模式,然后选择“fsck”。
3、当提示你重新挂载根文件系统时,请选择是(Yes)。
4、完成后,恢复正常启动。

从实时发行版运行fsck

1、启动实时分发。
2、使用fdisk或parted查找根分区名称。
3、打开终端并运行:fsck -p /dev/sda1
4、完成后,重新启动实时分发并启动系统。

12、恢复文件 lsof

lsof |grep messages		#查看messages文件状态
rsyslogd  1104         root    7w      REG              253,0    487580   17276538 /var/log/messages
in:imjour 1104 1324    root    7w      REG              253,0    487580   17276538 /var/log/messages
rs:main   1104 1325    root    7w      REG              253,0    487580   17276538 /var/log/messages

cp -rf /var/log/messages /var/log/messages.bak		#备份文件
rm -rf /var/log/messages							#删除文件

lsof |grep messages		#查看messages文件状态
rsyslogd  1104         root    7w      REG		253,0    513266   17276538 /var/log/messages (deleted)
in:imjour 1104 1324    root    7w      REG		253,0    513266   17276538 /var/log/messages (deleted)
rs:main   1104 1325    root    7w      REG		253,0    513266   17276538 /var/log/messages (deleted)

ll /proc/1104/fd		#查看相应进程的文件描述符,此处是7
总用量 0
lr-x------. 1 root root 64 10月 10 17:23 0 -> /dev/null
l-wx------. 1 root root 64 10月 10 17:23 1 -> /dev/null
l-wx------. 1 root root 64 10月 10 17:23 2 -> /dev/null
lr-x------. 1 root root 64 10月 10 17:23 3 -> anon_inode:inotify
lrwx------. 1 root root 64 10月 10 17:23 4 -> socket:[22696]
lr-x------. 1 root root 64 10月 10 17:23 5 -> /run/log/journal/3fbcd53b9ed04e82bc80b58a10beb21e/system.journal
l-wx------. 1 root root 64 10月 10 17:23 6 -> /var/log/maillog
l-wx------. 1 root root 64 10月 10 17:23 7 -> /var/log/messages (deleted)
l-wx------. 1 root root 64 10月 10 17:23 8 -> /var/log/cron
l-wx------. 1 root root 64 10月 10 17:23 9 -> /var/log/secure

less /proc/1104/fd/7	#通过文件描述符查看文件的内容

cp /proc/1104/fd/7 /var/log/messages		#通过文件描述符恢复删除的文件
或者
less /proc/1104/fd/7 > /var/log/messages	#通过文件描述符恢复删除的文件
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/linuxcsdn_zero/article/details/127630748

智能推荐

《编写有效用例》阅读笔记01-程序员宅基地

文章浏览阅读69次。《编写有效用例》是美国AlistairCockburn的著作全书分为三部分:1.用例体部分2.在需求分析过程中经常遇到的问题3.对忙于编写用例的人的提示今天我主要阅读了第一部分。在作者的引导下思考了以下问题:1. 什么是用例?例用于表示系统所提供的服务,它定义了系统是如何被参与者所使用的,它描述的是参与者为了使用系统所提供的某一完整功能而与系统之间发生..._alistair cockburn。编写有效用例

利用时间序列ARMA模型和LSTM算法分析并预测pm2.5值_adf、pvalue、usedlag、nobs、critical values、icbest、reg-程序员宅基地

文章浏览阅读1.3w次,点赞8次,收藏92次。数据来源于 UC Irvine Machine Learning Repository网站中的Beijing PM2.5 Data Data Set,数据文件类型为CSV。一、利用ARMA模型数据平稳性分析还是以天为单位分析这五年之内的pm2.5值,并绘制曲线ARIMA 模型对时间序列的要求是平稳型,观察图标能看出其没有固定的上升或下降的趋势,粗略判断是平稳序列。不进行差分操作..._adf、pvalue、usedlag、nobs、critical values、icbest、regresults、resstore

ubuntu安装xsser及使用_xsser下载-程序员宅基地

文章浏览阅读1.8k次。XSSer:自动化XSS漏洞检测及利用工具参考https://xsser.03c8.net/下载访问网址,进行下载https://github.com/epsylon/xsser解压到指定位置配置安装依赖,执行sudo apt-get install python-pycurl python-xmlbuilder python-beautifulsoup python-geo..._xsser下载

给Windows安装Apache 24和php 7_apache24和php8 windows-程序员宅基地

文章浏览阅读559次。原文链接https://danielarancibia.wordpress.com/2015/09/27/installing-apache-2-4-and-php-7-for-development-on-windows/Installing Apache 2.4 and PHP 7 for Development on WindowsPosted on septiembre 27, 2015 ..._apache24和php8 windows

最新AI系统ChatGPT源码+AI绘画系统源码+支持GPT4.0+Midjourney绘画+搭建部署教程+附源码_最新ai 代码-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏3次。支持用户自定义Prompt应用。SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型+国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!SparkAi程序使用Nestjs和Vue3框架技术,持续集成AI能力到AIGC系统。已支持OpenAI GPT全模型+国内AI全_最新ai 代码

codevs 1074 食物链(并查集)_(1) 这句话与前边说过的真话相冲突; (2) a或b比n大;-程序员宅基地

文章浏览阅读334次。题目描述 Description 动物王国中有三种动物 A,B,C,这三类动物的食物链构成了有趣的环形。A吃B,B吃C,C吃A。   现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。   有人用两种说法对这N个动物所构成的食物链关系进行描述:   第一种说法是“1 X Y”,表示X和Y是同类。   第二种说法是“2 X Y”,表示X吃Y。   此人对N个_(1) 这句话与前边说过的真话相冲突; (2) a或b比n大;

随便推点

Win-MASM64汇编语言-CMP/CMPSB/CMPSW/CMPSD/JNE/JCXZ-程序员宅基地

文章浏览阅读2.2k次。怀念二抱三抱_cmpsd

5. 测试fabric-sdk-node应用_kevin-fabric-sdk-node-程序员宅基地

文章浏览阅读893次,点赞3次,收藏7次。从零到壹构建基于fabric-sdk-node的项目开发实战之五运行示例程序一切就绪,现在可以开始测试我们的应用程序了。终端窗口 1进入项目根目录:$ cd $HOME/kevin-fabric-sdk-node使用 docker-compose 命令启动网络$ docker-compose -f artifacts/docker-compose.yaml up终端..._kevin-fabric-sdk-node

画面卡顿不流畅_刺激战场:游戏画面设置的重要性,图一都是菜鸟,图四才是大神!...-程序员宅基地

文章浏览阅读252次。若说游戏中什么才是吃鸡的保障,很多人肯定会说好的手机,配上好的技术和武器才是吃鸡的保障,这话并没有错,但是有一个大家容易忽略了一个地方,那就是游戏画面的设置,它也是能让你吃鸡变得更加容易保障,那么我们就来看看游戏画面设置的重要性,如何让你更加容易流畅的玩游戏。如上图如果觉得自己的手机很牛逼非常高级,去把画面品质选择最高,那么你确实可以看到比较好的画质,草丛模型等都会看起来比较精致,但是实...

BOOTSTRAP:btn按钮中的data-toggle属性失效问题_button 没有data-toggle-程序员宅基地

文章浏览阅读4k次。BOOTSTRAP:btn按钮中的data-toggle属性失效问题BOOTSTRAP:btn按钮中的data-toggle属性失效问题bootstrap中用下拉选组件的时候遇到了点问题一开始这样写,发现失效,找了半天,实际上就是引入的js文件顺序问题。如果说有些组件不使用,其他一些bootstrap功能是可以正常使用的,但是F12会发现报错,后来将jquery库放在最前边就可以了其实..._button 没有data-toggle

conan 入门(三十七):conan 2.x通过定义环境变量(environment)执行make编译只有Makefile的项目(erpcgen)_conanbase.py-程序员宅基地

文章浏览阅读980次,点赞17次,收藏20次。之前一篇博客介绍如何用实现来编译只有Makefile的项目,因为Autotools.make,Autotools.install方法就是执行make来编译项目。我原本是想用self.run来执行make进行编译的,因为去年编译erpcgen时,我就是用self.run来执行的(参见),那时conan 版本还是1.x,现在conan版本升级到2.x,不再兼容,原来的方式不能使用了,我一直没有搞明白如何合在conan 2.x下创建正确的环境变量,导致一直编译不成功。所以才摸索出用。_conanbase.py

对于JVM内存配置参数_jvm内存配置参数 最小内存值-程序员宅基地

文章浏览阅读2.3k次。对于JVM内存配置参数:-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3,其最小内存值和Survivor区总大小分别是(D)A、5120m,1024mB、5120m,2048mC、10240m,1024mD、10240m,2048mXmx:最大堆大小10240mXms:初始堆大小10240mXmn:年轻代..._jvm内存配置参数 最小内存值

推荐文章

热门文章

相关标签