说明:
因为最近一年的工作都是使用windows系统下使用的,之前学习用过一段时间的Linux,但是没有系统的学习学习,所以打算再系统的学习下相关知识,总结一些常用的命令统计下来。
如果有想学一点基础也没有的,或者么有Linux系统环境,建议使用window电脑装个双系统,安装个Ubuntu就可以,刚开始也可以去B站去搜索一些教程或者看些菜鸟教程,也是很不错的选择,一点没有接触的建议先去找些视频看些,再去看文档比较接收的快,我之前也找了些视频看的基础讲解。
最近学习一些知识,涉及到linux,发现好多不知道咋用的了,主要因为一个项目,然后各种测试,装系统,网上搜索安装docker方法,结果我的window就是不支持,因为我的window系统删减版的,没有Hyper,公司电脑也装不上,也不想重装系统(重装代价比较大,使用虚拟机测试可以测试测试),所以家里测试装了一个Ubuntu16.04,因为之前装过一次,但是后来因为系统重装加上好久没有再安装使用了,发现16.04找了各种安装命令都无果。后来换了几个版本的Ubuntu,最终安装一个18.04版本的弄好docker了(但是还不会docker),等复习下一个知识就打算学习下docker。回头单独写个window10安装双系统的步骤和注意事项(计划放在十一期间把)。
日后有需要常用的再扩展增加博客中,如果看到这个博客的你有其他常用命令欢迎留言赐教,我也学习学习增加到博客中,欢迎一起学习沟通和交流。
一、磁盘管理
①、ls命令
ls命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
语法
1 | ls [-alrtAFR] [name...] |
参数 :
-a 显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)
-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
-r 将文件以相反次序显示(原定依英文字母次序)
-t 将文件依建立时间之先后次序列出
-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
-F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
-R 若目录下有文件,则以下之文件亦皆依序列出
实例
列出根目录()下的所有目录:
1 | cd / |
2 | ls |
显示:
bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
显示当前目录下所有文件的权限等:
1 | ls -l |
②、cd命令(切换工作目录)
cd命令用于切换当前工作目录至 dirName(目录参数)。
其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home 目录 (也就是刚 login 时所在的目录)。
另外,”~” 也表示为 home 目录 的意思,”.” 则是表示目前所在的目录,”..” 则表示目前目录位置的上一层目录,”/“ 表示为根目录。
语法:
1 | cd [dirName] |
dirName:要切换的目标目录。
实例:
跳到 /usr/bin/ :
1 | cd /usr/bin |
跳到自己的 home 目录 :
1 | cd ~ |
③、 pwd命令
pwd命令用于显示工作目录。
执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称。
语法
1 | pwd [--help][--version] |
参数说明:
--help 在线帮助。
--version 显示版本信息。
实例
查看当前所在目录:
1 | $pwd |
结果,这是在home目录下:
/home/zhao
④、df命令
df命令用于显示目前在Linux系统上的文件系统的磁盘使用情况统计。
语法:
1 | df [选项]... [FILE]... |
文件-a, --all 包含所有的具有 0 Blocks 的文件系统
文件--block-size={SIZE} 使用 {SIZE} 大小的 Blocks
文件-h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...)
文件-H, --si 很像 -h, 但是用 1000 为单位而不是用 1024
文件-i, --inodes 列出 inode 资讯,不列出已使用 block
文件-k, --kilobytes 就像是 --block-size=1024
文件-l, --local 限制列出的文件结构
文件-m, --megabytes 就像 --block-size=1048576
文件--no-sync 取得资讯前不 sync (预设值)
文件-P, --portability 使用 POSIX 输出格式
文件--sync 在取得资讯前 sync
文件-t, --type=TYPE 限制列出文件系统的 TYPE
文件-T, --print-type 显示文件系统的形式
文件-x, --exclude-type=TYPE 限制列出文件系统不要显示 TYPE
文件-v (忽略)
文件--help 显示这个帮手并且离开
文件--version 输出版本资讯并且离开
实例:
1、显示文件系统的磁盘使用情况统计:
1 | $df |
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 1732892 0 1732892 0% /dev
tmpfs 1744332 0 1744332 0% /dev/shm
tmpfs 1744332 252 1744080 1% /run
tmpfs 1744332 0 1744332 0% /sys/fs/cgroup
/dev/vda1 61775868 23733920 34880860 41% /
第一列指定文件系统的名称,第二列指定一个特定的文件系统1K-块1K是1024字节为单位的总内存。用和可用列正在使用中,分别指定的内存量。
使用列指定使用的内存的百分比,而最后一栏”安装在”指定的文件系统的挂载点
2、df也可以显示磁盘使用的文件系统信息:
1 | $df software/ |
software是当前文件目录,然后这个结果其实就是上面的最后一行数据,当前磁盘使用了41%。
3、显示所有的信息:
1 | $df --total |
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 1732892 0 1732892 0% /dev
tmpfs 1744332 0 1744332 0% /dev/shm
tmpfs 1744332 252 1744080 1% /run
tmpfs 1744332 0 1744332 0% /sys/fs/cgroup
/dev/vda1 61775868 23735020 34879760 41% /
total 68741756 23735272 41845396 37% -
我们看到输出的末尾,包含一个额外的行,显示总的每一列。
4、-h选项,通过它可以产生可读的格式df命令的输出:
1 | $df -h |
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.7G 0 1.7G 0% /dev
tmpfs 1.7G 0 1.7G 0% /dev/shm
tmpfs 1.7G 252K 1.7G 1% /run
tmpfs 1.7G 0 1.7G 0% /sys/fs/cgroup
/dev/vda1 59G 23G 34G 41% /
⑤、du命令
du命令用于显示目录或文件的大小。
du会显示指定的目录或文件所占用的磁盘空间。
语法
1 | du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件] |
参数说明:
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或--dereference-args 显示指定符号连接的源文件大小。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-k或--kilobytes 以1024 bytes为单位。
-l或--count-links 重复计算硬件连接的文件。
-L<符号连接>或--dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
-m或--megabytes 以1MB为单位。
-s或--summarize 仅显示总计。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或--exclude-from=<文件> 在<文件>指定目录或文件。
--exclude=<目录或文件> 略过指定的目录或文件。
--max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
--help 显示帮助。
--version 显示版本信息。
实例
1、显示目录或者文件所占空间:
1 | $du |
只显示当前目录下面的子目录的目录大小和当前目录的文件总数量,最下面的13880572为当前目录的总文件数量
太多了截图一点结尾。这个命令会把目录下所有的文件都显示出来。
2、不全部显示,只显示总数量
1 | du -s |
$du -s
13880572 .
3、显示总数量的大小
1 | du -s -h |
$du -s -h
14G .
4、显示当前目录或者文件的大小
1 | du -s -h software/ |
$du -s -h software/
172M software/
⑥、mkdir命令(创建文件夹)
mkdir命令用于建立名称为 dirName 之子目录。
语法
1 | mkdir [-p] dirName |
参数说明:
-p 确保目录名称存在,不存在的就建一个。
实例:
1、在当前工作目录下,建立一个名为 zhao的子目录 :
1 | mkdir zhao |
2、在工作目录下的 zhao2 目录中,建立一个名为 zhao1 的子目录。 若 zhao2 目录原本不存在,则建立一个。(注:本例若不加 -p,且原本 BBB目录不存在,则产生错误。)
不加p报错
1 | $mkdir ./zhao2/zhao1 |
2 | mkdir: cannot create directory ‘./zhao2/zhao1’: No such file or directory |
加-p创建成功
1 | $mkdir -p ./zhao2/zhao1 |
⑦、stat命令
stat命令用于显示inode内容。
stat以文字的格式来显示inode的内容。
语法
1 | stat [文件或目录] |
实例
查看当前目录下 zufang2.txt 文件的inode内容内容,可以用以下命令:
1 | $stat zufang2.txt |
2 | File: ‘zufang2.txt’ |
3 | Size: 14202 Blocks: 32 IO Block: 4096 regular file |
4 | Device: fd01h/64769d Inode: 2359881 Links: 1 |
5 | Access: (0664/-rw-rw-r--) Uid: (1329303/wb-zjf497303) Gid: ( 100/ users) |
6 | Access: 2019-09-30 09:32:33.240221082 +0800 |
7 | Modify: 2019-09-30 09:32:24.775983506 +0800 |
8 | Change: 2019-09-30 09:32:24.779983619 +0800 |
9 | Birth: - |
⑧、输出重定向命令 < 和 <<
Linux允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中。
如:ls > test.txt ( test.txt 如果不存在,则创建,存在则覆盖其内容 )
注意: >输出重定向会覆盖原来的内容,>>输出重定向则会追加到文件的尾部。
⑨、清屏:clear
clear作用为清除终端上的显示(类似于DOS的cls清屏功能),
也可使用快捷键:Ctrl + l ( “l” 为字母 )。
二、文件管理
①、cat(cat: concatenate 连锁)
cat命令连接文件并打印到标准输出设备上,cat经常用来显示文件的内容。
注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按Ctrl+S键,停止滚屏;按Ctrl+Q键可以恢复滚屏。按Ctrl+C(中断)键可以终止该命令的执行,并且返回Shell提示符状态。
语法格式
1 | cat [-AbeEnstTuv] [--help] [--version] fileName |
参数说明:
1 | -n 或 --number:由 1 开始对所有输出的行数编号。 |
2 | |
3 | -b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。 |
4 | |
5 | -s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。 |
6 | |
7 | -v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。 |
8 | |
9 | -E 或 --show-ends : 在每行结束处显示 $。 |
10 | |
11 | -T 或 --show-tabs: 将 TAB 字符显示为 ^I。 |
12 | |
13 | -A, --show-all:等价于 -vET。 |
14 | |
15 | -e:等价于"-vE"选项; |
16 | |
17 | -t:等价于"-vT"选项; |
实例:
把 zufang.txt的文档内容加上行号后输入 zufang2.txt 这个文档里:
1 | cat -n zufang.txt > zufang2.txt |
把 zufang.txt 和zufang2.txt的文档内容加上行号(空白行不加)之后将内容附加到 zufang3.txt 文档里:
1 | cat -b zufang.txt zufang2.txt >> zufang3.txt |
清空 /etc/test.txt 文档内容:
1 | cat /dev/null > /etc/test.txt |
cat 也可以用来制作镜像文件。例如要制作软盘的镜像文件,将软盘放好后输入:
1 | cat /dev/fd0 > OUTFILE |
②、chattr命令
Linux chattr命令用于改变文件属性。
这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
1 | a:让文件或目录仅供附加用途。 |
2 | b:不更新文件或目录的最后存取时间。 |
3 | c:将文件或目录压缩后存放。 |
4 | d:将文件或目录排除在倾倒操作之外。 |
5 | i:不得任意更动文件或目录。 |
6 | s:保密性删除文件或目录。 |
7 | S:即时更新文件或目录。 |
8 | u:预防意外删除 |
语法
1 | chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...] |
参数
1 | -R 递归处理,将指定目录下的所有文件及子目录一并处理。 |
2 | |
3 | -v<版本编号> 设置文件或目录版本。 |
4 | |
5 | -V 显示指令执行过程。 |
6 | |
7 | +<属性> 开启文件或目录的该项属性。 |
8 | |
9 | -<属性> 关闭文件或目录的该项属性。 |
10 | |
11 | =<属性> 指定文件或目录的该项属性。 |
实例
用chattr命令防止系统中某个关键文件被修改:
1 | chattr +i zufang.txt |
2 | lsattr zufang.txt |
会显示如下属性
1 | chattr: Operation not permitted while setting flags on zufang.txt |
2 | |
3 | --------------e---- zufang.txt |
③、chmod命令
chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
语法
1 | chmod [-cfvR] [--help] [--version] mode file... |
参数说明
1 | mode : 权限设定字串,格式如下 : |
2 | |
3 | [ugoa...][[+-=][rwxX]...][,...] |
4 | 其中: |
5 | |
6 | u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。 |
7 | + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 |
8 | r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。 |
其他参数说明:
1 | -c : 若该文件权限确实已经更改,才显示其更改动作 |
2 | -f : 若该文件权限无法被更改也不要显示错误讯息 |
3 | -v : 显示权限变更的详细资料 |
4 | -R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更) |
5 | --help : 显示辅助说明 |
6 | --version : 显示版本 |
实例:
将文件 zufang.txt 设为所有人皆可读取 :
1 | chmod ugo+r zufang.txt |
将文件 zufang.txt 设为所有人皆可读取 :
1 | chmod a+r zufang.txt |
将文件 zufang.txt 与 zufang2.txt 设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
1 | chmod ug+w,o-w zufang.txt zufang2.txt |
将 zufang3.txt 设定为只有该文件拥有者可以执行 :
1 | chmod u+x zufang3.txt |
将目前目录下的所有文件与子目录皆设为任何人可读取 :
1 | chmod -R a+r * |
此外chmod也可以用数字来表示权限如 :
1 | chmod 777 file |
数字语法为:
1 | chmod abc file |
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=5。
1 | chmod a=rwx file |
2 | |
3 | chmod 777 file |
4 | 效果相同 |
1 | chmod ug=rwx,o=x file |
2 | |
3 | chmod 771 file |
4 | 效果相同 |
④、file命令
file命令用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。
语法
1 | file [-bcLvz][-f <名称文件>][-m <魔法数字文件>...][文件或目录...] |
参数:
-b 列出辨识结果时,不显示文件名称。
-c 详细显示指令执行过程,便于排错或分析程序执行的情形。
-f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
-L 直接显示符号连接所指向的文件的类别。
-m<魔法数字文件> 指定魔法数字文件。
-v 显示版本信息。
-z 尝试去解读压缩文件的内容。 [文件或目录…] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
实例
显示文件类型:
1 | file zufang.txt |
2 | zufang.txt: UTF-8 Unicode (with BOM) text, with CRLF line terminators |
不显示文件名称
1 | file -b zufang.txt |
2 | UTF-8 Unicode (with BOM) text, with CRLF line terminators |
显示MIME类别
1 | file -i zufang.txt |
2 | zufang.txt: text/plain; charset=utf-8 |
⑤、find命令
Linux find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
参数说明 :
find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。
1 | -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件 |
2 | |
3 | -name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写 |
4 | |
5 | -maxdepth n 代表的做大往下找的深度(最多进入n层子文件夹去查找) |
6 | |
7 | -exec<执行指令> \;:假设find指令的回传值为True,就执行该指令;记得命令后面要配合`\;` |
8 | |
9 | -amin n : 在过去 n 分钟内被读取过 |
10 | |
11 | -anewer file : 比文件 file 更晚被读取过的文件 |
12 | |
13 | -atime n : 在过去n天内被读取过的文件 |
14 | |
15 | -cmin n : 在过去 n 分钟内被修改过 |
16 | |
17 | -cnewer file :比文件 file 更新的文件 |
18 | |
19 | -ctime n : 在过去n天内被修改过的文件 |
20 | |
21 | -empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name |
22 | |
23 | -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写 |
24 | |
25 | -size n : 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type c : 文件类型是 c 的文件。 |
实例
将目前目录及其子目录下所有延伸档名是 c 的文件列出来。
1 | find . -name "*.c" |
将目前目录其其下子目录中所有一般文件列出
1 | find . -type f |
将目前目录及其子目录下所有最近 20 天内更新过的文件列出
1 | find . -ctime -20 |
查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们:
1 | find /var/log -type f -mtime +7 -ok rm {} \; |
查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
1 | find . -type f -perm 644 -exec ls -l {} \; |
为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:
1 | find / -type f -size 0 -exec ls -l {} \; |
⑥、more命令
more命令是一个基于vi编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作。more名单中内置了若干快捷键,常用的有H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。
语法
1 | more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..] |
参数:
-num 一次显示的行数
-d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示 fileNames 欲显示内容的文档,可为复数个数
快捷键:
1 | 按Space键:显示文本的下一屏内容。 |
2 | 按Enier键:向下n行,需要定义。默认为1行。 |
3 | 按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。 |
4 | 按H键:显示帮助屏,该屏上有相关的帮助信息。 |
5 | 按B键:显示上一屏内容。 |
6 | 按Q键:退出rnore命令 |
7 | Ctrl+F 向下滚动一 |
8 | Ctrl+B 返回上一 |
9 | = 输出当前行的行 |
10 | :f 输出文件名和当前行的行号 |
11 | V 调用vi编辑器 |
12 | !命令 调用Shell,并执行命令 |
⑦、mv命令
mv命令用来为文件或目录改名、或将文件或目录移入其它位置。
mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:
注意事项:
如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。
如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。
注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
语法:
1 | mv [options] source dest |
source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
参数:
-i: 若指定目录已有同名文件,则先询问是否覆盖旧文件;
-f: 在mv操作要覆盖某已有的目标文件时不给任何指示;
实例:
将文件 aaa 更名为 bbb :
1 | mv aaa bbb |
将info目录放入logs目录中。注意,如果logs目录不存在,则该命令将info改名为logs。
1 | mv info/ logs |
再如将/usr/student下的所有文件和目录移到当前目录下,命令行为:
1 | mv /usr/student/* . |
⑧、rm命令
rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。
注意:
使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。
语法
1 | rm [options] name... |
参数:
-i 删除前逐一询问确认。
-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。
-r 将目录及以下之档案亦逐一删除。
案例:
删除当前目录下的所有文件及目录,并且是直接删除,无需逐一确认命令行为:
(使用前注意是否需要删除或者备份一份?无法恢复)
1 | rm -rf 要删除的文件名或目录 |
删除文件名 test.txt:
1 | rm -rf test.txt |
删除目录 test,不管该目录下是否有子目录或文件,都直接删除:
1 | rm -rf test/ |
⑨、cp命令
cp主要用于复制文件或目录。
语法
1 | cp [options] source dest |
参数说明:
-a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
-d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
-f:覆盖已经存在的目标文件而不给出提示。
-i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
-p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
-r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
-l:不复制文件,只是生成链接文件。
实例
使用指令”cp”将当前目录”test/“下的所有文件复制到新目录”newtest”下,输入如下命令:
1 | cp –r test/ newtest |
注意:用户使用该指令复制目录时,必须使用参数”-r”或者”-R”。
⑩、whereis命令
whereis命令用于查找文件。
该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。
该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
语法
1 | whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...] |
参数:
-b 只查找二进制文件。
-B<目录> 只在设置的目录下查找二进制文件。
-f 不显示文件名前的路径名称。
-m 只查找说明文件。
-M<目录> 只在设置的目录下查找说明文件。
-s 只查找原始代码文件。
-S<目录> 只在设置的目录下查找原始代码文件。
-u 查找不包含指定类型的文件。
实例
使用指令”whereis”查看指令”bash”的位置,输入如下命令:
1 | whereis bash |
上面的指令执行后,输出信息如下所示:
bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz
1 | whereis python2.7 |
上面的指令执行后,输出信息如下所示:
python2: /usr/bin/python2.7 /usr/bin/python2.7-config /usr/bin/python2 /usr/lib/python2.7 /usr/lib64/python2.7 /usr/include/python2.7 /usr/local/python2.7 /usr/share/man/man1/python2.1.gz
⑪、ln命令(文件链接)
linux链接文件类似于Windows下的快捷方式。
链接文件分为软链接和硬链接。
软链接:软链接不占用磁盘空间,源文件删除则软链接失效。
硬链接:硬链接只能链接普通文件,不能链接目录。
使用格式:
1 | ln 源文件 链接文件 |
2 | ln -s 源文件 链接文件 |
如果没有-s选项代表建立一个硬链接文件,两个文件占用相同大小的硬盘空间,即使删除了源文件,链接文件还是存在,所以-s选项是更常见的形式。
注意:
如果软链接文件和源文件不在同一个目录,源文件要使用绝对路径,不能使用相对路径。
选项:
-b或--backup:删除,覆盖目标文件之前的备份;
-d或-F或——directory:建立目录的硬连接;
-f或——force:强行建立文件或目录的连接,不论文件或目录是否存在;
-i或——interactive:覆盖既有文件之前先询问用户;
-n或--no-dereference:把符号连接的目的目录视为一般文件;
-s或——symbolic:对源文件建立符号连接,而非硬连接;
-S<字尾备份字符串>或--suffix=<字尾备份字符串>:用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它;
-v或——verbose:显示指令执行过程;
-V<备份方式>或--version-control=<备份方式>:用“-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用“-S”参数变更,当使用“-V”参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串;
--help:在线帮助;
--version:显示版本信息。
参数:
源文件:指定连接的源文件。如果使用-s选项创建符号连接,则“源文件”可以是文件或者目录。创建硬连接时,则“源文件”参数只能是文件;
目标文件:指定源文件的目标连接文件。
实例
将目录/usr/mengqc/mub1下的文件m2.c链接到目录/usr/zhao下的文件a2.c
1 | cd /usr/mengqc |
1 | ln /mub1/m2.c /usr/zhao/a2.c |
在执行ln命令之前,目录/usr/zhao中不存在a2.c文件。执行ln之后,在/usr/zhao目录中才有a2.c这一项,表明m2.c和a2.c链接起来(注意,二者在物理上是同一文件),利用ls -l命令可以看到链接数的变化。
在目录/usr/zhao下建立一个符号链接文件abc,使它指向目录/usr/mengqc/mub1
1 | ln -s /usr/mengqc/mub1 /usr/zhao/abc |
执行该命令后,/usr/mengqc/mub1代表的路径将存放在名为/usr/zhao/abc的文件中。
⑫、which(在path中查找文件)
which命令用于查找文件。
which指令会在环境变量$PATH设置的目录里查找符合条件的文件。
语法
1 | which [文件...] |
参数:
-n<文件名长度> 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
-p<文件名长度> 与-n参数相同,但此处的<文件名长度>包括了文件的路径。
-w 指定输出时栏位的宽度。
-V 显示版本信息。
实例
使用指令”which”查看指令”python”的绝对路径,输入如下命令:
1 | which python |
返回结果:
/usr/bin/python
三、文档编辑
①、grep 命令(文本查找)
grep 命令用于查找文件里符合条件的字符串。
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
语法
1 | grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...] |
参数:
-a 或 --text : 不要忽略二进制的数据。
-A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c 或 --count : 计算符合样式的列数。
-C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
-f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F 或 --fixed-regexp : 将样式视为固定字符串的列表。
-G 或 --basic-regexp : 将样式视为普通的表示法来使用。
-h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
-i 或 --ignore-case : 忽略字符大小写的差别。
-l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
-L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
-n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
-o 或 --only-matching : 只显示匹配PATTERN 部分。
-q 或 --quiet或--silent : 不显示任何信息。
-r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
-s 或 --no-messages : 不显示错误信息。
-v 或 --revert-match : 显示不包含匹配文本的所有行。
-V 或 --version : 显示版本信息。
-w 或 --word-regexp : 只显示全字符合的列。
-x --line-regexp : 只显示全列符合的列。
-y : 此参数的效果和指定"-i"参数相同。
匹配文本参数
实例
1、在当前目录中,查找后缀有 txt字样的文件中包含zhihu 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令:
1 | grep zhihu *txt |
2、以递归的方式查找符合条件的文件。例如,查找指定目录/etc/pki/ 及其子目录(如果存在子目录的话)下所有文件中包含字符串”update”的文件,并打印出该字符串所在行的内容,使用的命令为:
1 | grep -r update /etc/pki/ |
3、反向查找。前面各个例子是查找并打印出符合条件的行,通过”-v”参数可以打印出不符合条件行的内容。
查找文件名中包含 zu的文件中不包含每天 的行,此时,使用的命令为:
1 | grep -v 每天 *zu* |
②、==wc (新增)==
Linux wc命令用于计算字数、行数。
利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为”-“,则wc指令会从标准输入设备读取数据。
语法
1 | wc [-clw][--help][--version][文件...] |
参数:
-
1 | c或--bytes或--chars 只显示Bytes数。 |
2 | -l或--lines 只显示行数。 |
3 | -w或--words 只显示字数。 |
4 | --help 在线帮助。 |
5 | --version 显示版本信息 |
实例
在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。使用的命令为:
1、使用cat查看文本内容:
1 | cat name.txt |
2、wc 统计文件信息
1 | wc name.txt |
结果截图:
其中,返回有四个参数:2代表有2行,7代表有7个单词数,44代表字节。name.txt就是文件名。
中文如果在一起,就被识别为一个单词。
更改后:
结果依然是7个单词。
好像只能识别空格,进行分开统计的。
==③、sort(排序,新增)==
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。
语法
1 | sort(选项)(参数) |
选项
1 | -b:忽略每行前面开始出的空格字符; |
2 | -c:检查文件是否已经按照顺序排序; |
3 | -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符; |
4 | -f:排序时,将小写字母视为大写字母; |
5 | -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符; |
6 | -m:将几个排序号的文件进行合并; |
7 | -M:将前面3个字母依照月份的缩写进行排序; |
8 | -n:依照数值的大小排序; |
9 | -o<输出文件>:将排序后的结果存入制定的文件; |
10 | -r:以相反的顺序来排序; |
11 | -t<分隔字符>:指定排序时所用的栏位分隔字符; |
12 | +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。 |
参数
1 | 文件:指定待排序的文件列表。 |
实例:
1 | a#10#1#1 |
2 | c#30#3#3 |
3 | d#40#4#4 |
4 | b#20#2#2 |
5 | e#50#5#5 |
6 | e#50#5#5 |
1、直接sort默认排序。
1 | $sort sort.txt |
2 | a#10#1#1 |
3 | b#20#2#2 |
4 | c#30#3#3 |
5 | d#40#4#4 |
6 | e#50#5#5 |
7 | e#50#5#5 |
2、忽略相同行使用-u选项或者uniq
1 | $sort -u sort.txt |
2 | a#10#1#1 |
3 | b#20#2#2 |
4 | c#30#3#3 |
5 | d#40#4#4 |
6 | e#50#5#5 |
1 | $uniq sort.txt |
2 | a#10#1#1 |
3 | c#30#3#3 |
4 | d#40#4#4 |
5 | b#20#2#2 |
6 | e#50#5#5 |
3、sort的-n、-r、-k、-t选项的使用:
将第二列(按#为分隔符)列按照数字从小到大顺序排列:
1 | $sort -nk 2 -t# sort.txt |
2 | a#10#1#1 |
3 | b#20#2#2 |
4 | c#30#3#3 |
5 | d#40#4#4 |
6 | e#50#5#5 |
7 | e#50#5#5 |
将第3列(按#为分隔符)列按照数字从小到大顺序排列:
1 | $sort -nk 3 -t# sort.txt |
2 | a#10#1#1 |
3 | b#20#2#2 |
4 | c#30#3#3 |
5 | d#40#4#4 |
6 | e#50#5#5 |
7 | e#50#5#5 |
新建sort2.txt:
1 | $cat sort2.txt |
2 | #10#3.5 |
3 | c#30#2.1 |
4 | d#40#7.8 |
5 | b#20#5.6 |
6 | e#50#1 |
7 | e#50#8 |
按最后一列从小到大排序:
1 | $sort -nk 3 -t# sort2.txt |
2 | e#50#1 |
3 | c#30#2.1 |
4 | #10#3.5 |
5 | b#20#5.6 |
6 | d#40#7.8 |
7 | e#50#8 |
按最后一列从大到小排序:
-n是按照数字大小排序,-r是以相反顺序,-k是指定需要爱排序的栏位,-t指定栏位分隔符为冒号
1 | $sort -nrk 3 -t# sort2.txt |
2 | e#50#8 |
3 | d#40#7.8 |
4 | b#20#5.6 |
5 | #10#3.5 |
6 | c#30#2.1 |
7 | e#50#1 |
四、压缩命令
1、tar命令
tar命令用于备份文件。
tar是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。
语法
1 | tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F <Script文件>][-K <文件>][-L <媒体容量>][-N <日期时间>][-T <范本文件>][-V <卷册名称>][-X <范本文件>][-<设备编号><存储密度>][--after-date=<日期时间>][--atime-preserve][--backuup=<备份方式>][--checkpoint][--concatenate][--confirmation][--delete][--exclude=<范本样式>][--force-local][--group=<群组名称>][--help][--ignore-failed-read][--new-volume-script=<Script文件>][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=<用户名称>][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=<区块数目>][--recursive-unlink][--remove-files][--rsh-command=<执行指令>][--same-owner][--suffix=<备份字尾字符串>][--totals][--use-compress-program=<执行指令>][--version][--volno-file=<编号文件>][文件或目录...] |
参数:
-A或--catenate 新增文件到已存在的备份文件。
-b<区块数目>或--blocking-factor=<区块数目> 设置每笔记录的区块数目,每个区块大小为12Bytes。
-B或--read-full-records 读取数据时重设区块大小。
-c或--create 建立新的备份文件。
-C<目的目录>或--directory=<目的目录> 切换到指定的目录。
-d或--diff或--compare 对比备份文件内和文件系统上的文件的差异。
-f<备份文件>或--file=<备份文件> 指定备份文件。
-F<Script文件>或--info-script=<Script文件> 每次更换磁带时,就执行指定的Script文件。
-g或--listed-incremental 处理GNU格式的大量备份。
-G或--incremental 处理旧的GNU格式的大量备份。
-h或--dereference 不建立符号连接,直接复制该连接所指向的原始文件。
-i或--ignore-zeros 忽略备份文件中的0 Byte区块,也就是EOF。
-k或--keep-old-files 解开备份文件时,不覆盖已有的文件。
-K<文件>或--starting-file=<文件> 从指定的文件开始还原。
-l或--one-file-system 复制的文件或目录存放的文件系统,必须与tar指令执行时所处的文件系统相同,否则不予复制。
-L<媒体容量>或-tape-length=<媒体容量> 设置存放每体的容量,单位以1024 Bytes计算。
-m或--modification-time 还原文件时,不变更文件的更改时间。
-M或--multi-volume 在建立,还原备份文件或列出其中的内容时,采用多卷册模式。
-N<日期格式>或--newer=<日期时间> 只将较指定日期更新的文件保存到备份文件里。
-o或--old-archive或--portability 将资料写入备份文件时使用V7格式。
-O或--stdout 把从备份文件里还原的文件输出到标准输出设备。
-p或--same-permissions 用原来的文件权限还原文件。
-P或--absolute-names 文件名使用绝对名称,不移除文件名称前的"/"号。
-r或--append 新增文件到已存在的备份文件的结尾部分。
-R或--block-number 列出每个信息在备份文件中的区块编号。
-s或--same-order 还原文件的顺序和备份文件内的存放顺序相同。
-S或--sparse 倘若一个文件内含大量的连续0字节,则将此文件存成稀疏文件。
-t或--list 列出备份文件的内容。
-T<范本文件>或--files-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件。
-u或--update 仅置换较备份文件内的文件更新的文件。
-U或--unlink-first 解开压缩文件还原文件之前,先解除文件的连接。
-v或--verbose 显示指令执行过程。
-V<卷册名称>或--label=<卷册名称> 建立使用指定的卷册名称的备份文件。
-w或--interactive 遭遇问题时先询问用户。
-W或--verify 写入备份文件后,确认文件正确无误。
-x或--extract或--get 从备份文件中还原文件。
-X<范本文件>或--exclude-from=<范本文件> 指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件。
-z或--gzip或--ungzip 通过gzip指令处理备份文件。
-Z或--compress或--uncompress 通过compress指令处理备份文件。
-<设备编号><存储密度> 设置备份用的外围设备编号及存放数据的密度。
--after-date=<日期时间> 此参数的效果和指定"-N"参数相同。
--atime-preserve 不变更文件的存取时间。
--backup=<备份方式>或--backup 移除文件前先进行备份。
--checkpoint 读取备份文件时列出目录名称。
--concatenate 此参数的效果和指定"-A"参数相同。
--confirmation 此参数的效果和指定"-w"参数相同。
--delete 从备份文件中删除指定的文件。
--exclude=<范本样式> 排除符合范本样式的文件。
--group=<群组名称> 把加入设备文件中的文件的所属群组设成指定的群组。
--help 在线帮助。
--ignore-failed-read 忽略数据读取错误,不中断程序的执行。
--new-volume-script=<Script文件> 此参数的效果和指定"-F"参数相同。
--newer-mtime 只保存更改过的文件。
--no-recursion 不做递归处理,也就是指定目录下的所有文件及子目录不予处理。
--null 从null设备读取文件名称。
--numeric-owner 以用户识别码及群组识别码取代用户名称和群组名称。
--owner=<用户名称> 把加入备份文件中的文件的拥有者设成指定的用户。
--posix 将数据写入备份文件时使用POSIX格式。
--preserve 此参数的效果和指定"-ps"参数相同。
--preserve-order 此参数的效果和指定"-A"参数相同。
--preserve-permissions 此参数的效果和指定"-p"参数相同。
--record-size=<区块数目> 此参数的效果和指定"-b"参数相同。
--recursive-unlink 解开压缩文件还原目录之前,先解除整个目录下所有文件的连接。
--remove-files 文件加入备份文件后,就将其删除。
--rsh-command=<执行指令> 设置要在远端主机上执行的指令,以取代rsh指令。
--same-owner 尝试以相同的文件拥有者还原文件。
--suffix=<备份字尾字符串> 移除文件前先行备份。
--totals 备份文件建立后,列出文件大小。
--use-compress-program=<执行指令> 通过指定的指令处理备份文件。
--version 显示版本信息。
--volno-file=<编号文件> 使用指定文件内的编号取代预设的卷册编号。
常用示例:
1、将文件全部打包成tar包:
1 | tar -cvf log.tar log2012.log 仅打包,不压缩! |
2 | tar -zcvf log.tar.gz log2012.log 打包后,以 gzip 压缩(常用) |
3 | tar -jcvf log.tar.bz2 log2012.log 打包后,以 bzip2 压缩 |
2、列出压缩文件内容
1 | $tar -ztvf test1.tar.gz |
2 | -rw-rw-r-- wb-zjf497303/users 14202 2019-09-30 09:32 zufang2.txt |
3、解压文件
1 | $tar -zxvf test1.tar.gz |
zufang2.txt
会自动解压文件到当前目录,会生成一个zufang2.txt文件
2、rar压缩解压缩
安装
Ubuntu安装
1 | sudo apt-get install rar unrar |
linux 安装:
或者可从http://www.rarsoft.com/download.htm下载 RAR for Linux 编译安装
# tar -xzpvf rarlinux-3.8.0.tar.gz
# cd rar
# make
这样就安装好了,安装之后就有了rar和unrar这两个程序,rar是压缩程序,unrar是解压程序。它们的参数选项很多,可用命令rar -help和unrar -help查看。
压缩:rar a [目标文件名].rar [原文件名/目录名]
解压:unrar e [原文件名].rar
实例:
将test.jpg和test.png压缩成一个rar包:rar a test.rar test.jpg test.png
将所有.jpg的文件压缩成一个rar包:rar a test.rar *.jpg
将文件夹test压缩成一个rar包:rar a test.rar test
将test.rar中的所有文件解压出来:unrar e test.rar
3、7z压缩解压缩
参数含义:
x 代表解压缩文件,并且是按原始目录树解压
-r 表示递归解压缩所有的子文件夹
-o 是指定解压到的目录,-o后是没有空格的,直接接目录。这一点需要注意。
a 代表添加文件/文件夹到压缩包
-t 是指定压缩类型,这里定为7z,可不指定,因为7za默认压缩类型就是7z。
-r 表示递归所有的子文件夹
压缩:7z a [目标文件名].7z [原文件名/目录名]
解压:7z x [原文件名].7z
实例:
解压到指定当前目录文件夹demo下
1 | 7za x chrysanthemum_test_images.7z -r -o./demo |
将filename.7z解压到当前目录:
1 | 7z x filename.7z -r -o./ |
将当前目录下的所有文件压缩成test.7z文件:
1 | 7z a -t7z -r test.7z ./* |
4、zip压缩解压缩
linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的参数选项很多,可用命令zip -help和unzip -help查看,这里只做简单介绍。
压缩: zip -r [目标文件名].zip [原文件/目录名]
解压: unzip [原文件名].zip
实例:
将test.jpg和test.png压缩成一个zip包:zip test.zip test.jpg test.png
将所有.jpg的文件压缩成一个zip包:zip test.zip *.jpg
将文件夹test压缩成一个zip包:zip -r test.zip test
将test.zip中的所有文件解压出来:unzip test.zip
将/home目录下面的mydata目录压缩为mydata.zip:
1 | zip -r mydata.zip mydata |
将/home目录下面的mydata.zip解压到mydatabak目录里面:
1 | unzip mydata.zip -d mydatabak |
5、7za
7z,全称7-Zip,是一款开源软件,目前公认压缩比例最大的压缩解压软件。
centos安装,
1 | yum -y install p7zip |
或者编译安装:
1 | wget http://nchc.dl.sourceforge.net/sourceforge/p7zip/p7zip_4.65_src_all.tar.bz2 |
2 | tar -xjvf p7zip_4.65_src_all.tar.bz2 |
3 | cd p7zip_4.65 |
4 | make |
5 | make install |
主要特征:
全新的LZMA算法,加大7z压缩比
支持格式:压缩:7z,XZ,BZIP2,GZIP,TAR,ZIP
解压:ARJ,CAB,CHM,CPIO,DEB,DMG,FAT,HFS,ISO,LZH,LZMA,MBR,MSI,NAIS,NTFS,RAR,RPM,UDF,VHD,WIM,XAR,Z
退出代码:
0 正常
1 告警,没有致命错误。例如某些文件正在被使用,没有被压缩
2 致命问题
7 命令行错误
8 没有足够内存
255 用户停止操作
使用:
然后说命令 最简单实用的压缩命令:
1 | 7za a /home/web.7z /home/wwwroot |
将/home/wwwroot 打包压缩为 web.7z 放在home目录里面
解压缩的话
1 | 7za e src_fil |
command操作命令:
a 添加到压缩文件
b 基准测试,测试7z当前性能
d 从压缩文件中删除
e 从压缩文件中解压缩,但不包含目录结构(即所有各级文件都解压到一个目录里)
l 列出压缩文件的内容
t 测试压缩文件
u 更新文件到压缩文件
x 从压缩文件中解压缩,包含目录结构
可见,最常用的指令是a, l和x.
1、压缩a.txt和b.txt到c.7z:
1 | 7za a c.7z a.txt b.txt |
(命令a后的第一个为目标压缩文档名,然后是文件列表)
2、压缩a.txt和b.txt到/home/www/c.7z:
1 | 7za a /home/www/c.7z a.txt b.txt |
(目录名包含空格,用引号)
3、列出c.7z的内容:
1 | 7za l c.7z |
4、解压缩c.7z到/home/www:
1 | 7za x c.7z -o/home/www |
(-o表示输出目录,其与目录路径之间没有空格)
这样解压包含下级目录名,但不会在/home/www下新建一个c文件夹,如果需要,就把输出目录设为/home/www/c,这样会自动创建文件夹c。
如果要生成zip压缩包,可以直接将目标压缩包名设为c.zip,则它会自动使用zip算法压缩。
五、Linux命令-用户、权限管理
1、查看当前用户:whoami
whoami该命令用户查看当前系统当前账号的用户名。可通过cat /etc/passwd查看系统用户信息。
由于系统管理员通常需要使用多种身份登录系统,例如通常使用普通用户登录系统,然后再以su命令切换到root身份对传统进行管理。这时候就可以使用whoami来查看当前用户的身份。
2、查看登录用户:who
语法
1 | who - [husfV] [user] |
参数说明:
-H 或 --heading:显示各栏位的标题信息列;
-i 或 -u 或 --idle:显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串;
-m:此参数的效果和指定"am i"字符串相同;
-q 或--count:只显示登入系统的帐号名称和总人数;
-s:此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题;
-w 或-T或--mesg或--message或--writable:显示用户的信息状态栏;
--help:在线帮助;
--version:显示版本信息。
实例
1、显示当前登录系统的用户
1 | $who |
2 | zhao pts/0 2019-09-29 14:04 (123.8.10.1) |
2、显示标题栏
1 | $who -H |
2 | NAME LINE TIME COMMENT |
3 | zhao pts/0 2019-09-29 14:04 (123.8.10.1) |
3、显示用户登录来源
1 | $who -l -H |
2 | NAME LINE TIME IDLE PID COMMENT |
3 | LOGIN ttyS0 2019-06-19 17:32 567 id=tyS0 |
4 | LOGIN tty1 2019-06-19 17:32 568 id=tty1 |
4、显示终端属性
1 | $who -T -H |
2 | NAME LINE TIME COMMENT |
3 | zhao + pts/0 2019-09-29 14:04 (123.8.10.1) |
5、只显示当前用户
1 | $who -m -H |
2 | NAME LINE TIME COMMENT |
3 | zhao pts/0 2019-09-29 14:04 (123.8.10.1) |
6、精简模式显示
1 | $who -q |
2 | zhao |
3 | # users=1 |
3、退出登录账户: exit
如果是图形界面,退出当前终端;
如果是使用ssh远程登录,退出登陆账户;
如果是切换后的登陆用户,退出则返回上一个登陆账号。
4、添加用户账号:useradd
在Unix/Linux中添加用户账号可以使用adduser或useradd命令,因为adduser命令是指向useradd命令的一个链接,因此,这两个命令的使用格式完全一样。
useradd命令的使用格式如下: useradd [参数] 新建用户账号
相关说明:
• Linux每个用户都要有一个主目录,主目录就是第一次登陆系统,用户的默认当前目录(/home/用户);
• 每一个用户必须有一个主目录,所以用useradd创建用户的时候,一定给用户指定一个主目录;
• 用户的主目录一般要放到根目录的home目录下,用户的主目录和用户名是相同的;
• 如果创建用户的时候,不指定组名,那么系统会自动创建一个和用户名一样的组名。
5、设置用户密码:passwd
在Unix/Linux中,超级用户可以使用passwd命令为普通用户设置或修改用户口令。用户也可以直接使用该命令来修改自己的口令,而无需在命令后面使用用户名。
6、删除用户:userdel
1 | userdel -r laowang |
7、切换用户:su
可以通过su命令切换用户,su后面可以加“-”。su和su –命令不同之处在于,su -切换到对应的用户时会将当前的工作目录自动转换到切换后的用户主目录。
注意:
如果是ubuntu平台,需要在命令前加“sudo”,如果在某些操作需要管理员才能操作,ubuntu无需切换到root用户即可操作,只需加“sudo”即可。sudo是ubuntu平台下允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,减少了root 用户的登陆和管理时间,提高了安全性。
Ubuntu下切换到root的简单命令:
8、查看有哪些用户组
1 | cat /etc/group |
9、添加、删除组账号:groupadd、groupdel
groupadd 新建组账号
groupdel 组账号
cat /etc/group 查看用户组
10、修改用户所在组:usermod
1 | usermod -g 用户组 用户名 |
11、查看用户在哪些组
1 | groups laowang |
12、为创建的普通用户添加sudo权限
新创建的用户,默认不能sudo,需要进行一下操作(sudo账户下使用命令)
1 | sudo usermod -a -G adm 用户名 |
2 | sudo usermod -a -G sudo 用户名 |
六、Linux命令-系统管理
1、ifconfig(显示网络设备)
ifconfig命令用于显示或设置网络设备(类似于window的ipconfig,我一般常用也就查个ip地址)。
ifconfig可设置网络设备的状态,或是显示目前的设置。
语法
1 | ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址] |
参数说明:
add<地址> 设置网络设备IPv6的IP地址。
del<地址> 删除网络设备IPv6的IP地址。
down 关闭指定的网络设备。
<hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。
io_addr<I/O地址> 设置网络设备的I/O地址。
irq<IRQ地址> 设置网络设备的IRQ。
media<网络媒介类型> 设置网络设备的媒介类型。
mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。
metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。
mtu<字节> 设置网络设备的MTU。
netmask<子网掩码> 设置网络设备的子网掩码。
tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。
up 启动指定的网络设备。
-broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。
-pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能。
-promisc 关闭或启动指定网络设备的promiscuous模式。
[IP地址] 指定网络设备的IP地址。
[网络设备] 指定网络设备的名称。
实例
显示网络设备信息
1 | $ifconfig |
2 | eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 |
3 | inet 11.158.133.27 netmask 255.255.255.0 broadcast 11.158.133.255 |
4 | ether 00:16:3e:04:fe:5b txqueuelen 1000 (Ethernet) |
5 | RX packets 187266929 bytes 210146326598 (195.7 GiB) |
6 | RX errors 0 dropped 0 overruns 0 frame 0 |
7 | TX packets 144879070 bytes 212301544384 (197.7 GiB) |
8 | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 |
9 | |
10 | lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 |
11 | inet 127.0.0.1 netmask 255.0.0.0 |
12 | loop txqueuelen 1 (Local Loopback) |
13 | RX packets 172446 bytes 13930479 (13.2 MiB) |
14 | RX errors 0 dropped 0 overruns 0 frame 0 |
15 | TX packets 172446 bytes 13930479 (13.2 MiB) |
16 | TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 |
2、ping命令用于检测主机。
执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
语法
1 | ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址] |
参数说明:
-d 使用Socket的SO_DEBUG功能。
-c<完成次数> 设置完成要求回应的次数。
-f 极限检测。
-i<间隔秒数> 指定收发信息的间隔时间。
-I<网络界面> 使用指定的网络接口送出数据包。
-l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
-n 只输出数值。
-p<范本样式> 设置填满数据包的范本样式。
-q 不显示指令执行过程,开头和结尾的相关信息除外。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-R 记录路由过程。
-s<数据包大小> 设置数据包的大小。
-t<存活数值> 设置存活数值TTL的大小。
-v 详细显示指令的执行过程。
实例
1、检测是否与主机连通
(需要手动结束ctrl + C)
ping w3c
1 | $ping www.w3cschool.cc |
2 | PING www.w3cschool.cc (203.107.43.165) 56(84) bytes of data. |
3 | 64 bytes from 203.107.43.165: icmp_seq=1 ttl=55 time=38.8 ms |
4 | 64 bytes from 203.107.43.165: icmp_seq=2 ttl=55 time=38.9 ms |
5 | 64 bytes from 203.107.43.165: icmp_seq=3 ttl=55 time=38.8 ms |
6 | 64 bytes from 203.107.43.165: icmp_seq=4 ttl=55 time=38.8 ms |
7 | 64 bytes from 203.107.43.165: icmp_seq=5 ttl=55 time=38.8 ms |
8 | 64 bytes from 203.107.43.165: icmp_seq=6 ttl=55 time=38.7 ms |
9 | 64 bytes from 203.107.43.165: icmp_seq=7 ttl=55 time=38.7 ms |
10 | ^C64 bytes from 203.107.43.165: icmp_seq=8 ttl=55 time=38.7 ms |
11 | |
12 | --- www.w3cschool.cc ping statistics --- |
13 | 8 packets transmitted, 8 received, 0% packet loss, time 7009ms |
14 | rtt min/avg/max/mdev = 38.725/38.814/38.901/0.247 ms |
ping baidu
1 | $ping baidu.com |
2 | PING baidu.com (220.181.38.148) 56(84) bytes of data. |
3 | 64 bytes from 220.181.38.148: icmp_seq=1 ttl=51 time=7.21 ms |
4 | 64 bytes from 220.181.38.148: icmp_seq=2 ttl=51 time=7.16 ms |
5 | 64 bytes from 220.181.38.148: icmp_seq=3 ttl=51 time=7.26 ms |
6 | 64 bytes from 220.181.38.148: icmp_seq=4 ttl=51 time=7.23 ms |
7 | ^C |
8 | --- baidu.com ping statistics --- |
9 | 4 packets transmitted, 4 received, 0% packet loss, time 3003ms |
10 | rtt min/avg/max/mdev = 7.168/7.219/7.268/0.092 ms |
2、ping IP 地址:
1 | $ping 8.8.8.8 |
2 | PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. |
3 | 64 bytes from 8.8.8.8: icmp_seq=1 ttl=48 time=45.0 ms |
4 | 64 bytes from 8.8.8.8: icmp_seq=3 ttl=48 time=45.1 ms |
5 | 64 bytes from 8.8.8.8: icmp_seq=4 ttl=48 time=45.1 ms |
6 | 64 bytes from 8.8.8.8: icmp_seq=5 ttl=48 time=45.1 ms |
7 | 64 bytes from 8.8.8.8: icmp_seq=6 ttl=48 time=44.8 ms |
8 | 64 bytes from 8.8.8.8: icmp_seq=7 ttl=48 time=45.0 ms |
9 | ^C |
10 | --- 8.8.8.8 ping statistics --- |
11 | 7 packets transmitted, 6 received, 14% packet loss, time 6046ms |
12 | rtt min/avg/max/mdev = 44.887/45.050/45.184/0.233 ms |
3、自动停止ping 4次,每次间隔0.5秒
ping4次后自动停止
1 | $ping -c 4 -i 0.5 8.8.8.8 |
2 | PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. |
3 | 64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=40.7 ms |
4 | 64 bytes from 8.8.8.8: icmp_seq=2 ttl=47 time=40.8 ms |
5 | 64 bytes from 8.8.8.8: icmp_seq=3 ttl=47 time=40.7 ms |
6 | 64 bytes from 8.8.8.8: icmp_seq=4 ttl=47 time=40.8 ms |
7 | |
8 | --- 8.8.8.8 ping statistics --- |
9 | 4 packets transmitted, 4 received, 0% packet loss, time 1504ms |
10 | rtt min/avg/max/mdev = 40.757/40.801/40.845/0.250 ms |
3、查看当前日历:cal
cal命令用于查看当前日历,-y显示整年日历:
Usage:
1 | cal [options] [[[day] month] year] |
Options:
-1, --one show only current month (default)-只显示当前月份(默认)
-3, --three show previous, current and next month--表示前一个月、当前的和下个月
-s, --sunday Sunday as first day of week--星期天是一周的第一天
-m, --monday Monday as first day of week--星期一是一周的第一天
-j, --julian output Julian dates
-y, --year show whole current year(显示当前一整年的日历)
-V, --version display version information and exit
-h, --help display this help text and exit
1、默认显示当前一整月的日历
2、显示上个月,这个月和下个月的日历:
4、显示或设置时间:date
设置时间格式(需要管理员权限):
1 | date -s 时间格式 |
CC为年前两位yy为年的后两位,前两位的mm为月,后两位的mm为分钟,dd为天,hh为小时,ss为秒。如: date 010203042016.55。
显示时间格式(date ‘+%y,%m,%d,%H,%M,%S’):
1 | $date '+%y/%m/%d' |
2 | 19/09/30 |
5、ps(用于显示当前进程 (process) 的状态)
进程是一个具有一定独立功能的程序,它是操作系统动态执行的基本单元。
ps命令可以查看进程的详细状况,常用选项(选项可以不加“-”)如下:
常用几个参数:
-A 列出所有的行程
-w 显示加宽可以显示较多的资讯
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
au(x) 输出格式 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
6、动态显示进程:top
top命令用来动态显示运行中的进程。
top命令能够在运行后,在指定的时间间隔更新显示信息。可以在使用top命令时加上-d 来指定显示信息更新的时间间隔。
在top命令执行后,可以按下按键得到对显示的结果进行排序:
下面这些按键是top进入之后按的,然后会有效果
7、终止进程:kill
kill命令指定进程号的进程,需要配合 ps 使用,ps找到程序的pid,然后使用kill pid。
使用格式:
1 | kill [-signal] pid |
信号值从0到15,其中9为绝对终止,可以处理一般信号无法终止的进程。
比如一个pid为9133 的,如果终止进程使用:
1 | kill 9133 |
9133 为应用程序所对应的进程号
有些进程不能直接杀死,这时候我们需要加一个参数“ -9 ”,“ -9 ” 代表强制结束:
1 | kill -9 pid |
8、关机重启:reboot、shutdown、init
命令参考如下图:
七、==Linux统计文件夹下的文件数目(新增)==
Linux下有三个命令:ls、grep、wc。通过这三个命令的组合可以统计目录下文件及文件夹的个数。
1、统计当前目录下文件的个数(不包括目录)
1 | ls -l | grep "^-" | wc -l |
2、统计当前目录下文件的个数(包括子目录)
1 | ls -lR| grep "^-" | wc -l |
3、查看某目录下文件夹(目录)的个数(包括子目录)
1 | ls -lR | grep "^d" | wc -l |
4、查看当前目录下含有多少个文件(目录+文件)
1 | ls | wc -l |
截图下效果:
4、命令解析:
1 | ls -l |
长列表输出该目录下文件信息(注意这里的文件是指目录、链接、设备文件等),每一行对应一个文件或目录,ls -lR是列出所有文件,包括子目录。
1 | grep "^-" |
过滤ls的输出信息,只保留一般文件,只保留目录是grep “^d”。
1 | wc -l |
统计输出信息的行数,统计结果就是输出信息的行数,一行信息对应一个文件,所以就是文件的个数。