1.chattr 改变文件属性
语法:
chattr [-RV] [+/-/=<属性>][文件或目录]
属性:
a:让文件或目录仅供附加用途
i:不得任意更改文件或目录
s:保密性删除文件或目录
参数:
-R:递归处理制定目录下的所有文件以及子目录
-V:显示指令执行过程
+<属性>:开启文件或目录的该属性项
-<属性>:关闭文件或目录的该属性项
实例:
1.chattr +i /etcresolv.conf ##使用chattr命令防止系统中某个文件被修改
2.chattr +a /var/log/messages ##让某个文件只能往里面追加数据,但是不能删除,适用于各种日志文件
2.chgrp 变更文件或目录的所属群组
语法:
chgrp [参数][所属群组][文件或目录]
参数:
-v:显示指令执行过程
--reference=<参考文件或目录>
实例:
1.chgrp -v bin log2021.log #改变文件log2021.log的群组属性
过程:
[root@localhost test]# ll
---xrw-r-- 1 root root 302108 11-13 06:03 log2012.log
[root@localhost test]# chgrp -v bin log2012.log
[root@localhost test]# ll
---xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log
2.chgrp --reference=log2012.log log2013.log ##根据执行文件log2012.log的属组更改其他文件log2013.log的群组属性
过程:
[root@localhost test]# ll
---xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root root 61 11-13 06:03 log2013.log
[root@localhost test]# chgrp --reference=log2012.log log2013.log
[root@localhost test]# ll
---xrw-r-- 1 root bin 302108 11-13 06:03 log2012.log
-rw-r--r-- 1 root bin 61 11-13 06:03 log2013.log
3.chown 设置文件所有者和文件关联组,需要使用root用户才能执行
语法:
chown [参数] user[:group] file ...
参数:
user:新的文件拥有者的使用ID
group:新的文件拥有者的使用者组
-R:处理制定目录以及其子目录下的所有文件
实例:
1.chown root /var/run/httpd.pid 将/var/run/httpd.pid的所有者设置root
2.chown runoob:runoobgroup file1.txt 将file1.txt文件的拥有者设置为runoob,群体的使用者runoobgroup
3.chown -R runoob:runoobgroup * 将当前目录下的所有文件与子目录的拥有者都设置为runoob,群体的使用者runoobgroup
4.chmod 修改用户对文件的权限
语法:
chmod [参数] mode 文件
mode:
u:文件拥有者 g:与该文件的拥有者属于同一个组的 o:代表其他意外的人 a:这三者都是
+:代表增加权限 -:代表取消权限 =:表示唯一设定权限
r:表示可读 w:表示可写 x:表示可执行
参数:
-R:对目前目录下的所有文件与子目录进行相同的权限变更
实例:
find path/ -type d -exec chmod a+x {} \; ##允许所有用户浏览或通过目录path/
5.cut 显示每行从头开始算起num1到num2的文字
参数:
-d:设置间隔符号
-f:设置需要查看的列数
实例:
[root@localhost]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/nash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost]# cut -d: f1 /etc/passwd 使用冒号 : 进行分割,只打印出第一列的数据
root
bin
6.ln 为某一个文件在另一个位置创建一个同步链接
语法:ln [参数] [源文件目录][目标文件或目录]
软链接和硬链接:
硬链接的意思是一个档案可以有多个名称,而软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。
硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。
不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
软链接:(常用)
1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式
2.软链接可以 跨文件系统 ,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接
5.软链接的源文件必须是绝对路径,否则会报错
硬链接:
1.硬链接,以文件副本的形式存在。删除一个不会对另一个产生影响,但是修改某一个,其他的数据也会被改变
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建,因为在不同的系统中,inode是重新计算的
参数:
-f:强制执行
-i:交互模式,文件存在提示用户是否覆盖
-s:软连接
-v:显示详细处理过程
实例:
1.ln -s log2013.log link2013 给文件log2013.log文件创建软链接link2013,如果log2013.log 丢失,则link2013失效
[root@localhost test]# ll
-rw-r--r-- 1 root bin 61 11-13 06:03 log2013.log
[root@localhost test]# ln -s log2013.log link2013
[root@localhost test]# ll
lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 1 root bin 61 11-13 06:03 log2013.log
2. ln log2013.log ln2013 给文件创建硬链接,为log2013.log创建硬链接ln2013,log2013.log与ln2013的各项属性相同
[root@localhost test]# ll
lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 1 root bin 61 11-13 06:03 log2013.log
[root@localhost test]# ln log2013.log ln2013
[root@localhost test]# ll
lrwxrwxrwx 1 root root 11 12-07 16:01 link2013 -> log2013.log
-rw-r--r-- 2 root bin 61 11-13 06:03 ln2013
-rw-r--r-- 2 root bin 61 11-13 06:03 log2013.log
7.find
语法:find [路径] [匹配条件][动作]
参数:
-name:按名字查找
-type:按类型查找 可以是f(普通文件) d(目录)
-size [+-] size [cwbkMG]:按文件大小查找,支持使用+或-表示大于或小于指定大小,单位可以是c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或G(GB)
-mtime days:按修改时间查找,支持使用+和-指定天数前后
动作:
-amin n:查找在n分钟内被访问过的文件
-atime n:查找在n*24小时内被访问过的文件
-cmin n:查找在n分钟内状态发生变化的文件(例如权限)
-ctime n:查找在n*24小时内状态发生变化的文件
-mmin n:查找在n分钟内被修改过的文件
-mtime n:查找在n*24小时内被修改过的文件
在这些参数中,n可以是正数,负数或0。正数表示在指定的时间内修改或访问过的文件,负数表示在指定时间前修改或访问的文件,0表示在当前时间点上修改或访问的文件
实例:
1.查找当前目录以及子目录中文件名后缀为.txt的文件
find -type f -name "*.txt"
2.查找/var/log中在7天前修改过的,大于1MB的文件
find /var/log -mtime +7 -size +1M
3.查找/var/log目录中更改时间在7天之前的普通文件,并且删除之前询问他们
find /var/log -type f -mtime +7 -ok rm {} \;
8.cat
参数:
-n:显示行号
-s:压缩连续的空行,只显示一个空行
9.less 相比more命令提供了更多的功能,如搜索、滚动方向等,使得它成为处理大文件的更优选择。less命令还支持直接跳转到文件的任何位置,而不需要从头开始浏览。
语法:
less [参数] 文件
参数:
-i:忽略搜索时的大小写
-o<文件名>:将less输出的内容在指定文件中保存起来
b:向上翻一页
d:向后翻半页
Q:退出less命令
u:向前滚动半页
y:向前滚动一行
空格:滚动一页
回车:滚动一行
[pagedown]:向下翻一页
[pageup]:向上翻一页
g:跳转到文件开头
G:跳转到文件末尾
nG:跳转到指定行号
向前搜索:按/键后输入要搜索的字符串,按回车进行搜索。
向后搜索:按?键后输入要搜索的字符串,按回车进行搜索。
重复搜索:按n键查找下一个匹配项,按N键查找上一个匹配项
10.more 类似于cat,但是可以一页一页显示
语法:
more [参数] [-num] [+/pattern] [+linenum] [filename]
参数:
-num:一次显示的行数
+/pattern:在每个文档显示前搜索改字符串(pattern),然后从该字符串之后开始显示
+linenum:从第linenum行开始显示
实例:
从第20行开始显示文档testfile内容
more +20 testfile
常用操作:
Enter 向下n行,默认1行
空格 向下滚动一屏
Ctrl+B 返回上一屏
V:调用vi编辑器
q:退出more
11.tail 查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件
参数:
-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容,不使用-n时,默认10行
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
实例:
显示文件 notes.log 的内容,从第 20 行至文件末尾:
tail -n +20 notes.log
显示文件 notes.log 的最后 10 个字符:
tail -c 10 notes.log
12.head 查看文件的开头部分的内容,有一个常用的参数 -n 用于显示行数,默认为 10,即显示 10 行的内容
参数:
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数。
实例:
显示 notes.log 文件的开头 5 行,请输入以下命令:
head -n 5 runoob_notes.log
显示文件前 20 个字节:
head -c 20 runoob_notes.log
13.mv 更改文件或目录的名称,或将文件或目录移入其他位置
语法:
mv [options] source dest
mv [options] source directroy
参数:
-b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。
-i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。
-f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。
-n: 不要覆盖任何已存在的文件或目录。
-u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。
命令格式 | 运行结果 |
---|---|
mv source_file(文件) dest_file(文件) | 将源文件名 source_file 改为目标文件名 dest_file |
mv source_file(文件) dest_directory(目录) | 将文件 source_file 移动到目标目录 dest_directory 中 |
mv source_directory(目录) dest_directory(目录) | 目录名 dest_directory 已存在,将 source_directory 移动到目录名 dest_directory 中;目录名 dest_directory 不存在则 source_directory 改名为目录名 dest_directory |
14.rm 删除一个文件或目录
语法:
rm [参数] 文件
参数:
-i:删除前逐一询问
-f:直接删除,不询问
-r:将目录以下的文档逐一删除
15.split 将一个文件分割成数个
语法:
split [-行数] [-b 字节][-l 行数] [-C 字节][要切割的文件][输出文件名]
参数:
-<行数>:指定每多少行切成一个小文件
-b<字节>:指定没多少字节切成一个小文件
-C<字节>:与-b相似,但是在切割时尽量维持每行的完整性
实例:
split -6 test.txt 将test.txt文件每6行分割成一个文件,执行完成后,split会将大文件test.txt分割成众多小文件,每个文件只有6行内容。
16.touch 修改文件或目录的时间属性,包括存取时间和更改时间,如果文件不存在,则创建文件。
语法:
touch [参数] [-d 日期时间] [-r 参考文件或目录] [-t 日期时间] [文件或目录]
参数:
a:改变文档的读取时间
m:改变文档的修改时间
c:假如目的档案不存在,不会建立新的档案
d:设定时间和日期,可以使用不同格式
--no=create:不会创建新档案
实例:
使用touch修改文件时间为当前系统时间
$ ls -l testfile #查看文件的时间属性
#原来文件的修改时间为16:09
-rw-r--r-- 1 hdd hdd 55 2011-08-22 16:09 testfile
在执行完touch后:
$ touch testfile #修改文件时间属性为当前系统时间
$ ls -l testfile #查看文件的时间属性
#修改后文件的时间属性为当前系统时间
-rw-r--r-- 1 hdd hdd 55 2011-08-22 19:53 testfile
17.which 查找文件
实例:
$ which bash 使用which查找bash的绝对路径
18.whereis 查找文件
参数:
-b 查找二进制文件
-B<目录>:只在设置的目录下查找二进制文件
-f:不显示文件名前的路径名称
-m:只查找说明文件
-M<目录> 只在设置的目录下查找说明文件
-s:只查找原始代码文件
实例:
1.使用whereis查看bash的位置
whereis bash
输出:
bash:/bin/bash/etc/bash.bashrc/usr/share/man/man1/bash.1.gz
含义(从左到右):查询的程序名,bash路径,bash的man手册路径
2.查询二进制文件或帮助文件
$ whereis -b bash
bash: /bin/bash /etc/bash.bashrc /usr/share/bash # bash命令的二进制程序的地址
$ whereis -m bash
bash: /usr/share/man/man1/bash.1.gz #bash命令的帮助文件地址
19.read 从标准输入(大部分是键盘)读取数据
参数:
-a:后面跟一个变量,该变量会被认为是一个属组,然后给其赋值,默认是以空格为分割符
-d:后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志
-p:后面跟提示信息,在输入前提示消息会被打印出
-e 在输入的时候可以使用命令补全功能。
-n 后跟一个数字,定义输入文本的长度,很实用。
-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
-t 后面跟秒数,定义输入字符的等待时间。
实例:
1.简单读取:
#!/bin/bash
#这里默认会换行
echo "输入网站名: "
#读取从键盘的输入
read website
echo "你输入的网站名是 $website"
exit 0 #退出
测试结果:
输入网站名:
www.runoob.com
你输入的网站名是 www.runoob.com
2.-p 参数,允许在read命令执行时给一个提示
#!/bin/bash
read -p "输入网站名:" website
echo "你输入的网站名是 $website"
exit 0
测试结果:
输入网站名:www.runoob.com
你输入的网站名是 www.runoob.com
3.-t 参数指定 read 命令等待输入的秒数,当计时满时,read命令返回一个非零退出状态。
#!/bin/bash
if read -t 5 -p "输入网站名:" website
then
echo "你输入的网站名是 $website"
else
echo "\n抱歉,你输入超时了。"
fi
exit 0
执行程序不输入,等待 5 秒后:
输入网站名:
抱歉,你输入超时了
4、除了输入时间计时,还可以使用 -n 参数设置 read 命令计数输入的字符。当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量。
#!/bin/bash
read -n1 -p "Do you want to continue [Y/N]?" answer
case $answer in
Y | y)
echo "fine ,continue";;
N | n)
echo "ok,good bye";;
*)
echo "error choice";;
esac
exit 0
该例子使用了-n 选项,后接数值 1,指示 read 命令只要接受到一个字符就退出。只要按下一个字符进行回答,read 命令立即接受输入并将其传给变量,无需按回车键。
5.-s 选项能够使 read 命令中输入的数据不显示在命令终端上(实际上,数据是显示的,只是 read 命令将文本颜色设置成与背景相同的颜色)。输入密码常用这个选项。
#!/bin/bash
read -s -p "请输入您的密码:" pass
echo "\n您输入的密码是 $pass"
exit 0
执行程序输入密码后是不显示的:
请输入您的密码:
您输入的密码是 runoob
6.read会读取文件中的"一行"文本,假设测试文件test.txt内容如下:
123
456
runoob
测试代码:
#!/bin/bash
count=1 # 赋值语句,不加空格
cat test.txt | while read line # cat 命令的输出作为read命令的输入,read读到>的值放在line中
do
echo "Line $count:$line"
count=$[ $count + 1 ] # 注意中括号中的空格。
done
echo "finish"
exit 0
执行结果:
Line 1:123
Line 2:456
Line 3:runoob
finish
20.sort命令
参数:
-b 忽略每行前面开始出现的空格字符
-r 以相反的方式来排序
-d 排序时,处理英文字母、数字以及空格字符外,忽略其他字符
-f 排序时,将小写字母视为大写字母
-n 按照数值的大小进行排序
-u 输出的结果是去重后的
-k 按照指定的列进行排序
例如 sort textfile -k 2 就是按照第二列进行排序
21.uniq 检查以及删除文本文件中重复出现的行列,一般和sort配合使用
参数:
-c 或 --count 在每行旁边显示该行重复出现的次数
-d 或 --repeated 仅显示重复出现的行列
注意:
当文件中的重复内容不相邻时,uniq命令不起作用,例如:
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
test 30
Hello 95
Linux 85
此时就需要先用sort进行排序,之后再用uniq -c 进行统计出现次数
22.wc 计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据
参数:
-c或-bytes或--chars :只显示Bytes数
-l或--lines: 显示行数
-w或--words:只显示字数
实例:
1.假设测试文件testfile的内容为以下:
$ cat testfile
Linux networks are becoming more and more common, but scurity is often an overlooked
issue. Unfortunately, in today’s environment all networks are potential hacker targets,
fro0m tp-secret military research networks to small home LANs.
Linux Network Securty focuses on securing Linux in a networked environment, where the
security of the entire network needs to be considered rather than just isolated machines.
It uses a mix of theory and practicl techniques to teach administrators how to install and
use security applications, as well as how the applcations work and why they are necesary.
使用wc统计指定文件的行数、字数,以及字节数
$ wc testfile
3 92 598 testfile # testfile文件的行数为3、单词数92、字节数598
2.统计多个文件信息
$ wc testfile testfile_1 testfile_2 #统计三个文件的信息
3 92 598 testfile #第一个文件行数为3、单词数92、字节数598
9 18 78 testfile_1 #第二个文件的行数为9、单词数18、字节数78
3 6 32 testfile_2 #第三个文件的行数为3、单词数6、字节数32
15 116 708 总用量 #三个文件总共的行数为15、单词数116、字节数708
23.df 显示目前文件系统磁盘使用情况
参数:
-a :显示所有文件系统
-B :指定块大小,以特定单位显示磁盘空间信息
-h :以人类可读的格式显示输出结果
-k :以KB为单位显示磁盘信息
-t :仅显示指定类型的文件系统
实例:
1.# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda6 29640780 4320704 23814388 16% /
udev 1536756 4 1536752 1% /dev
tmpfs 617620 888 616732 1% /run
none 5120 0 5120 0% /run/lock
none 1544044 156 1543888 1% /run/shm
说明:
Filesystem:文件系统的名称或标识符
1K-blocks:文件系统的总容量,以1KB块为单位,即文件系统总大小
Used:文件系统已经使用的量,以1KB块为单位
Available:文件系统仍然可以使用的容量
Use%:文件系统已使用容量占总容量的百分比
Mounted on:文件系统被挂在到的目录或位置
2.# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 29G 4.2G 23G 16% /
udev 1.5G 4.0K 1.5G 1% /dev
tmpfs 604M 892K 603M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 1.5G 156K 1.5G 1% /run/shm
24.du 显示目录或文件大小
参数:
-a:显示目录中个别文件的大小
-b:显示目录或文件大小时,以字节byte为单位
-c:除了显示个别目录或文件大小外,也显示所有目录或文件的总和
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-k或--kilobytes 以1024 bytes为单位。
实例:
显示指定文件所占空间
# du log2012.log
300 log2012.log
方便阅读的格式显示test目录所占空间情况:
# du -h test
608K test/test6
308K test/test4
4.0K test/scf/lib
4.0K test/scf/service/deploy/product
4.0K test/scf/service/deploy/info
12K test/scf/service/deploy
16K test/scf/service
4.0K test/scf/doc
4.0K test/scf/bin
32K test/scf
8.0K test/test3
1.3M test
du和df的区别:
df命令是从文件系统的角度考虑的,通过文件系统中未分配的空间来确定文件系统中已经分配的空间大小。也就是说,在使用 df命令统计分区时,不仅要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)。而 du命令是面向文件的,只会计算文件或目录占用的磁盘空间。也就是说,df命令统计的分区更准确,是真正的空闲空间。du统计的文件大小是准确的,是实际文件的容量。
25.mount 挂在Linux系统外的文件
语法:
mount [-l][-t <文件系统类型>][-o <选项>] <设备名称> <挂载点>
-l:以列表的形式显示当前已挂载的文件系统。
-t <文件系统类型>:指定要挂载的文件系统的类型,例如ext4、ntfs等。
-o <选项>:指定挂载选项,比如读写权限、访问控制等。
<设备名称>:指定要挂载的设备的名称或路径。
<挂载点>:指定要挂载到的目录路径。
选项:
ro:以只读模式挂载文件系统。
rw:以读写模式挂载文件系统。
remount:重新挂载一个已经挂载的文件系统,可以修改挂载选项。
user:允许普通用户挂载文件系统,而不仅仅是超级用户。
nouser:只允许超级用户挂载文件系统。
exec:允许在文件系统中执行可执行文件。
noexec:禁止在文件系统中执行可执行文件
实例:
1.将/dev/sbd1设备挂在到/mnt目录下
mount /dev/sdb1 /mnt
2.显示当前已经挂在的文件系统
mount -l
3.以只读模式挂载文件系统
mount -o ro /dev/sdc1 /mnt
4.重新挂在已经挂载的文件系统
mount -o remount,rw /dev/sdc1 /mnt
该命令将重新以读写模式挂载已经挂载到/mnt目录的/dev/sdc1设备
5.如何挂载ExFAT格式的设备
安装ExFAT驱动程序和工具。
sudo apt-get install exfat-utils exfat-fuse
创建一个目录作为挂载点。例如,可以使用以下命令在“/mnt”目录下创建一个名为“exfat”的目录:
sudo mkdir /mnt/exfat
使用以下命令将ExFAT格式的硬盘挂载到刚刚创建的目录:
sudo mount -t exfat /dev/sdb1 /mnt/exfat
其中,“/dev/sdb1”应替换为您的硬盘设备和分区号。可以使用以下命令来查找硬盘设备和分区号:sudo fdisk -l。如果硬盘有多个分区,可以根据需要将挂载点指向不同的分区。
确认硬盘已经成功挂载到指定的目录中。可以使用以下命令来检查:mount | grep exfat。如果该命令返回了硬盘的信息,则表示挂载成功。
6.如果要卸载ExFAT格式的设备
sudo umount /mnt/exfat
如果挂载点被其他进程占用,可以加-f参数强制卸载
sudo umount -f /mnt/exfat
26.ftp
参数:
-d:详细显示指令执行过程
-i:关闭交互模式,不询问任何问题
-g:关闭本地主机文件名支持特殊字符的扩充特性
-n:不使用自动登录
-v:显示指令执行过程
实例:
1.建立ftp链接
ftp 192.168.42.77 如果连接建立,将显示确认消息,并且提示输入FTP用户名
2.下载远程文件 test.txt
get test.txt 将下载远程服务器上的test.txt文件下载到本地当前目录
3.上传本地文件
put test.txt
4.删除远程文件
delete test.txt
5.退出FTP会话
bye
注意:FTP流量不加密。对于安全的数据传输,请使用SCP或SFTP
27.telnet 远程登陆主机
语法:
telnet [参数][主机名称或IP地址<通信端口>]
参数:
-8 允许使用8位字符资料,包括输入与输出。
-a 尝试自动登入远端系统。
-b<主机别名> 使用别名指定远端主机名称。
-l<用户名称> 指定要登入远端主机的用户名称。
实例:
登录远程主机
# telnet 192.168.0.5 //登录IP为 192.168.0.5 的远程主机
28.SSH 通过ssh协议连接到远程主机,实现远程登录和执行命令,它加密会话中的所有通信,确保数据传输的安全性
语法:
ssh [选项] [user@]hostname [command]
参数说明:
[user@]hostname:要连接的远程主机的用户名和主机名。
[command]:可选的在远程主机上执行的命令。
常用选项:
-l user:指定要登录的用户。
-p port:指定连接到远程主机的端口号,默认是22。
-i identity_file:指定身份验证文件(私钥文件)。
-v:详细模式,可以显示调试信息。
-C:启用压缩。
-N:不执行远程命令,只进行端口转发。
-f:后台运行。
-L local_port:remote_host:remote_port:本地端口转发。
-R remote_port:local_host:local_port:远程端口转发。
-D [bind_address:]port:动态应用程序级端口转发。
实例:
1.连接到远程主机用户名是root,主机名是192.168.1.26
ssh root@192.168.1.26
2.指定端口链接
ssh -p 8080 root@192.168.1.26
3.使用身份验证文件
ssh -i ~/.ssh/id_rsa root@192.168.1.26
4.在远程主机上执行命令
ssh test@runoob.com ls -la
5.公钥认证登录:
ssh-keygen
ssh-copy-id [用户名]@[IP地址]
使用ssh-keygen生成密钥对,并使用ssh-copy-id命令将公钥复制到目标主机上,实现公钥认证登录,避免每次登录都输入密码
6.文件传输:
scp [本地文件路径] [用户名]@[IP地址]:[目标路径]
使用scp指令可以实现本地与远程主机之间的文件传输。
29.SCP 用于 Linux 之间复制文件和目录
语法:
scp [可选参数] file_source file_target
参数:
-p:保留原文件的修改时间,访问时间和访问权限。
-r: 递归复制整个目录。
实例:
1.从本地复制到远程主机
命令格式如下:
scp /path/to/local/file.txt user@remote_host:/path/on/remote/
这会将本地的 `file.txt` 文件复制到远程主机 `remote_host` 的 `/path/on/remote/` 目录下。
2. 从远程主机复制到本地
scp user@remote_host:/path/on/remote/file.txt /path/to/local/
这会将远程主机 `remote_host` 的 `/path/on/remote/file.txt` 文件复制到本地的 `/path/to/local/` 目录下。
3. 递归复制目录
scp -r user@remote_host:/path/on/remote/directory /path/to/local/
这会将远程主机 `remote_host` 的 `/path/on/remote/directory` 目录及其所有内容复制到本地的 `/path/to/local/` 目录下。
4. 指定 SSH 端口
如果远程主机的 SSH 端口不是默认的 22,可以使用 `-P` 选项指定端口:
scp -P 2222 user@remote_host:/path/on/remote/file.txt /path/to/local/
30.useradd 建立用户帐号
说明:帐号建好之后,再用 passwd 设定帐号的密码。而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中
参数:
-d<登入目录> 指定用户登入时的起始目录。
-e<有效期限> 指定帐号的有效期限。
-f<缓冲天数> 指定在密码过期后多少天即关闭该帐号。
-g<群组> 指定用户所属的群组。
-G<群组> 指定用户所属的附加群组。
-r 建立系统帐号。
-s<shell> 指定用户登入后所使用的shell。
-u<uid> 指定用户ID。
实例:
添加一般用户
# useradd tt
为添加的用户指定相应的用户组
# useradd -g root tt
创建一个系统用户
# useradd -r tt
为新添加的用户指定home目录
# useradd -d /home/myd tt
建立用户且制定ID
# useradd caojh -u 544
31.passwd 更改使用者的密码
参数:
-d 删除密码
-f 强迫用户下次登录时必须修改口令
-w 口令要到期提前警告的天数
-l 停止账号使用
-S 显示密码信息
-u 启用已被停止的账户
实例:
修改用户密码
# passwd runoob //设置runoob用户的密码
Enter new UNIX password: //输入新密码,输入的密码无回显
Retype new UNIX password: //确认密码
passwd: password updated successfully
# 显示账号密码信息
# passwd -S runoob
runoob P 05/13/2010 0 99999 7 -1
删除用户密码
# passwd -d lx138
passwd: password expiry information changed.
32.ps 显示当前进程的状态
语法:
ps [选项]
参数:
-A 列出所有的进程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的进程
-d 显示所有进程,但省略所有的会话引线(utility)
-p pid 进程使用cpu的时间
-u uid or username 指定显示某用户的进程
au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM 进程占用物理内存的百分比。可以通过查看该值来了解进程所使用的物理内存比例大小。
VSZ(Virtual Memory Size)是虚拟内存的大小,表示进程所使用的虚拟内存空间大小。
RSS(Resident Set Size)是进程实际使用的物理内存大小,即占用的内存数,单位为KB
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态:
D: 无法中断的休眠状态 (通常 IO 的进程)
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时无法消除
W: 没有足够的记忆体分页可分配
<: 高优先序的行程
N: 低优先序的行程
L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
33.top命令
参数:
-d <秒数>:指定 top 命令的刷新时间间隔,单位为秒。
-n <次数>:指定 top 命令运行的次数后自动退出。
-p <进程ID>:仅显示指定进程ID的信息。
-u <用户名>:仅显示指定用户名的进程信息。
-H:在进程信息中显示线程详细信息。
-i:不显示闲置(idle)或无用的进程。
-b:以批处理(batch)模式运行,直接将结果输出到文件。
-c:显示完整的命令行而不截断。
-S:累计显示进程的 CPU 使用时间。
总体系统信息:
第一行:任务队列信息,
15:08:39 up 28 day 当前系统时间
5:35 系统运行时间
1 user 当前用户登录数
load average:2.01 2.20 1.85 系统的平均负载数,显示1分钟,5分钟,15分钟到现在的平均数
第二行:进程统计信息
527 total: 系统当前总进程数
2 running: 正在运行的进程数
525 sleeping:睡眠进程数
0 stopped: 停止进程数
0 zombie: 僵尸进程数
第三行:CPU统计信息
10.8 us:用户空间CPU使用率
2.2 sy:核心软件空间CPU使用率
0.0 ni:用户进程空间改变过优先级的进程CPU的占用率
85.4 id:空闲空间占用率
1.3 wa:等待输入输出的CPU时间百分比
第四行:内存状态
3897480 total:物理内存总量
279104 free:空闲内存
3023052 used:已使用的内存
595324 buffers:内核缓存使用
第五行:swap交换分区信息
total:交换分区总量
used:已使用交换分区内存
free:空闲交换分区
cached:缓冲交换分区
进程信息:
PID:进程的标识符。
USER:运行进程的用户名。
PR(优先级):进程的优先级。
NI(Nice值):进程的优先级调整值。
VIRT(虚拟内存):进程使用的虚拟内存大小。
RES(常驻内存):进程实际使用的物理内存大小。
SHR(共享内存):进程共享的内存大小。
%CPU:进程占用 CPU 的使用率。
%MEM:进程占用内存的使用率。
TIME+:进程的累计 CPU 时间。
34.kill 终止正在运行的进程
语法:
kill [options] <PID>
参数:
-l:列出所有可用的信号。
-<signal>:发送特定的信号给目标进程,如 -9 表示发送 KILL 信号,即强制终止进程。
最常用的信号:
SIGKILL(信号9):立即结束进程,不能被捕获或忽略。
SIGTERM(信号15):正常结束进程,可以被捕获或忽略。
SIGSTOP(信号19):暂停进程,不能被捕获、忽略或结束。
SIGCONT(信号18):继续执行被暂停的进程。
SIGINT(信号2):通常是Ctrl+C产生的信号,可以被进程捕获或忽略
35.free 显示内存状态
语法:
free 参数 -s 间隔秒数
参数:
-b 以Byte为单位显示内存使用情况。
-k 以KB为单位显示内存使用情况。
-m 以MB为单位显示内存使用情况。
-h 以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。单位有:
B = bytes
K = kilos
M = megas
G = gigas
T = teras
-o 不显示缓冲区调节列。
-s<间隔秒数> 持续观察内存使用状况。
-t 显示内存总和列。
Mem(内存信息):
total:系统总的物理内存大小,这里显示为 7.8G(实际大小可能因系统而异)。
used:当前已使用的内存大小。
free:当前未被使用的内存大小。
shared:被多个进程共享的内存大小。
buff/cache:用于缓存磁盘数据和缓冲写入操作的内存大小。
available:系统可立即分配给新进程使用的内存大小,表示大约有 5.1GB 的内存可以立即被新的程序使用。
Swap(交换空间信息):
total:系统总的交换空间大小。
used:当前已使用的交换空间大小,0B 表示目前没有使用交换空间。
free:当前未被使用的交换空间大小。
36.xargs 命令 :此命令可以将管道或标准输入数据转换成命令行参数,使用这个命令是因为很多命令不支持使用 管道 | 来传递参数,但是平时又会经常使用。
例如: find /sbin -perm +700 | ls -l 这个命令就是错的
find /sbin -perm +700 |xargs ls -l 这个才是正确的
xargs后面的命令默认是echo
cat test.txt |xargs
等同于
cat test.txt |xargs echo
参数:
-a file 从文件中读入作为stdin
-e flag 有时候可能是-E ,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止
-p 打印出要执行的命令,询问用户是否要执行
echo 'one two three' | xargs -p touch 执行这个命令后会询问是否创建 one two three 这三个文件
-n num -n后面加次数,
例如 “ echo {0..9} | xargs -n 2 echo ”每两个参数运行一次echo命令。所以,10个阿拉伯数字运行了五次echo命令,输出了五行。
-t 打印出最终要执行的命令,然后直接执行,不需要用户确认
例如 “ echo 'one two three' | xargs -t rm”
-d分隔符 ,默认的xargs的分隔符是回车,-e 制定的分隔符是空格
例如:“echo "nameXnameXnameXname" | xargs -dX” 这个就是以 X 为分隔符
输出结果:name name name name
37.gzip 用于压缩文件
参数:
-n或--no-name 压缩文件时,不保存原来的文件名称及时间戳记。
-N或--name 压缩文件时,保存原来的文件名称及时间戳记。
-r或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
38.tar 用于创建和解压归档文件的命令行工具,可以用来将多个文件和目录组合成一个单一的归档文件,也可以用来解压已经存在的归档文件。
实例:
1.将文件 file1、file2 和 directory 打包到一个名为 archive.tar 的归档文件中
参数:
-c: 创建新的归档文件
-v: 显示详细输出,列出被添加到归档中的文件
-f: 指定归档文件的名称
语句:
tar -cvf archive.tar file1 file2 directory
2.解压归档文件:解压名为 archive.tar 的归档文件,还原其中包含的文件和目录。
-x: 解压归档文件
语句:
tar -xvf archive.tar
3、压缩归档文件:将名为 directory 的目录打包成一个归档文件,然后使用 gzip 进行压缩,生成名为 archive.tar.gz 的文件。
-z: 使用 gzip 压缩归档文件
4、列出归档文件中的内容:列出名为 archive.tar 的归档文件中包含的所有文件和目录。
-t: 列出归档文件中的内容
语句:
tar -tvf archive.tar
5、追加文件到已存在的归档中:将名为 newfile 的文件添加到已存在的名为 archive.tar 的归档文件中。
-r: 向已存在的归档中追加文件
语句:
tar -rvf archive.tar newfile
6、创建一个经过 gzip 压缩的归档文件:打包 directory 目录下的所有文件和子目录,并使用 gzip 压缩,生成名为 archive.tar.gz 的归档文件。
语句:
tar -zcvf archive.tar.gz directory
7、解压一个已经被 gzip 压缩的归档文件:解压 example.tar.gz 文件,并在当前目录下恢复其中包含的文件和目录。
语句:
tar -zxvf example.tar.gz
39.ip
常用对象的取值含义如下:
link:网络设备
address:设备上的协议(IP或IPv6)地址
addrlabel:协议地址选择的标签配置
route:路由表条目
rule:路由策略数据库中的规则
常用选项的取值含义如下:
-s:输出更详细的信息;
-f:强制使用指定的协议族;
-4:指定使用的网络层协议是IPv4协议;
-6:指定使用的网络层协议是IPv6协议;
-0:输出信息每条记录输出一行,即使内容较多也不换行显示;
-r:显示主机时,不使用IP地址,而使用主机的域名。
40.netstat 查看本机开放的端口
参数:
-a:列出所有网络状态,包括Socket
-c 秒数:指定每隔几秒刷新一次网络状态
-n:使用ip地址和端口号显示,不适用域名与服务器
-p:显示PID和程序名
-t:显示TCP端口的连接状态
-u:显示UDP端口连接状态
-r:显示路由器
-l:仅显示监听状态的连接
实例:
1.查看本机开启的端口 : netstat -tuln
2.查看本机那些程序开启的端口:netstat -tulnp
3.查看所有连接:netstat -an
42.ss命令 centos默认没有安装netstat命令,就会使用ss命令
选项:
-a:列出所有网络状态,包括socket
-n:使用IP地址和端口显示,不适用域名或服务器
-p:显示PID和程序名
-t:显示TCP端口的连接状态
-u:显示UDP端口的连接状态
[root@localhost /]# ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 * 60521 * 60522
u_str ESTAB 0 0 /run/dbus/system_bus_socket 58261 * 58260
u_str ESTAB 0 0 /run/systemd/journal/stdout 58210 * 58208
u_str ESTAB 0 0 @/tmp/dbus-UgoAbyZnB1 55961 * 55960
u_str ESTAB 0 0 * 63255 * 63254
u_str ESTAB 0 0 * 61479 * 61487
u_str ESTAB 0 0 /run/systemd/journal/stdout 56893 * 56891
含义:
Netid:网络标识。正常网络连接是 TCP或 UDP,其他的都是 Socket连接。
State:状态。常见的状态主要有以下几种。
➣ LISTEN:监听状态,只有 TCP需要监听,而 UDP不需要监听。
➣ ESTABLISHED:已经建立连接的状态。如果使用“-l”选项,则看不到已经建立连接的状态。
➣ UNCONN:无连接。
➣ SYN_SENT:SYN发起包,就是主动发起连接的数据包。
➣ SYN_RECV:接收到主动连接的数据包
➣ FIN_WAIT1:正在中断的连接。
➣ FIN_WAIT2:已经中断的连接,但是正在等待对方主机进行确认。
➣ TIME_WAIT:连接已经中断,但是套接字依然在网络中等待结束。
➣ CLOSED:无连接状态。
Recv-Q:表示接收到的数据已经在本地的缓冲中,但是还没有被进程取走。
Send-Q:表示从本机发送,对方还没有收到的数据,依然在本地的缓冲中,一般是不具备 ACK标志的数据包。
Local Address:Port:本机的 IP地址和端口号。
Peer Address:Port:远程主机的 IP地址和端口号。
实例:
1.查询本机开启的端口 -l代表监听状态
[root@localhost /]# ss -tuln
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:39950 *:*
udp UNCONN 0 0 192.168.122.1:53 *:*
udp UNCONN 0 0 127.0.0.1:323 *:*
tcp LISTEN 0 128 *:111 *:*
tcp LISTEN 0 128 *:6000 *:*
2.查看本机开启的端口和正在进行的连接
41.stat命令 查看文件访问时间、数据修改时间、状态修改时间
[root@localhost /]# stat /root/test
文件:"/root/test"
大小:10 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:33575029 硬链接:2
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2024-08-16 18:15:56.158928761 +0800
最近更改:2024-08-16 18:15:49.495929214 +0800
最近改动:2024-08-16 18:15:49.495929214 +0800
选项:
-f:查看文件所在文件系统信息,而不是查看该文件信息
[root@localhost /]# stat -f /root/test
文件:"/root/test"
ID:fd0000000000 文件名长度:255 类型:xfs
块大小:4096 基本块大小:4096
块:总计:4452864 空闲:3371699 可用:3371699
Inodes: 总计:8910848 空闲:8753624
当使用cat读取文件时,使用stat命令可以看到此文件的“最近访问时间发生变化”
当使用echo向文件中写入数据时,那么文件的“数据修改时间”就会发生变化,因为文件内容改变,所以“状态修改时间”也会改变
当使用chmod修改文件状态时,文件的“状态修改时间”就会改变
42.防火墙
1. 在centos 中开启指定端口的防火墙规则
1.查看防火墙状态
systemctl status firewalld
2.开启指定端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
--zone=public表示在公共区域进行配置。
--add-port=8080/tcp表示添加 8080 端口的 TCP 协议。
--permanent表示设置永久生效,否则在系统重启后设置会失效。
3.重新加载防火墙
firewall-cmd --reload
2. 查看当前运行的防火墙规则
1.该命令会显示当前生效的区域(如 public、internal 等)以及该区域下的服务、端口、源地址等允许或拒绝的规则。
firewalld-cmd --list-all
2.查看特定区域的规则
firewalld-cmd --zone=<zone_name> --list-all
将<zone_name>替换为你要查看的区域名称,如 public、dmz 等
3.查看永久性规则(重启防火墙也存在)
firewalld-cmd --premanent --list-all
3.防护墙常用命令
1.systemctl start firewalld
2.systemctl stop firewalld
3.systemctl restart firewalld
4.允许添加/移除的服务
firewalld-cmd --zone=<zone_name> --add-service=<serivce_name>
例如:firewalld-cmd --zone=<zone_name> --add-service=http 添加http服务
firewall-cmd --zone=<zone_name> --remove-service=<service_name>
5.添加/拒绝指定的ip
firewall-cmd --zone=<zone_name> --add-source=<ip_address>
firewall-cmd --zone=<zone_name> --remove-source=<ip_address>
43.lscpu 查看cpu情况
43.定时任务crontab
(1)语 法:
crontab [-u <用户名称>][配置文件] 或 crontab { -l | -r | -e }
-u #<用户名称> 是指设定指定<用户名称>的定时任务,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。
如果不使用 -u user 的话,就是表示设定自己的定时任务。
-l #列出该用户的定时任务设置。
-r #删除该用户的定时任务设置。
-e #编辑该用户的定时任务设置。
(2)命令时间格式 :
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
(3)一些Crontab定时任务例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart #每晚的21:30 重启apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart #每月1、10、22日的4 : 45重启apache
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart #每周六、周日的1 : 10重启apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart #每天18 : 00至23 : 00之间每隔30分钟重启apache
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart #每星期六的11 : 00 pm重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart #晚上11点到早上7点之间,每隔一小时重启apache
* */1 * * * /usr/local/etc/rc.d/lighttpd restart #每一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart #每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart #一月一号的4点重启apache
*/30 * * * * /usr/sbin/ntpdate cn.pool.ntp.org #每半小时同步一下时间
0 */2 * * * /sbin/service httpd restart #每两个小时重启一次apache
50 7 * * * /sbin/service sshd start #每天7:50开启ssh服务
50 22 * * * /sbin/service sshd stop #每天22:50关闭ssh服务
0 0 1,15 * * fsck /home #每月1号和15号检查/home 磁盘
1 * * * * /home/bruce/backup #每小时的第一分执行 /home/bruce/backup这个文件
00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \; #每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
30 6 */10 * * ls #每月的1、11、21、31日是的6:30执行一次ls命令
44.显示和设置系统主机名hostname
参数:
-a:显示主机别名
-d:显示系统DNS域名
-f:显示主机的完全限定域名
-i:显示ip
-I:显示主机的所有UO
-s:显示主机的短名称
如果要永修修改主机名,就修改配置文件/etc/hosts和/etc/sysconfig/network并且重启系统
45.查看操作系统版本
EulerOS系统:cat /etc/os-release或者cat /etc/euleros-release
CentOS系统: cat /etc/redhat-release
46.查看系统内核 uname
uname -r 或者 uname -a