help cd #查看cd命令的帮助信息
vim --help #查看vim命令的帮助信息<--help仅支持查看linux外部命令>
内建命令:是shell程序的一部分,在linux系统加载运行时shell就被加载并驻留在系统内存中
外部命令:是linux系统中的实用程序部分,并不随系统一起被加载到内存中,而是在需要时才将其调用内存
查看方法:type command
man stat #查看stat命令帮助手册
info reboot #查看reboot命令的详细信息
shutdown -r 10 #10分钟后重启
shutdown -r now #立即重启
init 1 #立即重启
reboot #立即重启
shutdown -h 10 #10分钟后关机
shutdown -h 12:00 #12点关机<如果时间大于12:00则第二日相同时间关机>
shutdown -h now #立即关机
poweroff #立即关机
init 0 #立即关机
halt #立即关机<不理会目前系统状况下,进行硬件关机,不建议使用>
命令:cd
cd ~ #切换到当前登录用户家目录
cd ~username #切换到username用户家目录
cd - #切换到上次访问目录
cd / #切换到根目录
cd .. #切换到上一级目录
cd /home #切换到根下的home目录
ESC+. 表示引用上一个命令的最后一个参数(等价于!$)
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 #或查看文件的详细信息
用法:mkdir [选项]… 目录…
mkdir dir #在当前目录下创建dir目录
mkdir /home/dir1 #在/home目录下创建dir1目录
mkdir -p dir/dir2/dir3 #在当前目录下递归创建dir2、dir3目录
mkdir -m 761 /home/dir4 #创建dir5是指定目录权限为rwxrw---x
mkdir -v dir{1..10} #一次创建dir1-dir10十个目录并显示创建过程
用法: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]格式修改文件时间戳
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 #强制删除目录下所有内容不提示并显示删除过程
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/ #将目录拷贝到远程主机并改变目录名
用法: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 #从键盘创建一个新文件,不能编辑已有文件
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数<字节数>
用法: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 是比较特殊的命令,它有两个参数:
第一个参数用来指定搜索路径;
第二个参数用来指定搜索内容。
选项:
-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 号是一致的
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天前修改过状态的文件
选项:
-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的文件
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,才会执行
vim支持同时编辑两个文件,ctrl+ww进行切换,q退出、qall全部退出
vim -O /etc/hosts /etc/hostname
vimdiff将两个相似文件不同的地方特别标识出来(用于两个相同的文件进行对比改错)
vimdiff /etc/host /etc/host1
命令模式里面使用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--多字符替换)
进入到编辑模式
a #从光标后插入
i #从光标前插入
o #从光标所在行另起一行插入
A #从光标所在行尾插入
保存退出
: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
#在文件最后添加即可
v #进入可视模式
^v #进入可视块模式
V #进入可是行模式
r #单字符替换
R #进入替换模式,可多字符替换
块插入 #选择块,I (大写的i),在块前插入字符,ESC
块替换 #选择块,r,输入替换字符
块删除 #选择块,d、x
块复制 #选择块,Y
用户获取文件权限的顺序: 先看是否为所有者,如果是,则后面权限不看;再看是否为所属组,如果是,则后面权限不看。
针对目录加执行权限,文件不加执行权限(因文件具备执行权限有安全隐患)
root账户不受文件权限的读写限制,执行权限受限制
ll file #查看文件权限<包含文件类型、属主、属组、对应权限、修改时间等>
ll dir #查看目录下面的文件权限
ll-d dir #查看目录本身的权限
用法: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
更改文件/目录的属主/属组相当于将文件的所有权转移给新的属主/属组
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 /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
作用:给一个用户继承二进制程序属主拥有的权限
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/
lsattr 命令,专门用来查看文件或目录的隐藏属性
chattr 命令,专门用来修改文件或目录的隐藏属性,只有 root 用户可以使用。添加隐藏属性之后即使是root也无法进行删除、修改操作.
基本格式:
chattr [±=][属性] 文件或目录名
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/ #删除目录隐藏属性
新建文件、目录的默认权限会受到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中执行
打包:目的就是为了管理方便
压缩:目的就是为了节省空间
用法: 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机器上执行
用法: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 登陆系统实现管理
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 :组成员
用法: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来配置。
用法:usermod [选项] 用户名
usermod -d /home/hnlinux xx #修改用户家目录
usermod -u 777 cc #修改用户UID
用法:userdel [选项] 用户名
userdel hnlinux #删除用户账户
userdel -r hnlinux #删除用户时同时删除用户家目录、邮件、spool
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就可以了
用法:groupadd [选项] 组
groupadd runoob #创建一个新组
groupadd -g 333 runoob #创建新组并指定GID
/etc/group #组信息
wheel :x :10 :centos
组名 :密码占位符 :GID :组成员
用法:groupdel [选项] 组
groupdel linuxcool #使用groupdel命令删除linuxcool工作组
cat /etc/group | grep linuxcool #查看linuxcool组是否删除成功
用法:gpasswd [选项] 组
gpasswd -a user group #将user添加到group组当中
gpasswd -d user group #将user从group组删除
gpasswd -a user wheel #将user添加到wheel(类似于管理员组),加sudo即可以管理员身份执行命令
用法: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 #重启生效
用法:ip [选项] 常用对象 { 命令 | 帮助 }
常用对象: { link | address | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | netns | | 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地址,其余不显示
用法: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
^C #终止前台运行的程序
^ #退出、等价于exit
^L #清屏
^A #光标移动到命令行的最前端
^E #光标移动到命令行的最后端
^U #删除光标前所有字符
^K #删除光标后所有字符
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/'
第一种方式:在/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次
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
相对优先级 sched_other
nice值越高:表示优先级越低,例如+19,该进程容易将CPU使用量让给其他进程
nice值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPUNI:实际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值
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 进程号恢复进程
标准输入:文件描述符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
>覆盖 >>追加
正确输出: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、重启系统自动创建
标准输入:< 等价于 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分钟
将/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 表示追加)
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
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 #保存修改
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 #保存修改
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个主分区)
mkfs.xfs /dev/sdb #将sdb分区格化式为xfs文件系统
mkfs.ext4 /dev/sdc #将sdc分区格化式为ext4文件系统
临时挂载
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的挂载点进行卸载(卸载时可以跟设备名也可以跟挂载点)
查看命令:
pvs pvscan pvdisplay
vgs vgscan vgdisplay
lvs lvscan lvdiisplay
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
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: 完成
mkdir /mnt/lv1 #创建挂载目录
mkdir /mnt/lv2
vim /etc/fstab #编辑/etc/fstab文件挂载
mount -a #/读取 /etc/fstab文件,将未挂载的文件进行挂载。相当于添加挂载点之后的重启
df -Th #查看分区
扩大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)
交换分区可以是基本分区、LVM、文件
free -m #查看交换分区
swapon -s #查看交换分区
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 #关闭交换分区
vgs #查看vg
lvcreate -L 200M -n lv-swap datevg #创建逻辑卷
mkswap /dev/datevg/lv-swap #格式化逻辑卷
vim /etc/fstab #挂载
swapon -a #激活
swapon -s #查看
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 #激活交换分区
软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
软链接可以 跨文件系统 ,硬链接不可以
软链接可以对一个不存在的文件名进行链接
软链接可以对目录进行链接
ln -s log2013.log link2013 #为log2013.log文件创建软链接link2013(如果log2013.log丢失link2013将失效)
硬链接,以文件副本的形式存在。但不占用实际空间。
不允许给目录创建硬链接
硬链接只有在同一个文件系统(分区)中才能创建
ln log2013.log ln2013 #为log2013.log创建硬链接ln2013(log2013.log与ln2013的各项属性相同)
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软件
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调度任务执行(使用重定向进入任务输入)
crond进程每分钟会处理一次计划任务,如果执行任务的时间错过了将不再执行
启动crond:systemctl status crond.service
计划任务存放的位置:/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列要运行的命令
定义位置一: /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执行日志
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
dump2fs /dev/sda1 #查看ext3/4文件系统
fsck.ext4 /dev/sda1 #修复ext3/4文件系统
xfs_info /dev/sda1 #查看xfs文件系统
xfs_repair #修复xfs文件系统
fsck命令最简单的用例是修复无根损坏的ext3或ext4文件系统。
umout /dev/sdc1 #卸载设备
fsck -p /dev/sdc1 #修复文件系统<-p选项使fsck自动修复可以安全修复的任何问题而无需用户干预>
mount /dev/sdc1 #修复文件后安装分区
fsck无法检查正在运行的计算机上的根文件系统,因为无法将其卸载。
如果要检查或修复根文件系统,可以将fsck设置为在引导时运行,以恢复模式引导系统或使用实时CD。
1、进入启动菜单,然后选择高级选项
2、选择恢复模式,然后选择“fsck”。
3、当提示你重新挂载根文件系统时,请选择是(Yes)。
4、完成后,恢复正常启动。
1、启动实时分发。
2、使用fdisk或parted查找根分区名称。
3、打开终端并运行:fsck -p /dev/sda1
4、完成后,重新启动实时分发并启动系统。
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 #通过文件描述符恢复删除的文件