< Linux >:入门与基本指令详解 (3)

目录

3.14、时间相关的指令

3.15、cal 指令

3.16、find 指令

3.17、grep 指令

3.18、zip/unzip 指令

3.19、tar 指令

3.20、bc 指令

3.21、uname -r 指令

3.22、重要的几个热键 [Tab] [ctrl]-c [ctrl]-d

3.23、关机

3.24、tac 指令 


3.14、时间相关的指令

date 指定格式显示时间: date +%Y:%m:%d     
date 用法: date [OPTION]... [+FORMAT]

1、

        在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中常用的标记列表如下、

%H :    小时(00..23)
%M :    分钟(00..59)
%S :     秒(00..61)
%X :     相当于 %H:%M:%S
%d :      日 (01..31)
%m :     月份 (01..12)
%Y :      完整年份 (0000..9999)
%F :      相当于 %Y-%m-%d
2、在设定时间方面、
date -s                  //设置当前时间,只有root权限才能设置,其他只能查看
date -s 20080523 //设置成20080523,这样会把具体时间设置成空00:00:00
date -s 01:01:01   //设置具体时间,不会对日期做更改
date -s "01:01:01 2008-05-23″    //这样可以设置全部时间
date -s "01:01:01 20080523″      //这样可以设置全部时间
date -s "2008-05-23 01:01:01″    //这样可以设置全部时间
date -s "20080523 01:01:01″      //这样可以设置全部时间
3、时间戳、
获取时间戳: date +%s
时间戳转为常规的 时间表达形式: date -d@1508749502  拓展见代码、
Unix 时间戳(英文为 Unix epoch, Unix time, POSIX time Unix timestamp )是从 1970 1 1 日( UTC/GMT 的午夜)开始所经过的秒数,不考虑闰秒、
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
code1  code2
[HJM@hjmlcc ~]$ date
Wed Oct  5 10:14:34 CST 2022  //使用date指令打印出来的时间不方便我们看、
[HJM@hjmlcc ~]$ date +%Y      //年份
2022
[HJM@hjmlcc ~]$ date +%Y-%m   // %m表示显式月份、
2022-10
[HJM@hjmlcc ~]$ date +%Y:%m   //其中,- : / 三者都可以作为年月日的分隔符、
2022:10
[HJM@hjmlcc ~]$ date +%Y/%m
2022/10
[HJM@hjmlcc ~]$ date +%Y-%m-%d  // %d表示日、
2022-10-05
[HJM@hjmlcc ~]$ date +%Y-%m-%d_%H   //用_来分割年月日和时分秒,用其他的符号也是可以的、
2022-10-05_10
[HJM@hjmlcc ~]$ date +%Y-%m-%d_%H:%M   //%H代表时,%M代表分,%S代表秒,三者的分隔符可以自己设定,没有规定必须使用哪一个符号,但常用的是 - : / 
2022-10-05_10:25
[HJM@hjmlcc ~]$ date +%Y-%m-%d_%H:%M:%S
2022-10-05_10:25:49
[HJM@hjmlcc ~]$ 
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
code1  code2
[HJM@hjmlcc ~]$ date +%s   //获得时间戳、
1664936996
[HJM@hjmlcc ~]$ date +%s
1664937006
[HJM@hjmlcc ~]$ date +%s
1664937010
[HJM@hjmlcc ~]$ 

//时间戳就是以美国时间1970年1月1日凌晨0点开始计时,到现在累计的秒数的总和就称为时间戳,
//普通表示时间的方式和时间戳都是通常用来作为日志的一部分,比较大的项目必须要有日志,Linux
//操作系统自身也有自己的日志内容,时间戳具有很强的唯一性,所以在做日志信息归档时,通常采用时间戳
//日志具有排查错误的能力,日志中有时间和输出信息,可以把日志简单理解为日记,我们目前所写的代码
//最后都应该被写入日志,写入文件中,方便后期的查询、
//Linux系统使用C语言获取时间戳:

[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
code1  code2  test.c
[HJM@hjmlcc ~]$ cat test.c
#include<stdio.h>
#include<time.h>
int main()
{
    printf("%lu\n",(unsigned long)time(NULL));  //%lu:输出十进制无符号long、
                                                //输出十进制无符号long long、
                                                //%u(默认),输出十进制无符号int、    
    return 0;
}
[HJM@hjmlcc ~]$ gcc test.c
[HJM@hjmlcc ~]$ ls
a.out  code1  code2  test.c
[HJM@hjmlcc ~]$ ./a.out
1664938474   //时间戳、
[HJM@hjmlcc ~]$ 


//从nano test.c页面里面,右击1新建会话,点击赋值SSH渠道,就可以再开一个窗口输入指令、
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
a.out  code1  code2  test.c
[HJM@hjmlcc ~]$ man 3 time
//输出以下内容:

TIME(3P)              POSIX Programmer's Manual                   TIME(3P)                  

PROLOG
       This  manual  page  is  part of the POSIX Programmer's Manual.  The Linux implementation of this interface may
       differ (consult the corresponding Linux manual page for details of Linux behavior), or the interface  may  not
       be implemented on Linux.

NAME
       time - get time

SYNOPSIS 
       #include <time.h>            //所需头文件、

       time_t time(time_t *tloc);   //c语言中的time库函数的接口,返回值就是时间戳、

DESCRIPTION
       The time() function shall return the value of time  in seconds since the Epoch.

       The tloc argument points to an area where the return value is also stored. If tloc is a null pointer, no value
       is stored.

RETURN VALUE
       Upon successful completion, time() shall return the value of time. Otherwise, (time_t)-1 shall be returned.

ERRORS
       No errors are defined.

       The following sections are informative.

 Manual page time(3p) line 1 (press h for help or q to quit)
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ date -d@0
Thu Jan  1 08:00:00 CST 1970    //常规表达方法,但是不方便我们理解、  
[HJM@hjmlcc ~]$ date +%Y-%m-%d_%H:%M:%S -d@0
1970-01-01_08:00:00  //常规表达方法,且方便我们理解、
[HJM@hjmlcc ~]$ 
//这就是将时间戳转换为常规的时间表达形式(包括方便和不方便我们理解的两种结果)、

//date -d@0,就是把时间戳0转换为常规的时间表达形式,出来的结果是1970-1-1_08:00:00,这是美国时间
//1970-1-1_00:00:00对应的中国时间,两者具有时间差、

3.15、cal 指令

        cal 命令可以用来显示公历(阳历)日历,公历是现在国际通用的历法,又称格列历,通称阳历," 阳历" 又名" 太阳历",系以地球绕行太阳一周为一年,为西方各国所通用,故又名" 西历"、

命令格式: cal [参数][月份][年份]

功能:        
        用于查看日历等时间信息,如只有一个参数,则表示年份(1-9999) ,如有两个参数,则表示月份和年份、
常用选项:
-3  显示系统前一个月,当前月,下一个月的月历、
-j   显示在当年中的第几天(一年日期按天算,从1月1号算起,默认显示当前月在一年中的天数)
-y  显示当前年份的日历、

举例: 

cal –y 2018

//其中,cal –y 2018指令和cal 2018指令的效果是一样的、
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
a.out  code1  code2  test.c
[HJM@hjmlcc ~]$ cal   //获得日历、
    October 2022    
Su Mo Tu We Th Fr Sa
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
[HJM@hjmlcc ~]$ 
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
a.out  code1  code2  test.c
[HJM@hjmlcc ~]$ cal 2022             //获取2022年一整年的日历、
                               2022                               

       January               February                 March       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                   1          1  2  3  4  5          1  2  3  4  5
 2  3  4  5  6  7  8    6  7  8  9 10 11 12    6  7  8  9 10 11 12
 9 10 11 12 13 14 15   13 14 15 16 17 18 19   13 14 15 16 17 18 19
16 17 18 19 20 21 22   20 21 22 23 24 25 26   20 21 22 23 24 25 26
23 24 25 26 27 28 29   27 28                  27 28 29 30 31
30 31
        April                   May                   June        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2    1  2  3  4  5  6  7             1  2  3  4
 3  4  5  6  7  8  9    8  9 10 11 12 13 14    5  6  7  8  9 10 11
10 11 12 13 14 15 16   15 16 17 18 19 20 21   12 13 14 15 16 17 18
17 18 19 20 21 22 23   22 23 24 25 26 27 28   19 20 21 22 23 24 25
24 25 26 27 28 29 30   29 30 31               26 27 28 29 30

        July                  August                September     
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2       1  2  3  4  5  6                1  2  3
 3  4  5  6  7  8  9    7  8  9 10 11 12 13    4  5  6  7  8  9 10
10 11 12 13 14 15 16   14 15 16 17 18 19 20   11 12 13 14 15 16 17
17 18 19 20 21 22 23   21 22 23 24 25 26 27   18 19 20 21 22 23 24
24 25 26 27 28 29 30   28 29 30 31            25 26 27 28 29 30
31
       October               November               December      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                   1          1  2  3  4  5                1  2  3
 2  3  4  5  6  7  8    6  7  8  9 10 11 12    4  5  6  7  8  9 10
 9 10 11 12 13 14 15   13 14 15 16 17 18 19   11 12 13 14 15 16 17
16 17 18 19 20 21 22   20 21 22 23 24 25 26   18 19 20 21 22 23 24
23 24 25 26 27 28 29   27 28 29 30            25 26 27 28 29 30 31
30 31

[HJM@hjmlcc ~]$ 
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ cal -3   //获取当年当月和当年当月的前一个月和后一个月的日历,只能-3,要注意、
   September 2022         October 2022          November 2022   
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
             1  2  3                     1         1  2  3  4  5
 4  5  6  7  8  9 10   2  3  4  5  6  7  8   6  7  8  9 10 11 12
11 12 13 14 15 16 17   9 10 11 12 13 14 15  13 14 15 16 17 18 19
18 19 20 21 22 23 24  16 17 18 19 20 21 22  20 21 22 23 24 25 26
25 26 27 28 29 30     23 24 25 26 27 28 29  27 28 29 30         
                      30 31                                     
[HJM@hjmlcc ~]$ 
//Linux系统中命令的时间和日历的意义:
//1、有一些语言,基于Linux系统中的命令组合起来的语言,比如Shell脚本这样的语言,实际上要的是系统的
//各种命令,这些脚本语言可能需要日志,所以这些脚本语言也会需要时间和日历、
//2、有些情况下会需要使用到、

3.16、find 指令

1、
        Linux系统下find命令在目录结构中搜索文件,并执行指定的操作、
2、
        Linux系统下find命令提供了相当多的查找条件,功能很强大,由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下、
3、
        即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限,在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统)、
语法: find pathname -options
功能: 用于在文件树中查找文件,并作出相应的处理(可能访问磁盘)、
常用选项:
-name   按照文件名查找文件、
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
a.out  code1  code2  test.c
[HJM@hjmlcc ~]$ find /usr/include/ -name stdio.h  //Linux系统下一个查找文件的指令、
/usr/include/bits/stdio.h
/usr/include/c++/4.8.2/tr1/stdio.h
/usr/include/stdio.h
[HJM@hjmlcc ~]$ nano /usr/include/stdio.h  //打开就可以了、
[HJM@hjmlcc ~]$


//Linux系统下的find指令:在指定目录下查找指定名称的问价、

[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
100  a.out  code1  code2  test.c
[HJM@hjmlcc ~]$ find ~/100 -name test.c  //寻找家目录下的目录100中的所有的test.c的普通文件
                                         //其中,家目录就是/home/HJM、
/home/HJM/100/test.c
[HJM@hjmlcc ~]$ 

//上述指令的效果等价于:find /home/HJM/100 -name test.c指令、


3.17、grep 指令

https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html  //grep指令参考文档、
语法: grep [选项] 搜寻字符串文件、
功能: 在文件中搜索字符串,将找到的行打印出来、
常用选项:
-i : 忽略大小写的不同,所以大小写视为相同、
-n :顺便输出行号、
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行、

行文本过滤工具,即,按行进行过滤,以行整体为单位、

[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
code1  code2  test.c
[HJM@hjmlcc ~]$ cat test.c
AAAAA
BBBBB
CCCCC
fjaifjaf1234
f1234kmaofm
oaofa1k234kmv
1234jff1234fk
[HJM@hjmlcc ~]$ grep '1234' test.c  //把普通文件test.c中,凡是含有'1234'的行都显示出来、
fjaifjaf1234
f1234kmaofm
1234jff1234fk
[HJM@hjmlcc ~]$ grep 'AAA' test.c  //此时只把'AAAAA'的前三个'AAA'标红,后两个'AA'不能构成'AAA',故不标红,若执行指令nano test.c,把其中的'AAAAA'改成'AAAAAA',则这6个A都会标红、
AAAAA
[HJM@hjmlcc ~]$ 
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
code1  code2  hello.txt  test.c
[HJM@hjmlcc ~]$ cat hello.txt
hello 104
hello 104
hello 刘晨晨
hello 惠俊明
bit hello 
c++ C
c
C++
Java
Python
python
Shell
shell
Go
go
g0
[HJM@hjmlcc ~]$ grep 'c++' hello.txt  //指令grep在执行时会明确大小写、
c++ C
[HJM@hjmlcc ~]$ grep -i 'c++' hello.txt   //如果在执行grep指令时加上 -i,则会忽略大小写, -i                                
                                          //就是ignore的意思、
c++ C
C++
[HJM@hjmlcc ~]$ grep -v 'c++' hello.txt   //打印出普通文件hello.txt中,除了包含'c++'的行之外     
                                      //的所有行,区分大小写、
hello 104
hello 104
hello 刘晨晨
hello 惠俊明
bit hello 
c
C++
Java
Python
python
Shell
shell
Go
go
g0
[HJM@hjmlcc ~]$ grep -vi 'c++' hello.txt  //打印出普通文件hello.txt中,除了
                           //包含'c++'和'C++'的行之外的所有行,不区分大小写、
hello 104
hello 104
hello 刘晨晨
hello 惠俊明
bit hello 
c
Java
Python
python
Shell
shell
Go
go
g0
[HJM@hjmlcc ~]$ grep -vin 'c++' hello.txt  //在上述的基础上,给打印出来的每一行带上序号、
1:hello 104
2:hello 104
3:hello 刘晨晨
4:hello 惠俊明
5:bit hello 
7:c
9:Java
10:Python
11:python
12:Shell
13:shell
14:Go
15:go
16:g0
[HJM@hjmlcc ~]$ 





5.26 Linux 作业知识拓展:


1、

uname -r 查看Linux内核版本信息、

vmstat     报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息、

sar           主要帮助我们掌握系统资源的使用情况,特别是内存和CPU的使用情况、

stat          用于显示文件的状态信息、

2、

linux 2.6.* 内核默认支持的文件系统有:ext3,ext2,ext4,xfs

    ext3全称Linux extended file system, extfs,即Linux扩展文件系统,ext2为第二代

XFS/xfs 一种高性能的日志文件系统,2000年5月,Silicon Graphics以GNU通用公共许可证发布这套系统的源代码,之后被移植到Linux 内核上,XFS/xfs 特别擅长处理大文件,同时提供平滑的数据传输,UFS/ufs是UNIX文件系统的简称,它来源于4.3Tahoe发行版中提供的BSD Fat Fast File System(FFS)系统,属于FFS的演化版本、

3、

Linux查看cpu占用的命令是 top

top 查看cpu资源使用状态、

netstat 查看网络连接状态、

free 查看内存资源状态、

df 查看磁盘分区资源状态、

4、

在Linux系统中, 为找到文件try_grep含有以a字母为行开头的内容, 可以使用命令?

grep -E ^a try_grep

grep指令中,-E选项可以用来扩展选项为正则表达式;

$表示匹配文件末尾,字符需要在$之前表示以字符结尾  a$表示以a结尾、

^表示匹配文件起始,字符需要在^之后表示以字符起始  ^a表示以a起始、

5、

在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的指令是: -p

-m 在创建目录的同时设置权限、

-p  在创建多层级目录的时候若上级目录不存在则先创建上级目录、

6、

批量删除当前目录下后缀名为 .c 的文件,如a.c、b.c,则使用:

rm *.c

find . -name "*.c" -maxdepth 1 | xargs rm

rm *.c   *是通配符,表示匹配任意字符任意次、

find . -name "*.c" -maxdepth 1 | xargs rm

find . -name "*.c" -maxdepth 1 找到当前目录下.*结尾的文件,目录深度为1

    xargs是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,用于很多不支持 | 管道来传递参数的命令,相当于将前边命令的执行结果,也就是查找到的文件名,传递给后边的rm指令进行删除、

     find . -name "*.c" | xargs rm 没有进行深度控制,删除的不仅是当前目录下的文件,会将子目录下的文件也删除、

7、

cat     打印文件所有内容到终端显示、

more 分页显示文件内容,但是通常向上翻页不好使、

less   分页显示文件内容,可以灵活上下移动光标和翻页、

menu 没有这个指令(至少centos7上默认没有这个命令)、


3.18、zip/unzip 指令

语法: zip 压缩文件.zip 目录或文件、

功能: 将目录或文件压缩成zip格式、
常用选项:
-r:递归处理,将指定目录及其以下的所有普通文件和子目录一并处理、
    在Linux系统中安装软件有很多方式,比如源码安装,但是目前我们用不到,在后期做项目时需要安装第三方库时会使用到,需要我们自己编译代码,就目前而言,我们通常是先下载安装包,然后再进行解压、
    zip和unzip指令将打包压缩和解包解压融合在了一块,没有分开、
[[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ ls
[HJM@hjmlcc LCC]$ mkdir tar_package
[HJM@hjmlcc LCC]$ ls
tar_package
[HJM@hjmlcc LCC]$ cd tar_package
[HJM@hjmlcc tar_package]$ pwd
/home/HJM/LCC/tar_package
[HJM@hjmlcc tar_package]$ ls
[HJM@hjmlcc tar_package]$ touch file1 file2 file3 file4 file5
[HJM@hjmlcc tar_package]$ ls
file1  file2  file3  file4  file5
[HJM@hjmlcc tar_package]$ echo "hello,lcc" > file3
[HJM@hjmlcc tar_package]$ ls
file1  file2  file3  file4  file5
[HJM@hjmlcc tar_package]$ cat file3
hello,lcc
[HJM@hjmlcc tar_package]$ ll
total 4
-rw-rw-r-- 1 HJM HJM  0 Oct  6 16:53 file1
-rw-rw-r-- 1 HJM HJM  0 Oct  6 16:53 file2
-rw-rw-r-- 1 HJM HJM 10 Oct  6 16:53 file3
-rw-rw-r-- 1 HJM HJM  0 Oct  6 16:53 file4
-rw-rw-r-- 1 HJM HJM  0 Oct  6 16:53 file5
[HJM@hjmlcc tar_package]$ cd ..
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ ls
tar_package
[HJM@hjmlcc LCC]$ tree tar_package
tar_package
|-- file1
|-- file2
|-- file3
|-- file4
`-- file5

0 directories, 5 files
[HJM@hjmlcc LCC]$ ll
total 4
drwxrwxr-x 2 HJM HJM 4096 Oct  6 16:53 tar_package
[HJM@hjmlcc LCC]$ zip test.zip tar_package  //打包压缩,将目录tar_package整体打包压缩,最后形成压缩包,名为:test.zip,要注意,上述指令只是将目录tar_package进行了打包,并没有将该目录下的
//所有内容进行打包压缩、
  adding: tar_package/ (stored 0%)
[HJM@hjmlcc LCC]$ ls
tar_package  test.zip    //压缩包test.zip也属于普通文件、
[HJM@hjmlcc LCC]$ mv tar_package ..  //把目录tar_package剪切到上一级目录下、
[HJM@hjmlcc LCC]$ ls
test.zip
[HJM@hjmlcc LCC]$ unzip test.zip   //解包解压、
Archive:  test.zip
   creating: tar_package/
[HJM@hjmlcc LCC]$ ls
tar_package  test.zip
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ tree tar_package
tar_package

0 directories, 0 files
[HJM@hjmlcc LCC]$ cd tar_package
[HJM@hjmlcc tar_package]$ ls   //发现该目录下是空的、
[HJM@hjmlcc tar_package]$ 
/home/HJM/LCC
[HJM@hjmlcc LCC]$ ls
tar_package  test.zip
[HJM@hjmlcc LCC]$ rm -r tar_package
[HJM@hjmlcc LCC]$ rm test.zip 
[HJM@hjmlcc LCC]$ ls
[HJM@hjmlcc LCC]$ cd ..
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
LCC  tar_package
[HJM@hjmlcc ~]$ mv tar_package ./LCC
[HJM@hjmlcc ~]$ ls
LCC
[HJM@hjmlcc ~]$ cd LCC
[HJM@hjmlcc LCC]$ ls
tar_package
[HJM@hjmlcc LCC]$ tree tar_package
tar_package
|-- file1
|-- file2
|-- file3
|-- file4
`-- file5

0 directories, 5 files
[HJM@hjmlcc LCC]$ zip -r test.zip tar_package  // -r为递归操作,将目录tar_package及其其中的所有内
//容,全部打包压缩,最后形成名为:test.zip的压缩包,
//除了上述方法,还可以使用指令:zip test.zip tar_package/* ,即把目录 tar_package 及其其中的所有内容全部打包压缩,最后形成名为:test.zip的压缩包、
  adding: tar_package/ (stored 0%)
  adding: tar_package/file2 (stored 0%)
  adding: tar_package/file3 (stored 0%)
  adding: tar_package/file5 (stored 0%)
  adding: tar_package/file1 (stored 0%)
  adding: tar_package/file4 (stored 0%)
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ ls
tar_package  test.zip
[HJM@hjmlcc LCC]$ ll
total 8
drwxrwxr-x 2 HJM HJM 4096 Oct  6 16:53 tar_package
-rw-rw-r-- 1 HJM HJM  994 Oct  6 17:04 test.zip
[HJM@hjmlcc LCC]$ mv tar_package ..
[HJM@hjmlcc LCC]$ ls
test.zip
[HJM@hjmlcc LCC]$ unzip test.zip  //上一段代码中的指令和此处的指令默认都是在当前目录下进行解包解压,包括该解包解压指令,几乎所有的解包解压指令均默认是在当前目录(路径)下进行解压解包、
//可以使用指令:unzip test.zip -d /home/HJM ,此时便在指定的路径下进行解包解压操作、
Archive:  test.zip
   creating: tar_package/
 extracting: tar_package/file2       
 extracting: tar_package/file3       
 extracting: tar_package/file5       
 extracting: tar_package/file1       
 extracting: tar_package/file4       
[HJM@hjmlcc LCC]$ ls
tar_package  test.zip
[HJM@hjmlcc LCC]$ tree tar_package
tar_package
|-- file1
|-- file2
|-- file3
|-- file4
`-- file5

0 directories, 5 files
[HJM@hjmlcc LCC]$ cd tar
-bash: cd: tar: No such file or directory
[HJM@hjmlcc LCC]$ cd tar_package
[HJM@hjmlcc tar_package]$ ls
file1  file2  file3  file4  file5
[HJM@hjmlcc tar_package]$ cat file3
hello,lcc
[HJM@hjmlcc tar_package]$ 
[HJM@hjmlcc tar_package]$ pwd
/home/HJM/LCC/tar_package
[HJM@hjmlcc tar_package]$ ls
file1  file2  file3  file4  file5
[HJM@hjmlcc tar_package]$ cd ..
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ ls
tar_package  test.zip
[HJM@hjmlcc LCC]$ rm -rf *    //等价于: rm -rf ./*    ,*是通配符,与所有的内容均能匹配、
[HJM@hjmlcc LCC]$ ls
[HJM@hjmlcc LCC]$ 

打包压缩的用途:

1、节约空间

2、所有的软件写好之后,并不是只有一个文件,将多个文件打包压缩成一个压缩包,方便网络传输和各种部署,避免在网络传输和各种部署中出现缺少文件,文件丢失的现象、

    所有的互联网公司的后台都使用的是Linux操作系统,开发人员开发的所有的软件都会部署在Linux系统上的,所以所有的软件在开发好之后都要进行打包压缩,上传到Linux系统上进行安装部署,然后再在Linux系统上进行解包解压,然后进行安装即可、

    若当前的Linux操作系统没有安装zip指令,则可以先切换到root用户,执行指令:yum install -y zip ,此时root用户以及除root用户之外的用户均可以使用zip指令,再者可以执行指令:sudo yum install -y zip ,具体的等到权限部分再进行阐述、

    tgz和zip只是压缩格式不同,这两个压缩文件里面包含的内容是一样的,只是压缩格式不一样,tar.gz格式的文件比zip文件要小不少,tar.gz压缩格式用于unix的操作系统,而zip用于Windows的操作系统、


3.19、tar 指令

语法:tar [-cxtzjvf] 文件与目录 ....

参数:
-c : 建立一个压缩文件的参数指令(create 的意思);
-x : 解开一个压缩文件的参数指令!
-t :  查看 tarfifile 里面的文件!
-z : 是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :  是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v : 压缩的过程中显示文件!这个常用,但不建议用在背景执行过程!
-f :  使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
-C : 解压到指定目录、
案例:
范例一:将整个 /etc 目录下的文件全部打包成为 `/tmp/etc.tar`
[root@linux ~]# tar -cvf /tmp/etc.tar /etc<==仅打包,不压缩!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
特别注意,在参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。
如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
如果加 j 参数,则以 .tar.bz2 来作为附档名啊~
上述指令在执行的时候,会显示一个警告讯息:
『`tar: Removing leading `/" from member names`』那是关於绝对路径的特殊设定。
范例二:查阅上述 /tmp/etc.tar.gz 文件内有哪些文件?
[root@linux ~]# tar -ztvf /tmp/etc.tar.gz
由於我们使用 gzip 压缩,所以要查阅该 tar file 内的文件时,就得要加上 z 这个参数了!这很重要的!
范例三:将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下
[root@linux ~]# cd /usr/local/src
[root@linux src]# tar -zxvf /tmp/etc.tar.gz
在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,
我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,
则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc
则会发现,该目录下的文件属性与 /etc/ 可能会有所不同喔!
范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已[root@linux ~]# cd /tmp
[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个文件,
就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!
范例五:将 /etc/ 内的所有文件备份下来,并且保存其权限!
[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc
这个 -p 的属性是很重要的,尤其是当您要保留原本文件的属性时!
范例六:在 /home 当中,比 2005/06/01 新的文件才备份
[root@linux ~]# tar -N "2005/06/01" -zcvf home.tar.gz /home
范例七:我要备份 /home, /etc ,但不要 /home/dmtsai
[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生文件!
[root@linux ~]# cd /tmp
[root@linux tmp]# tar -cvf - /etc | tar -xvf -
这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!
要注意的地方在於输出档变成 - 而输入档也变成 - ,又有一个 | 存在~
这分别代表 standard output, standard input 与管线命令啦!

    在tar指令中,打包和压缩与解包和解压是可以分开的,但是就目前而言,我们还是默认将他们看作一个整体,不分开、

[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ ls
hjm
[HJM@hjmlcc LCC]$ tar czf test.tgz hjm  //打包压缩操作,test.tgz(tar.gz,其中:tar表示打包,gz代表压缩,简写为:tgz),c表示创建一个压缩包,z表示压缩,f表示接下来跟上压缩包名称、
[HJM@hjmlcc LCC]$ ls
hjm  test.tgz
[HJM@hjmlcc LCC]$ rm -r hjm
[HJM@hjmlcc LCC]$ ls
test.tgz
[HJM@hjmlcc LCC]$ tar xzf test.tgz  //解压解包操作,x代表解包,z表示解压、
//默认在当前路径下进行解包解压操作,若想在指定的路径下进行解包解压操作,可以使用指令:
//tar xzf test.tgz -C /home/HJM
[HJM@hjmlcc LCC]$ ls
hjm  test.tgz
[HJM@hjmlcc LCC]$ cd hjm
[HJM@hjmlcc hjm]$ ls
file1  file2
[HJM@hjmlcc hjm]$ cat file1
[HJM@hjmlcc hjm]$ cat file2
hello
[HJM@hjmlcc hjm]$ 
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ ls
hjm  test.tgz
[HJM@hjmlcc LCC]$ rm -rf hjm  //等价于:rm hjm -rf ,效果是一样的、
[HJM@hjmlcc LCC]$ ls
test.tgz
[HJM@hjmlcc LCC]$ tar j test.tgz  
//注意:在tar指令中,如果是组合选项的话就不需要带-,当然带上-也是可以的,但如果是单个选项的话,则必须带上- ,否则会报错、
//也有部分人的Linux系统下,不管是组合选项还是单个选项,带不带-都是可以的,但我们最好按照上述总结的
//来记住即可,除此之外,也有的选项是不能够进行单独使用的,就比如这里的选项j和t,那么此时带不带-都是
//不行的,都会报错、 
tar: You must specify one of the `-Acdtrux' or `--test-label'  options
Try `tar --help' or `tar --usage' for more information.
[HJM@hjmlcc LCC]$ tar -j test.tgz
tar: You must specify one of the `-Acdtrux' or `--test-label'  options
Try `tar --help' or `tar --usage' for more information.
[HJM@hjmlcc LCC]$ tar -t test.tgz
^C  //没有反应,ctrl+c退出、
[HJM@hjmlcc LCC]$ tar t test.tgz
^C  //没有反应,ctrl+c退出、
[HJM@hjmlcc LCC]$ 
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ ls
hjm
[HJM@hjmlcc LCC]$ tar zcvf test.tgz hjm  //此命令会显示出打包压缩的流程,此时zcvf带不带-都是可以的、
hjm/
hjm/file2
hjm/file1
[HJM@hjmlcc LCC]$ ls
hjm  test.tgz
[HJM@hjmlcc LCC]$ mv hjm ..
[HJM@hjmlcc LCC]$ ls
test.tgz
[HJM@hjmlcc LCC]$ tar xzvf test.tgz  //解包解压过程,此时xzvf带不带-都是可以的,此时会显示出解包
                                     //解压的流程、
hjm/
hjm/file2
hjm/file1
[HJM@hjmlcc LCC]$ ls
hjm  test.tgz
[HJM@hjmlcc LCC]$ cd hjm
[HJM@hjmlcc hjm]$ ls
file1  file2
[HJM@hjmlcc hjm]$ cat file2
hello
[HJM@hjmlcc hjm]$ 


//注意:
//1、当使用tar指令对某一个目录进行打包压缩时,它会把该目录及其该目录之下的所有内容均进行打包
//压缩、

//2、对于组合选项,所有的指令都没有要求组合选项的顺序,即,任何顺序都是可以的、

截止目前,我们并没有讲完Linux系统下所有种类的压缩包、

1、Linux系统下是否几乎支持所有种类的压缩包吗?

答:是的,以指令的方式支持,大部分都会支持,只有个别可能不会支持,比如一些种类的压缩包压根就不需要在Linux系统下进行解包解压操作,我们质量所指的支持主要是指在Linux系统下进行的解包解压操作,因为所有不同平台上开发的软件,最后都要打包压缩,然后部署到Linxu系统上,所以Linux系统必须要支持对这些种类的压缩包进行解包解压操作,即:Linux系统面对的平台非常多,所以就会从很多平台上上传压缩包到Linux系统,而不同的平台有自己特定种类的压缩包,所以这就要求Linux系统中要支持很多种类的压缩包的解包解压操作,比如,好压就是Windows系统下的打包压缩工具、

2、遇到不懂的压缩包种类,怎么办?

答:我们只学习了zip,unzip和tar指令,已经够了,基本上所有种类的压缩包的操作方式都可以使用这三个指令进行操作,遇到不会的,可以百度:centos .xxx后缀如何打包压缩和解包解压即可、


3.20、bc 指令

bc 命令可以很方便的进行浮点运算、
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ ls
hjm  test.tgz
[HJM@hjmlcc LCC]$ bc   //Linux操作系统下的计算器、
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1+1
2
2+2
4
3*8
24
4-7
-3
^C
(interrupt) Exiting bc.
[HJM@hjmlcc LCC]$ echo "1+2+3" | bc     //以管道的形式交给bc指令、
6
[HJM@hjmlcc LCC]$ 


3.21、uname -r 指令

语法: uname [选项] 
功能: uname用来获取电脑和操作系统的相关信息、
补充说明: uname可显示linux主机所用的操作系统的版本、硬件的名称等基本信息、
常用选项:
    -a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称、
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ uname -a  //查看当前Linux操作系统的体系结构信息,比如:多少位的,操作系统内核
//的版本,CPU架构是什么样的等等、
Linux hjmlcc 3.10.0-1160.62.1.el7.x86_64 #1 SMP Tue Apr 5 16:57:59 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
[HJM@hjmlcc LCC]$ 

[HJM@hjmlcc LCC]$ uname -r  //查看当前Linux操作系统的内核版本、
3.10.0-1160.62.1.el7.x86_64   //Linux操作系统的内核版本分为两类:商业化发行版和技术角度的内核发行版,安卓的底层也是Linux操作系统,x86是英特尔的架构,x86_64代表64位的计算机,x86_32代表32位的计算机,x64指的就是x86_64,而如果只是x86一般指的就是x86_32、
[HJM@hjmlcc LCC]$ 

//我们的Linux操作系统是64位的,指针所占内存空间大小为8byte、

3.22、重要的几个热键 [Tab] [ctrl]-c [ctrl]-d

[Tab]按键:   具有『命令自动补全』和『档案补齐』的功能、
[Ctrl]-c按键: 让当前的程序『停掉』,当程序失控时,ctrl+c 可以无脑退出,一次不行,多点几次、
[Ctrl]-d按键: 通常代表着:『键盘输入结束(End Of File, EOF 戒 End OfInput)』的意思;另外,他也可以用来取代exit、
热键指的是组合键,经常被使用、
//命令自动补齐、
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ fin  //此时直接Tab,则系统就会自动补齐命令到find,也有可能会出现档案补齐,一次不行,就快速连续点两次Tab、


//档案补齐、
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ fi  //一次或连续快速两次Tab、
fi                     find                   findmnt                fipshmac               firewall-offline-cmd
file                   find2perl              find-repos-of-install  firewall-cmd           fixfiles
filefrag               findfs                 fipscheck              firewalld              
[HJM@hjmlcc LCC]$ fi
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC   //ctrl+r: 历史指令搜索,再输入while,就可以拿到之前输入的历史指令,并选取包含
//while的指令、
(reverse-i-search)`while': cnt=1; while [ $cnt -le 10000 ]; do echo "hello lcc $cnt"; let cnt++; done > file.txt    //找到之后点回车就可以调出来对应的指令,在搜索状态结束前下可以ctrl+c退出搜索、
 
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC
[HJM@hjmlcc LCC]$ ls
a.out  clear  file.txt  hjm  lcc.c  test.tgz
[HJM@hjmlcc LCC]$   //在正常的等待输入指令的地方可以点上下键查找之前和之后所已经输入的指令,不需要任何热键、
[HJM@hjmlcc LCC]$ clear
[HJM@hjmlcc LCC]$ pwd
/home/HJM/LCC 
[HJM@hjmlcc LCC]$ logout  //此处 ctrl+d 可快速退出用户(Xshell),连续两次则可直接退出Xshell、

Connection closed.

Disconnected from remote host(新建会话) at 19:50:06.

Type `help' to learn how to use Xshell prompt.
[C:\~]$ 
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ ls
hjm  LCC
[HJM@hjmlcc ~]$ clear
[HJM@hjmlcc ~]$ pwd
/home/HJM
[HJM@hjmlcc ~]$ history   //查看历史指令,退出再重启Xshell,历史命令是还会存在的,shutdown关机再重启云服务器,历史指令一般也是会存在的,环境变量,目前为止,系统规定历史记录最多为3000条、
    7  2022-10-01 10:26:17 cat mytest.c
    8  2022-10-01 10:26:22 gcc mytest.c
    9  2022-10-01 10:26:25 ls
   10  2022-10-01 10:26:32 ./a.out
   11  2022-10-01 10:27:36 nano mytest.c
   12  2022-10-01 10:27:53 cat mytest.c
   13  2022-10-01 10:28:19 gcc mytets.c
   14  2022-10-01 10:28:30 gcc mytest.c
   15  2022-10-01 10:28:31 ls
   16  2022-10-01 10:28:40 ./a.out
   17  2022-10-01 10:29:44 nano mytest.c
...
...
...
 3002  2022-10-06 19:51:51 pwd
 3003  2022-10-06 19:51:52 ls
 3004  2022-10-06 19:51:55 clear
 3005  2022-10-06 19:51:57 pwd
 3006  2022-10-06 19:52:02 history
[HJM@hjmlcc ~]$ 

3.23、关机

语法: shutdown [选项]
常见选项:
-h : 将系统的服务停掉后,立即关机、
-r :  在将系统的服务停掉之后就重新启动、
-t sec : -t 后面加秒数,亦即『过几秒后关机』的意思、

        云服务器永不关机, 不下心关机的话,可以在云服务器的网页端手动开启,虚拟机的话半年关一次即可,因为是在本地Windows系统下安装的,长时间不关机可能会卡,但一般情况也不会很卡,因为用的是Linux系统,比较稳定、

以下命令作为扩展:
◆ 安装和登录命令: login、shutdown、halt、reboot、install、mount、umount、chsh、exit、last;
◆ 文件处理命令: fifile、mkdir、grep、dd、fifind、mv、ls、diffff、cat、ln;
◆ 系统管理相关命令: df、top、free、quota、at、lp、adduser、groupadd、kill、crontab;
◆ 网络操作命令: ifconfifig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、fifinger、mail、 nslookup;
◆ 系统安全相关命令: passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who;
◆ 其它命令: tar、unzip、gunzip、unarj、mtools、man、unendcode、uudecode、

3.24、tac 指令 

[HJM@hjmlcc ~]$ ls
lcc.c  Makefile  process.c
[HJM@hjmlcc ~]$ cat lcc.c
12
23
34
45
56
[HJM@hjmlcc ~]$ tac lcc.c
56
45
34
23
12
[HJM@hjmlcc ~]$ 
//倒序打印文件(普通)中的每一行内容,但每一行中的内容不逆序、

关于Linux系统的指令操作先学到这里,后期会再学习其他的一些指令,到时候会再次进行补充、

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脱缰的野驴、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值