Linux基础操作命令

一、文件和目录

文件
文件的类型
- 普通文件,包括纯文本文件、二进制文件、各种压缩文件等。
d 目录,类似 Windows 系统中的文件夹。
b 块设备文件,就是保存大块数据的设备,比如最常见的硬盘。
c 字符设备文件,例如键盘、鼠标等。
s 套接字文件,通常用在网络数据连接,可以启动一个程序开监听用户的要求,用户可以通过套接字进行数据通信。
p 管道文件,其主要作用是解决多个程序同时存取一个文件所造成的错误。
l 链接文件,类似 Windows 系统中的快捷方式。
查看文件类型file命令
1.直接使用file命令查看文件类型
root@667d5e45f6a4:/home/MyFiles# file MyFiles.zip
MyFiles.zip: Zip archive data, at least v2.0 to extract

2.使用file -b 命令,不显示文件名
root@667d5e45f6a4:/home/MyFiles# file -b MyFiles.zip
Zip archive data, at least v2.0 to extract

3.使用-i选项来查看poetry文件,输出MIME类型字符串
root@667d5e45f6a4:/home/MyFiles# file -i MyFiles.zip
MyFiles.zip: application/zip; charset=binary

4.设置输出分隔符(和1 对比)
root@667d5e45f6a4:/home/MyFiles# file -F "=>" MyFiles.zip
MyFiles.zip=> Zip archive data, at least v2.0 to extract
    ** 一些自动化文件分析的脚本,避免分隔符和普通字符造成误解析,会手动调整间隔符

5.查看软连接文件
    #新建软连接文件
    ln -s file_s.txt  file_s_rl.txt
root@667d5e45f6a4:/home/MyFiles# file file_s_rl.txt
file_s_rl.txt: symbolic link to file_s.txt

    使用 -L 查看软链文件
    root@667d5e45f6a4:/home/MyFiles# file -L file_s_rl.txt
    file_s_rl.txt: ASCII text
** file 命令直接查看的软链文件,查看的是软链文件
   file -L 命令则直接查看的是软链指向的目标文件信息
查看目录下文件
1. ls [参数] [文件]
    参数说明:
    -a 显示全部的文件,包括隐藏文件(开头为 . 的文件)也一起罗列出来,这是最常用的选项之一。
    -A 显示全部的文件,连同隐藏文件,但不包括 . 与 .. 这两个目录。
    -d 仅列出目录本身,而不是列出目录内的文件数据。
    -f ls 默认会以文件名排序,使用-f选项会直接列出结果,而不进行排序。
    -F 在文件或目录名后加上文件类型的指示符号,例如,*代表可运行文件,/ 代表目录,= 代表 socket 文件,| 代表FIFO 文件。
    -h  以人们易读的方式显示文件或目录大小,如1KB、234MB、2GB 等。
    -i 显示 inode 节点信息。
    -l 使用长格式列出文件和目录信息。
    -n 以 UID 和 GID 分别代替文件用户名和群组名显示出来。
    -r 将排序结果反向输出,比如,若原本文件名由小到大,反向则为由大到小。
    -R 连同子目录内容一起列出来,等於将该目录下的所有文件都显示出来。
    -S 以文件容量大小排序,而不是以文件名排序。
    -t 以时间排序,而不是以文件名排序。
    --color=never never 表示不依据文件特性给予颜色显示。
    --color=always always 表示显示颜色,ls默认采用这种方式。
    --color=auto auto 表示让系统自行依据配置来判断是否给予颜色。
    --full-time 以完整时间模式 (包含年、月、日、时、分)输出
    --time={atime,ctime}  输出 access 时间或改变权限属性时间(ctime),而不是内容变更时间。
** 以上参数可组合进行 eg : ls -al 文件名 .
使用touch 创建文件修改文件时间戳
touch [选项] [文件]
    -a:只修改文件的访问时间;
    -c:仅修改文件的时间参数(3 个时间参数都改变),如果文件不存在,则不建立新文件。
    -d:后面可以跟欲修订的日期,而不用当前的日期,即把文件的 atime 和 mtime 时间改为指定的时间。
    -m:只修改文件的数据修改时间。
    -t:命令后面可以跟欲修订的时间,而不用目前的时间,时间书写格式为 YYMMDDhhmm。
1.创建文件
touch file.txt
    ** 如果文件存在 touch 文件名 ,则修改文件的时间戳
2. -d 修改文件指定时间
touch -d "2020-01-01 15:55"  file.txt

3.修改 bols 文件的 atime 和 mtime。 
[root@localhost ~]# touch -d "2017-05-04 15:44" bols
[root@localhost ~]# ll bols; ll --time=atime bols; ll --time=ctime bols
-rw-r--r-- 1 root root 0 May 4 2017 bols
-rw-r--r-- 1 root root 0 May 4 2017 bols
-rw-r--r-- 1 root root 0 Sep 25 21:40 bols
    **ctime不会变为设定时间,但更新为当前服务器的时间
## ctime :文件属性(文件权限,组等)发生改变的时间,
   atime :文件的数据被访问时间
   mtime :文件内容最后被修改时间
建立软/硬链接文件(ln)
1.建立软连接
ln -s 文件名(源文件名必须是全路径) 软连接文件名
## 软连接说明:
    相当于一个文件创建了快捷方式,该文件指向了一个文件(它会新建一个inode指向这个文件),删除源文件,软链接会找不到文件,他只是将inode指向源文件的inode,存储的不是实际数据
    
2.建立硬链接
ln  文件名 硬连接文件名
## 硬链接说明:
    相当于给文件的inode 创建了多个文件名,通过哪一个文件名都可以找到这个文件(这个硬链接的inode会和源文件的inode相同),硬链接不能跨文件系统(分区) 建立,不同的文件系统中inode不同 ,不能指向目录,因为每一个目录下的inode 号是需要从新计算的。目录是需要从新建立,目录下的所有子文件也要和源文件的子文件建立硬链接,所以比较复杂。
  ** 最终找到的都是这个文件,修改之后文件按内容都已改变 
文件复制 (cp)
cp [选项] 源文件 目标文件
    选项说明:
        -a:相当于 -d、-p、-r 选项的集合,这几个选项我们一一介绍;
        -d:如果源文件为软链接(对硬链接无效),则复制出的目标文件也为软链接;
        -i:询问,如果目标文件已经存在,则会询问是否覆盖;
        -l:把目标文件建立为源文件的硬链接文件,而不是复制源文件;
        -s:把目标文件建立为源文件的软链接文件,而不是复制源文件;
        -p:复制后目标文件保留源文件的属性(包括所有者、所属组、权限和时间);
        -r:递归复制,用于复制目录;
        -u:若目标文件比源文件有差异,则使用该选项可以更新目标文件,此选项可用于对文件的升级和备用。
如果多个源文件,则目标文件为目录(文件夹)
文件删除
rm [选项] 文件
    选项说明:
        -f : 强制删除,不提示信息
        -i : 提示信息,和-f 相反
        -r : 递归删除
移动、重命名文件
mv [选项] 源文件 目标文件
    选项说明 :
        -f :如果目标文件夹文件已存在,强制覆盖,不提示
        -i : 如果目标文件已存在,提示是否覆盖 (默认选项)
        -n : 如果目标文件夹已存在,则不移动,也不提示
        -v :显示文件的移动过程
        -u :目标文件已存在,但是两者相比,源文件更新,则对目标文件进行升级更新
##移动之后源文件夹的文件会被删除,类似于windows 的剪切
    ** 如果是相同文件夹下,mv test.txt abc.txt  test.txt文件则会更名为abc
    
#### 在docker ubuntu环境下mv 修改file.txt文件名为test 之后 修改test的内容,查看软链 则是文件未改名之前的内容,直接查看文件内容则是已经修改过了
    ** 注意查看文件是否有的软链
文件夹
1.创建一级文件夹
mkdir test
2. 创建多级
mkdir -p test/adult

3. 使用 -m 自定义文件夹的权限
mkdir -m 711 acces
在列出文件是可以使用通配符
    说明:
        ls *a : 列出当前文件夹下所有的a结尾的文件及文件夹
        ls *a* : 列出当前文件夹下所有带a的文件及文件夹
    通配符:
    ? : 占位符
    *a : 以a结尾的
    [a-g]* : 开头从a-g的
    *[a-g] : 结尾从a-g的
    [a-g]* [ne] : 开头a-g 结尾带 n e 的
查找文件的时候通用
Linux的执行过程
Linux的执行分为4个步骤:

1.判断路径
判断用户是否以绝对路径或相对路径的方式输入命令(如 /bin/ls),如果是的话直接执行。

2.检查别名
root@667d5e45f6a4:/home/test# alias mv
alias mv='mv -i'
    ** 可以使用 unalias 命令把 别名给删掉

3.判断是内部命令还是外部命令
root@667d5e45f6a4:/home/test# type pwd
pwd is a shell builtin    //内部

root@667d5e45f6a4:/home/test# type top
top is /usr/bin/top      //外部

4.查找外部命令对应的可执行文件
which pwd

二、打包归档和压缩

打包归档
tar [选项] 文件名.tar 文件名
    选项说明:
        -c 将多个文件或目录进行打包。
        -A 追加 tar 文件到归档文件。
        -f 包名 指定包的文件名。包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名;
        -v 显示打包文件过程;
解包
    tar [选项] 文件名.tar 
    选项说明:
        -c 将多个文件或目录进行解包。
        -A 追加 tar 文件到归档文件。
        -C 目录  指定解包到那个目录下 
        -f 包名 指定包的文件名。包的扩展名是用来给管理员识别格式的,所以一定要正确指定扩展名;
        -v 显示打包文件过程;
打包压缩/解打包压缩分为tar.gz 和 tar.bz2
1.gz文件的压缩、解压缩

tar -zcvf filename.tar.gz filename

tar -zxvf filename.tar.gz 


2.bz2文件的压缩、解压缩

tar -jcvf filename.tar.bz2 filename
    
tar -jxvf filename.tar.bz2 
压缩文件和目录
zip格式压缩
zip [选项]  文件.zip 文件或者文件列表、目录 
    选项说明:
        -r :递归压缩目录
        -v :显示详细压缩过程
        -q :在压缩的过程中不显示执行命令过程
        -m : 压缩之后,删除源文件
        -压缩级别:1-9,1-最快,9压缩效果最好
        -u :更新压缩文件,即往压缩文件中添加新文件。

1.压缩多文件
zip file.zip a.txt b.txt 

2.压缩文件夹
zip -r file.zip file/
unzip解压缩
unzip [选项] 文件名.zip
    选项说明:
        -d 目录名  将压缩文件解压到指定目录下。
        -n 解压时并不覆盖已经存在的文件。
        -o  解压时覆盖已经存在的文件,并且无需用户确认。
        -v 查看压缩文件的详细信息,包括压缩文件中包含的文件大小、文件名以及压缩比等,但并不做解压操作。
        -t 测试压缩文件有无损坏,但并不解压。
        -x 文件列表   解压文件,但不包含文件列表中指定的文件。
指定解压缩位置
unzip -d /tmp/ ana.zip
gzip压缩文件
gzip [选项] 源文件
    选项说明:
        -c 将压缩数据输出到标准输出中,并保留源文件。
        -d 对压缩文件进行解压缩。
        -r 递归压缩指定目录下以及子目录下的所有文件。
        -v 对于每个压缩和解压缩的文件,显示相应的文件名和压缩比。
        -l 对每一个压缩文件,显示以下字段: 
            压缩文件的大小;
            未压缩文件的大小;
            压缩比;
            未压缩文件的名称。
        -数字  用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高。默认压缩比是 -6。
1.压缩文件
gzip filename 
    ** 这个压缩完成之后,源文件没有了。
2.保留源文件
gzip -c filename > filename.gz

3.压缩文件夹
gzip -r  test/
    ** 加上递归压缩文件也是不会将文件进行压缩,会将每一个文件夹下的每一个文件压缩为一个文件,不支持多级,软链压缩不了
gunzip 解压缩
gunzip [选项] 文件
    选项说明:
        -r 递归处理,解压缩指定目录下以及子目录下的所有文件。
        -c 把解压缩后的文件输出到标准输出设备。
        -f 强制解压缩文件,不理会文件是否已存在等情况。
        -l 列出压缩文件内容。
        -v 显示命令执行过程。
        -t 测试压缩文件是否正常,但不对其做解压缩操作。
        
1.解压文件夹下的所有文件
gunzip -r test/

    ## 如果压缩文件是一个纯文本文件可以直接查看内容
    zcat 文件名
bzip2压缩
bzip2 [选项] 文件
    选项说明:
        -d 执行解压缩,此时该选项后的源文件应为标记有 .bz2 后缀的压缩包文件。
        -k bzip2 在压缩或解压缩任务完成后,会删除原始文件,若要保留原始文件,可使用此选项。
        -f bzip2 在压缩或解压缩时,若输出文件与现有文件同名,默认不会覆盖现有文件,若使用此选项,则会强制覆盖现有文件。
        -t 测试压缩包文件的完整性。
        -v 压缩或解压缩文件时,显示详细信息。
        -数字 这个参数和 gzip 命令的作用一样,用于指定压缩等级,-1 压缩等级最低,压缩比最差;-9 压缩比最高
1.保留源文件
bzip2 -k 文件名
bunzip2解压缩
bzip2 [选项] 文件
    选项说明:
        -k bzip2 在压缩或解压缩任务完成后,会删除原始文件,若要保留原始文件,可使用此选项。
        -f bzip2 在压缩或解压缩时,若输出文件与现有文件同名,默认不会覆盖现有文件,若使用此选项,则会强制覆盖现有文件。
        -L 列出文件内容
        -v 显示执行命令的过程
1.保留源文件
bzip2 -k 文件名

三、用户和和用户组

UID和GID
UID是用户的唯一标识,
    UID :0-499 是系统保留
    每一个用户都会有且只有一个初始组,和用户名相同,将用户加入的组成为附加组,可以有多个
    所有用户的信息都在/etc/passwd,包括用户属于哪一个组 文件中,都可以对这个文件读操作
    用户的密码放在了/etc/shadow中只有root可以访问
    不设置密码的用户是无法登录的
    
GID是组的唯一标识,
    同理组也一样
    组也有/etc/group 这个文件保存所有组的信息
    /etc/gshadow 保存所有组的密码(现在组密码一般没人用)
创建用户 useradd
1.添加新用户的命令
useradd [选项] 用户名
    选项说明 : 
     http://c.biancheng.net/view/844.html
    ** 一般默认即可
1.添加lamp 用户
useradd lamp 
修改密码 passwd
passwd [选项] 用户名
    选项说明 : 
        -S:查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用;
        -l:暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!",使密码失效。仅 root 用户可用;
        -u:解锁用户,和 -l 选项相对应,也是只能 root 用户使用;
        --stdin:可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用;
        -n 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段;
        -x 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段;
        -w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段;
        -i 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。
修改用户命令 usermod
usermod [选项] 用户名
    选项说明:
        -c 用户说明:修改用户的说明信息,即修改 /etc/passwd 文件目标用户信息的第 5 个字段;
        -d 主目录:修改用户的主目录,即修改 /etc/passwd 文件中目标用户信息的第 6 个字段,需要注意的是,主目录必须写绝对路径;
        -e 日期:修改用户的失效曰期,格式为 "YYYY-MM-DD",即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段;
        -g 组名:修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID);
        -u UID:修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID);
        -G 组名:修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件;
        -l 用户名:修改用户名称;
        -L:临时锁定用户(Lock);
        -U:解锁用户(Unlock),和 -L 对应;
        -s shell:修改用户的登录 Shell,默认是 /bin/bash。
1.修改用户的说明信息
usermod -c "docker 用户" docker

2.修改用户的附加组,即 把这一个用户添加到组中
usermod -G root docker

3.锁定、解锁用户
usermod -L docker 
usermod -U docker
修改用户密码状态 chage
chage [选项] 用户名
    选项说明:
        -l:列出用户的详细密码状态;
        -d 日期:修改 /etc/shadow 文件中指定用户密码信息的第 3 个字段,也就是最后一次修改密码的日期,格式为 YYYY-MM-DD;
        -m 天数:修改密码最短保留的天数,也就是 /etc/shadow 文件中的第 4 个字段;
        -M 天数:修改密码的有效期,也就是 /etc/shadow 文件中的第 5 个字段;
        -W 天数:修改密码到期前的警告天数,也就是 /etc/shadow 文件中的第 6 个字段;
        -i 天数:修改密码过期后的宽限天数,也就是 /etc/shadow 文件中的第 7 个字段;
        -E 日期:修改账号失效日期,格式为 YYYY-MM-DD,也就是 /etc/shadow 文件中的第 8 个字段。
1.查看用户的密码状态
chage -l docker

2.设置用户首次登录必须改密
    ## 设置的初始密码
       echo "docker" | psswd --stdin docker
chage -d 0 docker
删除用户 userdel
通过前面的学习我们知道,用户的相关数据包含如下几项: 
    用户基本信息:存储在 /etc/passwd 文件中;
    用户密码信息:存储在 /etc/shadow 文件中;
    用户群组基本信息:存储在 /etc/group 文件中;
    用户群组信息信息:存储在 /etc/gshadow 文件中;
    用户个人文件:主目录默认位于 /home/用户名,邮箱位于 /var/spool/mail/用户名。
1.删除用户,并且删除home下的家目录
userdel -r docker 

** 我们在删除用户时,其实删除的是用户相关文件中的用户配置信息,然后删除用户的家目录
    我们手动删除文件中相关用户的信息,和删除文件的命令相同
查看用户的UID和GID
id 用户名
1.查看用户的id
[root@localhost ~]# id lamp
uid=501(lamp) gid=501(lamp) groups=501(lamp)
su 命令切换用户
 su [选项] 用户名
    选项说明 : 
        -:当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等),使用 - 选项可省略用户名,默认会切换为 root 用户。
        -l:同 - 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号。
        -p:表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件)。
        -m:和 -p 一样;
        -c 命令:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。
    ** su 和 su - 的区别:
        带 - 的切换是连工作环境一起切换,否则有些命令执行不了
        不带 - 则只是切换的用户角色
who am i 和 whoami 的差别
whoami 指的是用户所处的linux系统当前的用户
who am i 指的当前系统的登录用户是哪一个
创建用户组
groupadd [选项] 用户名
    选项说明:
        - g GID : 指定组id
        -r : 创建系统群组
1.创建名为groupadd1的用户组
groupadd groupadd1
修改用户名 groupmod
groupmod [选项] 组名
    选项说明:
        -g GID :修改组ID
        -n 新组名: 修改组名
1.修改新组名
groupmod -n newgroup groupadd1
删除用户组 groupdel
1. 删除用户组
groupdel 用户组
    ** groupdel 不能删除已有用户的初始用户组
把用户添加进组或从组中删除 gpasswd
gpasswd [选项] 用户组
    选项说明: 
         
            : 选项为空时,表示给群组设置密码,仅 root 用户可用。
        -A user1,... 将群组的控制权交给 user1,... 等用户管理,也就是说,设置 user1,... 等用户为群组的管理员,仅 root 用户可用。
        -M user1,... 将 user1,... 加入到此群组中,仅 root 用户可用。
        -r  移除群组的密码,仅 root 用户可用。
        -R 让群组的密码失效,仅 root 用户可用。
        -a user 将 user 用户加入到群组中。
        -d user 将 user 用户从群组中移除。
        
1.将用户 添加到用户组
gpasswd -a user 用户组名

2.将用户从组中删除
gpasswd -d user 用户组名
    ** usermod -G  组名 用户名  将用户添加到一个组中
        用这个命令的话 用户会从本来所属的所有其他组中移除,
 ###所以在操作用户添加到组时,用这个gpasswd
切换用户的有效组 newgrp
1.切换用户的所属的有效用户组
newgrp groupname

** 切换用户组之后所创建的文件都属于这个用户组
    [lamp@vbrug-01 ~]$ mkdir lamp1 // lamp1初始用户组设置的为group1
    drwxr-xr-x 2 lamp group1 6 Sep 17 09:29 lamp1
    [lamp@vbrug-01 ~]$ newgrp group2
    [lamp@vbrug-01 ~]$ mkdir lamp2
    [lamp@vbrug-01 ~]$ newgrp group3
    [lamp@vbrug-01 ~]$ mkdir lamp3
    [lamp@vbrug-01 ~]$ ll
    drwxr-xr-x 2 lamp group1 6 Sep 17 09:29 lamp1
    drwxr-xr-x 2 lamp group2 6 Sep 17 09:29 lamp2
    drwxr-xr-x 2 lamp group3 6 Sep 17 09:30 lamp3
    [lamp@vbrug-01 ~]$

四、Linux 文本处理

cat命令:连接文件并打印输出到标准输出设备
cat [选项] 文件名 
或者 
cat  文件名1 文件名2 > 文件名3
    选项说明:
        -A : 相当于 -vET 选项的整合,用于列出所有隐藏的符号
        -E :列出每行所有结尾的回车符 $ ;
        -n : 对所有的输出行进行编号
        -b : 只对非空行进行编号
        -T :把Tab键 ^| 显示出来
        -V :列出特殊字符
        -s :有连续2行以上的空白行时,合并成一行的空白
1.将两个文件合并输出到另一个文件中
cat  file1.txt file2.txt > file3.txt
more 命令 : 分屏显示内容
more [选项] 文件名
    选项说明:
        -n :一次显示的行数
        +n :从第几行开始显示内容
        -u : 不显示下引号(根据环境变量TERM指定的终端有所不同)
        -s : 连续两行以上的空白时,就替换为一行的空白
        -c : 先显示内容在清除屏幕
        -p : 不以卷动的方式显示每一页,清除屏幕显示内容
        -f :计算行数时,以实际的行数,而不是自动换行过后的行数
## 打开交互页面后的 交互指令
    交互指令说明 : 
        h 或 ? : 显示more 命令交互指令的帮助
        q 或 Q : 退出more
        v : 在当前启动一个编辑器
        :f : 显示当前文件的文件名和行号
        !命令或 :!命令:在子shell中执行命令
        回车 :显示下一行
        空格 :显示下一页
        Ctrl+l :刷新屏幕
        = : 显示当前行的行号
        ' :转到上一次搜索的地方
        Ctrl+f : 向下滚动下一页
        . : 重复上一次输入的命令
        /字符串:搜索指定字符串
        b : 向上移动一页
        d :  向下移动半页
head命令:显示文件开头的内容
head [选项] 文件名
    选项说明: 
        -n K : 这里K表示行数,是显示文件前K行的内容;如果使用“ -K ”作为参数,表示除了文件最后K行以外,显示剩余的全部内容。
        -c K : K 表示字节数,显示文件前K个字节的内容,如果使用“ -K ”作为参数,表示除了文件最后K字节的内容,显示剩余的全部内容。
        -v : 显示文件名;
less命令:查看文件内容
less [选项] 文件名
    选项说明:
        -N : 显示每行行号
        -S :将超过行长的部分舍弃
        -e :当文件显示结束后,自动离开
        -g :只标志最后搜索到的关键词
        -Q :不使用警告音
        -i :忽略搜索时的大小写
        -m :显示类似more命令的百分比
        -f :强迫打开特殊文件,比如外围设备代号 目录、二进制
        -s :显示连续空行为一行
        -b<缓冲区大小> :设置缓冲区的大小
        -o <文件名> :将less 输出的内容保存到指定文件中  //试了不管用
        -x<数字> :将tab 键显示为规定的数字空格
## 打开交互页面后的 交互指令
    指令说明:
        /字符串 向下搜索“字符串”的功能。
        ?字符串  向上搜索“字符串”的功能。
        n  重复*前一个搜索(与 / 成 ? 有关)。
        N 反向重复前一个搜索(与 / 或 ? 有关)。
        b 向上移动一页。
        d 向下移动半页。
        h 或 H 显示帮助界面。
        q 或 Q  退出 less 命令。
        y 向上移动一行。
        空格键 向下移动一页。
        回车键 向下移动一行。
        【PgDn】键 向下移动一页。
        【PgUp】键 向上移动一页。
        Ctrl+f  向下移动一页。
        Ctrl+b  向上移动一页。
        Ctrl+d  向下移动一页。
        Ctrl+u 向上移动半页。
        j  向下移动一行。
        k  向上移动一行。
        G  移动至最后一行。
        g  移动到第一行。
        ZZ 退出 less 命令。
        v  使用配置的编辑器编辑当前文件。
        [ 移动到本文档的上一个节点。
        ] 移动到本文档的下一个节点。
        p 移动到同级的上一个节点。
        u 向上移动半页。
tail命令:显示文件结尾的内容
tail [选项] 文件名 
    选项说明 : 
        -n K:这里的 K 指的是行数,该选项表示输出最后 K 行,在此基础上,如果使用 -n +K,则表示从文件的第 K 行开始输出。
        -c K:这里的 K 指的是字节数,该选项表示输出文件最后 K 个字节的内容,在此基础上,使用 -c +K 则表示从文件第 K 个字节开始输出。
         -f:输出文件变化后新增加的数据。

1.监控新写入文件的内容  ,新往文件输出的内容会一直更新
tail -f file3.txt
Linux输入输出重定向
1.输入重定向
    命令符号格式说明:
        命令 < 文件 :将指定文件作为命令的输入设备 
        命令 << 分界符 : 表示从标准输入设备(键盘)中读入,直到遇到分界符才停止.
        命令 < 文件1 > 文件2 :将文件1 作为命令的输入设备,该命令的执行结果输入到文件2中
    eg :
        1.将0作为分界符
        [root@vbrug-01 lamp]# cat << 0
        > bbb
        > bbbb
        > bbb
        > bbb
        > 0
        bbb
        bbbb
        bbb
        bbb
        
        2.将文件1作为输入设备,并重定向到文件2
        cat < /etc/passwd/ > a.txt
2.输入重定向 
        > :这个是清除文件内容后写入输出内容
        >> : 在文件按原本的内容上追加输出内容
    命令符号格式说明:
        命令 > 文件: 将执行的标准输出结果重定向到指定文件中
        命令 2> 文件:将执行的错误输出结果重定向输出到指定文件中
        命令 >> 文件: 将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,新数据将写入到原有内容的后面。
        命令 2>> 文件:将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,新数据将写入到原有内容的后面。
        命令 >> 文件 2>&1  或者  命令 &>> 文件:将标准输出或者错误输出写入到指定文件,如果该文件中已包含数据,新数据将写入到原有内容的后面。注意,第一种格式中,最后的 2>&1 是一体的,可以认为是固定写法
grep命令 查找文件内容
grep [OPTIONS] PATTERN [FILE ...] 
grep [OPTIONS] [-e PATTERN] ...  [-f FILE] ... [FILE ...] 
    OPTIONS:
        ^8 :开头是8行
        8$ :结尾是8
        通配符:支持
        -e : 使用正则搜索
        -i :不区分大小写
        -v :查找不包含指定内容的行
        -w :按单词搜索
        -c :统计到匹配到的次数
        -n :显示行号
        -r :逐层遍历目录查找
        -A :显示匹配行后面多少行
        -B :显示匹配行及前面多少行
        -C :显示匹配行及前后多少行 -C3:则表示匹配的前后3行
        --color :匹配到的内容高亮显示
        --include :指定匹配的文件类型
        --exclude :过滤不需要匹配的文件另类型
1.使用正则表达式
grep -e '[a-z]\{5\}' a.txt

2.使用通配符进行搜索
grep a* a.txt

3.查找以leo开头的行
grep ^leo logs.log

4.查找以leo结尾的行
grep leo$ logs.log

5.查找空行
grep ^$ logs.log

6.将搜索结果输出到文件中
grep 基金 lamp.txt > result.log

7.在当前目录及所有子目录查找所有java文件中查找leo
grep -r 基金 . --include "*.txt"
awk 命令详解
未完待续
sed 命令详解
替换脚本命令
替换test为test1 在文本中第二个位置出现的地方
sed 's/test/test1/2'


替换文本中所有的test为test1
sed 's/test/test1/g'

五、权限管理

六、其他常用操作命令

scp :用于Linux之间复制文件和目录
语法:
    scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
    [-l limit] [-o ssh_option] [-P port] [-S program]
    [[user@]host1:]file1 [...] [[user@]host2:]file2
简易写法:
    scp [选项] file_source file_target
        选项说明:
            -1: 强制scp命令使用协议ssh1
            -2: 强制scp命令使用协议ssh2
            -4: 强制scp命令只使用IPv4寻址
            -6: 强制scp命令只使用IPv6寻址
            -B: 使用批处理模式(传输过程中不询问传输口令或短语)
            -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
            -p:保留原文件的修改时间,访问时间和访问权限。
            -q: 不显示传输进度条。
            -r: 递归复制整个目录。
            -v:详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。
                    这些信息用于调试连接,验证和配置问题。
            -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
            -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。
            -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
            -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。
            -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,
            -P port:注意是大写的P, port是指定数据传输用到的端口号
            -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项

1.从本地复制文件到远程
scp /home/lamp/file.txt root@39.106.55.243:/home/lamp
    ** 将文件复制到远程系统的lamp文件夹下
    
2.从本地复制文件到远程并且重命名
scp /home/lamp/file.txt root@39.106.55.243:/home/lamp/test.txt
    ** 将文件复制到远程系统的lamp文件夹下,并将文件重命名为test.txt

3.从本地复制目录到目标系统的文件夹    
scp -r /home/lamp/adult  root@39.106.55.243:/home/lamp/test

4.将文件从远程复制到本地
scp  root@39.106.55.243:/home/lamp/test.txt /home/lamp/adult.txt 
scp -r  root@39.106.55.243:/home/lamp/test /home/lamp/adult 
curl
curl [选项] url
    选项说明:
        -A/--user-agent <string>              设置用户代理发送给服务器
        -b/--cookie <name=string/file>    cookie字符串或文件读取位置
        -c/--cookie-jar <file>                    操作结束后把cookie写入到这个文件中
        -C/--continue-at <offset>            断点续转
        -D/--dump-header <file>              把header信息写入到该文件中
        -e/--referer                                  来源网址
        -f/--fail                                          连接失败时不显示http错误
        -o/--output                                  把输出写到该文件中
        -O/--remote-name                      把输出写到该文件中,保留远程文件的文件名
        -r/--range <range>                      检索来自HTTP/1.1或FTP服务器字节范围
        -s/--silent                                    静音模式。不输出任何东西
        -T/--upload-file <file>                  上传文件
        -u/--user <user[:password]>      设置服务器的用户和密码
        -w/--write-out [format]                什么输出完成后
        -x/--proxy <host[:port]>              在给定的端口上使用HTTP代理
        -#/--progress-bar                        进度条显示当前的传送状态
lsof命令:列出进程调用或打开的文件信息
lsof [选项]
lsof [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-E] [+|-e s] [+|-f[gG]]
     [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
     [+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
    选项说明:
        filename:显示打开指定文件的所有进程
        -c String:显示COMMAND列中包含指定字符的进程
        -u username:显示所属user进程打开的文件
        -g gid:显示归属gid的进程情况
        +d /DIR/:显示目录下被进程打开的文件
        +D /DIR/ :同上,会递归搜索目录下的所有目录,时间比较长
        -p PID:显示pid这个进程打开的所有文件
        -U:获取Unix套接口地址
        -i <条件> :列出符合条件的进程(4、6、协议、:端口、@ip)
        -a :列出打开文件存在的进程
        -n<目录>:列出使用NFS的文件
        -d xx: 显示使用fd为xx的进程
        。。。。 //还有很多,暂时列出这些

1. lsof abc.txt 显示开启文件abc.txt的进程
2. lsof -c abc 显示出以字母 abc 开头进程现在打开的文件
3. lsof -p 1234 列出进程号为1234的进程所打开的文件
4. lsof -g gname/gid 显示归属gname或gid的进程情况
5. lsof -u uname/uid 显示归属uname或uid的进程情况
6. lsof +d /usr/local/ 显示目录下被进程开启的文件
7. lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
8. lsof -d 4 显示使用fd为4的进程
9.lsof -i 用以显示符合条件的进程情况
10. lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
    46 --> IPv4 or IPv6
    protocol --> TCP or UDP
    hostname --> Internet host name
    hostaddr --> IPv4地址
    service --> /etc/service中的 service name (可以不止一个)
    port --> 端口号 (可以不止一个)

        
 ## https://www.cnblogs.com/muchengnanfeng/p/9554993.html
ip 显示或设置网络设备
ip [options] OBJECT { COMMAND |help }
    OBJECT的值可以是以下几种
        { link | addr | addrlabel | route | rule | neigh | ntable | tunnel | maddr | mroute | mrule | monitor | xfrm | token }
    代表的含义:
        link:网络设备
        address:设备上的协议(IP或IPv6)地址
        addrlabel:协议地址选择的标签配置
        route:路由表条目
        rule:路由策略数据库中的规则
    OPTIONS:
        { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] | -h[uman-readable] | -iec | -f[amily] { inet | inet6 | ipx | dnet | link } | -o[neline] | -t[imestamp] | -b[atch] [filename] | -rc[vbuf] [size] }
    代表的含义:
        -V:显示命令的版本信息
        -s:输出更详细的信息
        -f: 强制使用指定的协议族
        -4:指定使用的网络层协议是IPv4
        -6:指定使用的网络层协议是IPv6
        -0:输出信息每条记录输出一行,即使内容较多也不换行显示;
        -r:显示主机时,不使用IP地址,而使用主机的域名。
实例:
ip link show                     # 显示网络接口信息
ip link set eth0 up             # 开启网卡
ip link set eth0 down            # 关闭网卡
ip link set eth0 promisc on      # 开启网卡的混合模式
ip link set eth0 promisc offi    # 关闭网卡的混个模式
ip link set eth0 txqueuelen 1200 # 设置网卡队列长度
ip link set eth0 mtu 1400        # 设置网卡最大传输单元
ip addr show     # 显示网卡IP信息
ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1
ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址

ip route show # 显示系统路由
ip route add default via 192.168.1.254   # 设置系统默认路由
ip route list                 # 查看路由信息
ip route add 192.168.4.0/24  via  192.168.0.254 dev eth0 # 设置192.168.4.0网段的网关为192.168.0.254,数据走eth0接口
ip route add default via  192.168.0.254  dev eth0        # 设置默认网关为192.168.0.254
ip route del 192.168.4.0/24   # 删除192.168.4.0网段的网关
ip route del default          # 删除默认路由
ip route delete 192.168.1.0/24 dev eth0 # 删除路由
ip link  # 显示网络设备的运行状态
ip -s link     #显示更加详细的设备信息
ip neigh list # 显示邻居表
ip link | grep -E '^[0-9]' | awk -F: '{print $2}' 获取主机所有网络接口
ps 查看正在运行的进程
ps [参数]
    参数说明:
         a:显示所有程序
        -a:显示同一终端下的所有程序
        -A:显示所有进程
         c:显示进程的真实名称
        -N:反向选择
        -e:等于“-A”
         e: 显示环境变量
         f:显示程序间的关系
        -H:显示树状结构
         r:显示当前终端的进程
         T:显示当前终端的所有程序
        -au:显示较详细的资讯
        -aux:显示所有包含其他使用者的行程
        -C<命令>:列出指定命令的状况
        -u:显示指定用户的信息
1.显示所有进程信息,连同命令行
ps -ef 

2.ps 与grep 常用组合,查找特定的进程
ps -ef | grep tomcat

3.将目前属于自己这次登录的PID与相关信息列出来
ps -l

4.列出所有目前正在内存当中的程序
ps aux

5.列出类似于程序树的程序显示
ps -axjf

6.找出与 cron 与 syslog 这两个服务有关的 PID 号码
ps aux | egrep '(cron|syslog)'

7.指定输出的字段
ps -o pid,ppid,pgrp,session,tpgid,comm
top
top [选项] 
    选项说明:  
        -d: 指定top命令每个几秒更新,默认为3秒
        -b:使用批处理模式,一般和-n 选项使用,用于把top命令重定向到文件中
        -p 进程PID:仅查看指定的PID
        -s : top 命令在安全模式中运行,避免交互模式中出现错误
        -u :只监听某个用户的进程
        -S:以累积模式显示程序信息
    top交互窗口:
        ?或h:显示交互模式的帮助
        P:安装CPU的使用率排序,默认选项
        M:安装内存的使用率排序
        N:按照PID排序
        T:按照CPU的累积运算时间排序,也就是TIME+项排序
        k:按照PID给予某个进程一个信号,一般用于中止与某个进程信号9是强制中止
        r:按照PID给某个进程重设优先级
        q: 退出top命令
1.top 命令10秒更新一次,默认3秒
top -n 10

2.top 命令执行3次,并把3次执行结果重定向文件
top -b -n 3 >> ab.txt

3.查看指定PID
top -p 1123

4.top  无交互模式 
top -s
find 指定目录下查找文件
find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;
    -mount,-xdev:只检查和指定目录在同一个文件系统下的文件。避免列出其他文件系统中的文件
    -amin n:在过去n分钟内读取文件
    -anewer file:比文件file更晚读取过的文件
    -atime n:在过去n天内被读取过的文件
    -cmin n:在过去n分钟内被修改过
    -cnewer file:比文件更新文件
    -ctime n:在过去n天内被修改过的文件
    -empty :空的文件-gid n or -group name : gid 是n 或是group 名称是name
    -ipath p,-path p : 路径名称符合p的文件,ipath会忽略大小写
    -name name ,-iname name:文件名称符合name的文件。iname会忽略大小写
    -size n:文件大小是n单位,b代表512位元组的区块,c表示字元数,k表示kilo bytes ,w是二个为元组
    -type c:文件类型是c的文件
        type说明:
            d: 目录
            c: 字型装置文件
            b: 区块装置文件
            p: 具名贮列
            f: 一般文件
            l: 符号连结
            s: socket
            -pid n : process id 是 n 的文件
            你可以使用 ( ) 将运算式分隔,并使用下列运算。
            exp1 -and exp2
            ! expr
            -not expr
            exp1 -or exp2
            exp1, exp2
            
1.将目前目录及其子目录下所有延伸档名是c的文件列出来
find . -name "*.c"

2.将目前目录下及其子目录所有一般文件列出
find .-type f

3.将目前及其子目录下所有最近20天内更新过的文件列出
find .-ctime -20

4.查找/var/log 目录中更改时间在7日以前的普通文件,并在删除之前询问他们
find /var/log -type f -mtime +7 -ok rm {} \;

5.查找目录中文件具有读写权限,并且文件所属组的用户和其他用户具有读权限的文件
find . -type f -perm 644 -exec ls -l {} \;

6.为了查找系统中所有文件长度为0的普通文件,并列出他们的完整路径


 ## https://www.runoob.com/linux/linux-comm-find.html

七、权限管理

chmod
1.-rwxrwxrwx 表示文件权限为 777 r-4 w-2 x-1
chmod +777 file.txt 
chmod =711 file.txt
chmod -111 file.txt
    ## 文件夹 -R 即是文件夹下所有的子文件都添加这个操作权限

        chmod  -R +777 /dev

2.用字母表示修改文件的权限
u 表示 用户 g 表示所属组 o 表示其他组  a 表示所有
chmod u=rwx,g=rw,o=x file1.txt
chmod ugo=rw file1.txt
chmod a=rw file1.txt
chown 修改文件的所属组和用户
1.更改文件的用户所有者
chown lamp file.txt

2.修改文件的所属组

chown :group file.txt

3.同时修改文件的所属用户和组
chown lamp:group file.txt

八、Vim

替换当前字符
:%s/\(.\{-},\)/{"name":"\0","type":"string"},/g 

打开防火墙端口

firewall-cmd --zone=public --add-port=80/tcp --permanent 

未完待续

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值