学习linux基础命令

=========================================================================
day01

1. Linux 多用户多任务操作系统

   类 Unix 系统

2. Linux 命令提示符

   shell 命令提示符:


huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ 
   huangshaofeng ---- 用户名
   @        ---- 分隔符
   huangshaofeng-virtual-machine   ---- 主机名 
   :  ---- 分隔符
     ~        ---- 当前工作目录
   $        ---- 权限、身份符号,超级用户使用 #

 修改命令提示符,只要修改 PS1 环境变量即可:   

   以上只是临时更改,只对当前 SHELL 有效,如果要开机即生效,就要修改启动文件
   .profile 或 .bashrc 中对 PS1 的赋值。
3. 系统中支持的 shell

   查看系统中支持的 shell:
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash

 查看当前 shell:
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo  $SHELL
/bin/bash

进入指定的 shell,输入相应 shell 名即可:
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ sh

 退出 shell:

$ exit

4. Linux 根目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls /
bin    etc             lib         media  root  srv       usr
boot   home            lib32       mnt    run   swapfile  var
cdrom  initrd.img      lib64       opt    sbin  sys       vmlinuz
dev    initrd.img.old  lost+found  proc   snap  tmp       vmlinuz.old
 bin   所有用户都可执行命令目录
   boot  启动文件目录
   dev   设备文件目录
   etc   系统配置文件目录
   home  普通用户主目录的父目录
   lib   32 位库文件目录
   lib64 64 位库文件目录
   mnt   默认的挂载目录
   opt   要挂载的文件系统等
   proc  进程相关的信息
   root  根用户(超级用户)主目录
   sbin  超级用户执行的命令目录
   sys   sysfs 文件系统,比 proc 更详细
   usr   普通用户目录,比如普通用户安装的命令
     /usr/bin       命令目录
     /usr/include   头文件目录
     /usr/lib       库目录
     /usr/sbin      超级用户命令
     /usr/share/man 手册页主目录,子目录 man1 ~ man9 手册的各章节目录
   var   配置目录

5. 绝对路径和相对路径

   绝对路径:从根目录 / 开始的路径。如:/usr/include
   相对路径:不以 / 开始的路径。因为它是相对于当前目录或上级目录的路径。如:
             usr      当前目录下的 usr 目录 
             ./usr    当前目录下的 usr 目录
             ../usr   上级目录下的 usr 目录

   主目录(家目录),每个用户都有他的主目录,用于存放用户私有文件。
   普通用户主目录:/home/xxxx ---- xxxx 用户的主目录
   超级用户主目录:/root

   两个特殊的目录:
   
   当前目录:.
   上级目录:..
   
   每个目录下都有这两个目录。根目录 / 下也有 .. 目录名,但没有上级目录。


6. < 输入重定向

   默认情况下,是从键盘输入数据,但如果不想从键盘输入,而想从一个文件中得到输入
   的数据,则可以使用输入重定向 <,< 的左边是命令,右边是输入文件。

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ vi 1.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ read AAAA <1.txt     # < 右边的文件内容输入到左边命令中
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo $AAAA
1234
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ 

7. > 输出重定向
   
   默认情况下,是向控制台(屏幕)输出,但是如果想将输出保存到某个文件中,则可以
   使用输出重定向 >,> 的左边是命令,右边是输出文件。如果文件不存在就自动创建。
   如果文件已存在就覆盖原内容。
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo "hello world"
hello world
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo "hello world" >1.txt # 将 echo 命令的输出保存到 1.txt 文件中 
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cat 1.txt
hello world
  
  标准输出文件描述符 1
  标准错误文件描述符 2
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ find . -name "1.txt" 2>&1   # 将标准错误重定向到标准输出
如果要过滤掉一些错误的信息,可以使用将标准错误 2 重定向到 /dev/null
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ find /root -name "*.h"
find: ‘/root/snap’: 权限不够
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ find /root -name "*.h" 2>/dev/null
# 重定向了,错误信息保存到 /dev/null

8,>> 输出重定向追加

   将输出到屏幕的数据输出到文件中,并且是追加到文件中。

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo "hello" >>3.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
1.txt  3.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cat 3.txt 
hello
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo "hello" >>3.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
1.txt  3.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cat 3.txt 
hello
hello
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ 


9. 通配符 *, ?, [abcd], [^abcd], [a-z]

   * 通配任意长度的字符。包括 0 个字符。
   
   以 .txt 结尾可以用通配符表示为:*.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1.txt  2.txt  3.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls *.txt
1.txt  2.txt  3.txt

其它用法:abc*, 1*.txt, *abc*, *ab*cd*
 
? 通配有且仅有一个字符。

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1.txt  2.txt  3.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls ?.txt
1.txt  2.txt  3.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls ??.c
10.c

[abcd] 通配 [] 中列出的任意一个字符
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1.txt  2.txt  3.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls [12].txt
1.txt  2.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls [0-9].txt
1.txt  2.txt  3.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ 
ls [0-9a-zA-Z].txt  # 通配所有数字和字母       ls [a-z].txt  # 通配所有小写字母  ls [A-Z].txt  # 通配所有大写字母    ls [a-zA-Z].txt  # 通配所有字母
[^abcd] 排除集合中的字符,匹配一个字符。
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls [^45678].txt
1.txt  2.txt  3.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls [^1-3].txt
ls: 无法访问'[^1-3].txt': 没有那个文件或目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls [^123].txt
ls: 无法访问'[^123].txt': 没有那个文件或目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ touch 4.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls [^123].txt
4.txt

[] 通配符只匹配一个字符,如果要匹配多个字符,就要多次使用 [] 匹配:
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls [1-3][a-z].txt
1a.txt

10. 命令间使用 ; 分隔

    命令行执行多条命令时,使用 ; 将它们分隔开来:
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo $PS1;cat 1.txt  # 先执行 echo 命令,再执行 cat 合作
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
hello world

11. # 注释

    shell 命令中使用 # 注释,放在命令的末尾
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo "hello world" #This is remark
hello world


12. pwd 命令
    显示当前工作目录的绝对路径
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ pwd
/home/huangshaofeng/mywork/linux1

13. cd 切换目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cd    # 回到家目录
huangshaofeng@huangshaofeng-virtual-machine:~$ cd ~                # 回到家目录
huangshaofeng@huangshaofeng-virtual-machine:~$ cd -                # 切换回之前的目录
/home/huangshaofeng
huangshaofeng@huangshaofeng-virtual-machine:~$ cd ..
huangshaofeng@huangshaofeng-virtual-machine:/home$ pwd
/home
huangshaofeng@huangshaofeng-virtual-machine:/home$                 # 切换到上级目录

huangshaofeng@huangshaofeng-virtual-machine:~/huaqing/day_2$ cd ../../../huangshaofeng/   # 切换上三级目录

    ~ 通配任何用户的家目录。
      如果是 huangshaofeng 用户则表示 /home/huangshaodfeng
      如果是 root 用户则表示 /root

14. ls 列出文件信息

    默认情况下不显示隐藏文件(以 . 开头的文件)。
    -a 所有文件(包含隐藏文件),包括 . 和 ..
    -A 所有文件(包含隐藏文件),但不包括 . 和 ..
huangshaofeng@huangshaofeng-virtual-machine:~/huaqing/day_2$ ls -a
.  ..  first  first.c  work
huangshaofeng@huangshaofeng-virtual-machine:~/huaqing/day_2$ ls -A
first  first.c  work
  
-i 显示文件的 inode 号,inode 号相同的文件是同一个文件。
huangshaofeng@huangshaofeng-virtual-machine:~/huaqing/day_2$ ls -i
1342896 first  1342899 first.c  1342897 work

-l 长格式
huangshaofeng@huangshaofeng-virtual-machine:~/huaqing/day_2$ ls -l
总用量 20
-rwxrwxr-x 1 huangshaofeng huangshaofeng 8304 6月  29 14:33 first
-rw-rw-r-- 1 huangshaofeng huangshaofeng   74 6月  29 14:33 first.c
drwxrwxr-x 2 huangshaofeng huangshaofeng 4096 6月  29 14:36 work

  以上每个文件的 7 个部分,每部分的意思:
   
   drwxrwxr-x 第一个字母表示文件类型。有:
              d 目录,- 常规文件,l 符号链接,b 块设备,c 字符设备,p 管道
              2-4 三个字母表示“所有者”权限,r 可读,w 可写,x 可执行,并且位置固定。- 表示无权
              5-7 三个字母表示“所属组”权限
              8-10 三个字符表示“其它用户”权限
   
   第二部分,如果是目录表示其下面的子目录个数(包含 . 和 ..),如果是文件则表示硬链接数目
   
   第三部分,所有者名称
   第四部分,所属组名称
   第五部分,文件大小,对于目录表示所占磁盘空间;对于文件表示文件大小
   第六部分,最后修改日期
   第七部分,文件名

=========================================================================

day02

1. mkdir 创建目录

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1a.txt  1.txt  2.txt  3.txt  4.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ mkdir d1 d2 d3   # 同时创建 3 个目录 d1 d2 d3
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1a.txt  1.txt  2.txt  3.txt  4.txt  d1  d2  d3
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ mkdir d1/d11 d2/d22   # 创建子目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls  d1/d11 d2/d22 
d1/d11:

d2/d22:
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ 

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ mkdir d3/d31/d311
mkdir: 无法创建目录"d3/d31/d311": 没有那个文件或目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ mkdir -p  d3/d31/d311
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls d3 -R
d3:
d31

d3/d31:
d311

d3/d31/d311:

2. rmdir 删除空目录

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls d1 d2 -R
d1:
d11

d1/d11:

d2:
d22

d2/d22:
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ rmdir d1/d11 d2/d22  # 删除两个子目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1a.txt  1.txt  2.txt  3.txt  4.txt  d1  d2  d3
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls d1 d2 -R
d1:

d2:

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ rmdir d3
rmdir: 删除 'd3' 失败: 目录非空                                                                         # 非空目录不能删除

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ rmdir d3/d31/d311  -p  # -p 选项删除路径中所有空目录

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1a.txt  1.txt  2.txt  3.txt  4.txt  d1  d2
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ rmdir d*     # 使用通配符删除以 d 开头的空目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1a.txt  1.txt  2.txt  3.txt  4.txt

3. cp 复制文件目录

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cp /usr/include/stdio.h .   # 复制文件到当前目录(.)
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1a.txt  1.txt  2.txt  3.txt  4.txt  stdio.h


huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cp *.txt stdio.h d1    # 复制多个文件到 d1 目录,使用通配符 *
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls d1
1a.txt  1.txt  2.txt  3.txt  4.txt  stdio.h

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cp -t d2 *.txt
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls d2
1a.txt  1.txt  2.txt  3.txt  4.txt

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cp -r d1 d3    # 复制目录,没有使用 -r 选项会报错      # 复制目录,要使用 -r 选项。注意目标目录 d3 此时不存在,
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls d3
1a.txt  1.txt  2.txt  3.txt  4.txt  stdio.h

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cp -r d1 d3   # 复制目录,此时 d3 已存在,则将 d1 复制到 d3 下面成为其子目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls d3
1a.txt  1.txt  2.txt  3.txt  4.txt  d1  stdio.h

-r 与 -R 相同。


4. rm 删除文件目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ rm 1.txt 2.txt   # 删除多个文件
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1a.txt  3.txt  4.txt  d1  d2  d3  stdio.h

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ rm *.txt         # 使用通配符    
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls         
10.c  d1  d2  d3  stdio.h

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ rm d1              # 删除目录报错
rm: 无法删除'd1': 是一个目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ rm -r d1    # 使用 -r 选项可以删除目录,递归进入子目录进行删除,删除目录时还是调用 rmdir 命令 
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  d2  d3  stdio.h

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  d2  d3  stdio.h
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ rm -i stdio.h # -i 选项在每删除一个文件时都要询问,回答 y 删除,n 不删除
rm:是否删除普通文件 'stdio.h'? n   # 回答 n 表示不删除
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ rm -i stdio.h 
rm:是否删除普通文件 'stdio.h'? y   # 回答 y 表示删除
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  d2  d3

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ rm -rf d2   # -f 选项表示不询问,直接删除
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  d3
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$


5. mv 移动或改名文件

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ mv d3 d1   # 将目录 d3 改名为 d1,因为 d1 不存在
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  d1


huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls   
10.c  d2

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ mv d1 d2      # d2 是已存在的,则将 d1 移动到 d2 下面 
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  d2

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1.txt  2.txt  3.txt  d2
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ mv *.txt d2      # 移动多个文件到目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  d2


6. sudo 以管理员身份运行

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ fdisk -l
fdisk: 打不开 /dev/loop0: 权限不够

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ sudo fdisk -l  # 使用 sudo 以管理员身份运行 fdisk 命令,要求输入当前用户的密码


7. echo 显示变量的值或文本

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo $PATH
/opt/Qt5.12.8/5.12.8/gcc_64:/opt/Qt5.12.8/Tools/QtCreator/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/arm/gcc-linaro-arm-linux-2.6.32.2-mini2440-20110413_linux/bin
# 显示环境变量 PATH 的值,注意引用变量时要在前面使用 $ 符号,但对变量赋值时不能使用 $

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo PATH=$PATH
PATH=/opt/Qt5.12.8/5.12.8/gcc_64:/opt/Qt5.12.8/Tools/QtCreator/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/arm/gcc-linaro-arm-linux-2.6.32.2-mini2440-20110413_linux/bin                      # 显示字符串 PATH= 及变量 PATH 的值

uangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo enter a num;read MYNUM
enter a num     # echo 命令显示提示文本,read 命令读取输入并保存到 MYNUM 自定义变量中
12
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo $MYNUM
12

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo "hello \n world"  # 转义字符默认不生效
hello \nworld
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ echo -e "hello \n world"  # 使用 -e 选项启用转义
hello 
world

使用 unset 命令(bash 的 built-in 内置命令)可以删除变量和函数

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ read MYNUN <<<78;echo MYNUM=$MYNUM
MYNUM=12    # 将 78 输入给 MYNUM 变量


8. touch 创建一个空文件或修改文件的最后修改时间

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  d2
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ touch 1.txt 2.txt 3.txt  # 创建三个空文件,它们原来不存在
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1.txt  2.txt  3.txt  d2

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls -l
总用量 4
-rw-rw-r-- 1 huangshaofeng huangshaofeng    0 7月  15 21:04 10.c
-rw-rw-r-- 1 huangshaofeng huangshaofeng    0 7月  16 12:44 1.txt
-rw-rw-r-- 1 huangshaofeng huangshaofeng    0 7月  16 12:44 2.txt
-rw-rw-r-- 1 huangshaofeng huangshaofeng    0 7月  16 12:44 3.txt
drwxrwxr-x 3 huangshaofeng huangshaofeng 4096 7月  16 12:26

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls -l
总用量 36
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  15 21:04 10.c
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  16 12:44 1.txt
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  16 12:44 2.txt
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  16 12:44 3.txt
drwxrwxr-x 3 huangshaofeng huangshaofeng  4096 7月  16 12:26 d2
-rw-r--r-- 1 huangshaofeng huangshaofeng 29665 7月  16 12:46 stdio.h
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ touch stdio.h  # 因为 stdio.h 已存在,修改它的最后修改时间为当前时间
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls -l
总用量 36
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  15 21:04 10.c
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  16 12:44 1.txt
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  16 12:44 2.txt
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  16 12:44 3.txt
drwxrwxr-x 3 huangshaofeng huangshaofeng  4096 7月  16 12:26 d2
-rw-r--r-- 1 huangshaofeng huangshaofeng 29665 7月  16 12:47 stdio.h

在编程中,由于两个系统的时间存在时间差,比如在两个时区的系统之间可能存在时间差,从东部时区打包的文件到西部时区,
就有可能存在这种情况,即西部时区解包的文件,是在未来的某个时间创建的,这显然不符合逻辑。
要想纠正这种“时间错”,可以使用 touch * 来修改所有文件的最后修改时间。


9. cat 文本文件的内容

   一般用于显示行数不多的文件内容。显示完毕返回命令行,不会停留在文件中。

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cat /etc/passwd  # 显示密码文件的内容

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cat -n  /etc/passwd   # -n 显示行号

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ cat -ns  /etc/passwd  # -s 压缩连续的多行为一行

10. less 交互显示文件内容
可以上下翻页,上下逐行滚动,查找。不想以编辑的方式查看文件内容时,可以使用 less 命令。
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ less stdio.h 

上下箭头可以上下滚动一行,回车向下滚动一行,PageUp 向上翻页,PageDown 向下翻页,
/word 查找 word,并高亮显示所有的 word,输入 n 向下查找下一个 word,输出 N 向上查找
?word 查找 word,并高亮显示所有的 word,输入 N 向下查找下一个 word,输出 n 向上查找
q 退出

11. more 交互显示文件内容

    回车向下翻一行,空格向下翻一页,q 退出,显示当前所处位置的百分比
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ more stdio.h 


12. head 显示文件的前 n 行

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ head stdio.h  # 默认显示文件的前 10 行

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ head -20 stdio.h  # -20 指定显示文件的前 20 行

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ head -20 -c stdio.h  # -c 20 显示前 20 个字节

13. tail 显示文件的末 n 行

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ tail stdio.h   # 默认显示文件的末 10 行
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ tail -20 stdio.h    # -20 指定显示文件的末 20 行
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ tail -20 -c stdio.h  # -c 20 显示末 20 个字节


14. ln 链接

    硬链接:  可以理解为一个文件取了多个名称。
              如果删除硬链接,只有当硬链接数为 0 时才从磁盘删除这个文件。
              限制:不能跨设备(文件系统)创建硬链接,不能对目录创建硬链接。
    符号链接:链接文件中保存了目标文件的路径。可以通过链接文件找到目标文件。 
              删除链接文件,则仅将其自动删除,不会删除它所链接的目标文件。 不存在硬链接的两个限制。

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls -i     # 查看文件的 inode 号
659231 10.c  660513 1.txt  660514 2.txt  660515 3.txt  659199 d2  660516 stdio.h

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ln stdio.h  stdio-ln.h   # 创建硬链接 
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls -i        # stdio.h 与 srdio-ln.h 的 inode 相同
659231 10.c   660514 2.txt  659199 d2       660516 stdio-ln.h
660513 1.txt  660515 3.txt  660516 stdio.h
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls -i  stdio*
660516 stdio.h  660516 stdio-ln.h           # 硬链接数为 2
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ rm stdio-ln.h    # 删除其中一个硬链接,数目变为 1
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls -i  stdio*
660516 stdio.h
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ln d2 d2-ln
ln: d2: 不允许将硬链接指向目录                 # 不能对目录创建硬链接
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ln /dev/pts/0 pts0  # /dev 是另一个文件系统,不可以创建到当前文件系统的硬链接
ln: 无法创建硬链接'pts0' => '/dev/pts/0': 无效的跨设备链接


huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ln -s stdio.h  stdio-sln.h  # -s 选项创建符号链接
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls -i stdio*
660516 stdio.h  660517 stdio-sln.h                 # stdio-sln.h 链接文件保存了目标文件的路径
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ln -s d2 d2-sln  # 为目录创建符号链接
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls -ld d*
drwxrwxr-x 3 huangshaofeng huangshaofeng 4096 7月  16 12:26 d2
lrwxrwxrwx 1 huangshaofeng huangshaofeng    2 7月  16 15:31 d2-sln -> d2

15. ifconfig 网卡配置
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ifconfig      # 查看活动网卡信息
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.62.128  netmask 255.255.255.0  broadcast 192.168.62.255   # IPv4 地址,子网掩码,广播地址
        inet6 fe80::1fd6:af89:8339:cf53  prefixlen 64  scopeid 0x20<link>      # IPv6 地址
        ether 00:0c:29:6f:af:20  txqueuelen 1000  (以太网)                     # 网卡硬件地址    
        RX packets 8580  bytes 612822 (612.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7878  bytes 721674 (721.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 ens32 是网卡名     lo 是本地环回网卡,发送到这个网卡上的信息还可以读取回来
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (本地环回)
        RX packets 2596  bytes 227709 (227.7 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2596  bytes 227709 (227.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ifconfig  ens32  # 查看 ens33 网卡信息
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ifconfig  ens32 -a
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ifconfig ens33 down  # 普通用户不能关闭网卡
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ifconfig ens33 up     # 打开网卡
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$  sudo ifconfig ens33 192.168.90.215   # 修改 IP 地址,这是临时修改,下次重启恢复


    window 下有类型的命令:ipconfig

16. ping 测试与远程主机的网络是否连通

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ping baidu.com  # 指定 IP,-c 4 测试 4 个包,不带 -c 则一直测试下去
PING baidu.com (39.156.66.10) 56(84) bytes of data.
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=1 ttl=128 time=43.6 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=2 ttl=128 time=46.2 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=3 ttl=128 time=43.1 ms

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ping baidu.com -c 4  # 指定域名
PING baidu.com (39.156.66.10) 56(84) bytes of data.
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=1 ttl=128 time=43.3 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=2 ttl=128 time=47.8 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=3 ttl=128 time=43.5 ms
64 bytes from 39.156.66.10 (39.156.66.10): icmp_seq=4 ttl=128 time=46.5 ms


17. man, info 查看帮助手册

    info 比 man 更细致,但一般还是用 man 更多些。

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ man 3 printf   # 查看第 3 章中的 printf() 函数 
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ man 1 printf    # 查看第 1 章中的 printf 命令
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ man -a printf
--Man-- 下一页: printf(3) [ 查看 (return) | 跳过 (Ctrl-D) | 退出 (Ctrl-C) ]    # 退出第 1 章后,回车选择下一章,Ctrl-D 跳过下一章,Ctrl-C 结束

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ man printf  # 查看第一个章节中的 printf

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ man -k  printf    # 查看包含 printf 的章节条目
asprintf (3)         - print to allocated string
dprintf (3)          - formatted output conversion
fprintf (3)          - formatted output conversion
fwprintf (3)         - formatted wide-character output conversion
printf (1)           - format and print data
printf (3)           - formatted output conversion
snprintf (3)         - formatted output conversion
sprintf (3)          - formatted output conversion
swprintf (3)         - formatted wide-character output conversion
vasprintf (3)        - print to allocated string
vdprintf (3)         - formatted output conversion
vfprintf (3)         - formatted output conversion
vfwprintf (3)        - formatted wide-character output conversion
vprintf (3)          - formatted output conversion
vsnprintf (3)        - formatted output conversion
vsprintf (3)         - formatted output conversion
vswprintf (3)        - formatted wide-character output conversion
vwprintf (3)         - formatted wide-character output conversion
wprintf (3)          - formatted wide-character output conversion

man man
    手册包含 9 章:

1   Executable programs or shell commands                     # 可执行程序或 SHELL 命令
2   System calls (functions provided by the kernel)           # 系统调用,Linux 内核的 API
3   Library calls (functions within program libraries)        # 库函数
4   Special files (usually found in /dev)                     # 特殊文件
5   File formats and conventions eg /etc/passwd               # 数据库文件
6   Games                                                     # 游戏
7   Miscellaneous  (including  macro  packages  and  conventions), e.g.   # 杂项
    man(7), groff(7)
8   System administration commands (usually only for root)    # 管理员命令
9   Kernel routines [Non standard]                            # 内核例程

18. clear 清屏

19. apt, apt-get 下载、安装、更新、卸载包

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ apt --help
apt 1.6.17 (amd64)
用法: apt [选项] 命令

命令行软件包管理器 apt 提供软件包搜索,管理和信息查询等功能。
它提供的功能与其他 APT 工具相同(像 apt-get 和 apt-cache),
但是默认情况下被设置得更适合交互。

常用命令:
  list - 根据名称列出软件包
  search - 搜索软件包描述
  show - 显示软件包细节
  install - 安装软件包
  remove - 移除软件包
  autoremove - 卸载所有自动安装且不再使用的软件包
  update - 更新可用软件包列表
  upgrade - 通过 安装/升级 软件来更新系统
  full-upgrade - 通过 卸载/安装/升级 来更新系统
  edit-sources - 编辑软件源信息文件

20. vim 文本编程器

    三种模式:命令模式,插入模式,末行模式,它们之间必须通过 命令模式 进行切换:
    
    插入模式 <--> 命令模式 <--> 末行模式
    
    打开一个文件就进入 命令模式。

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ vim     # 不带文件名,匿名文件,需要在保存时提供名称

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ vim 4.txt  # 带文件名,则会以此名称保存。如果文件不存在就新建,存在就打开

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ vim 4.txt 5.txt -O   # -O 从左到右排列文件

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ vim 4.txt 5.txt -o # -o 从上到下排列文件
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ vim 4.txt 5.txt -p  # -p 标签方式排列文件 
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ vim +200 stdio.h      # 打开文件并定位到 200 行

    在 VIM 的末行模式下:
    
    :split 1.txt  以从上到下方式排列文件
    :vsplit 1.txt 以从左到右方式排列文件
    :tabe 1.txt   以标签方式排列文件
    
    :set cuc      设置光标所在列标记
    :set cul      设置光标所在行下划线
    :set cc=80    设置列标
    :set co=90    设置屏幕宽度
    
21. chmod 修改文件权限

    两种模式:
    
    . 字符模式,[ugoa][+-=][rwx],u 所有者,g 所属组,o 其他用户,a 所有用户;+ 增加,- 去掉,= 设置
    . 数字模式,用 "八进制数" 表示权限,如
                     rw-rw-r--  --> 二进制:110110100  --> 八进制:664

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ chmod o+x,g+w 10.c  # 所属组和其他用户都增加写权限,多个模式用逗号分隔
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ chmod ugo-r  10.c
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls -l
总用量 36
--w--w---x 1 huangshaofeng huangshaofeng     0 7月  15 21:04 10.c     # 所属组和其他用户都去掉写权限

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$  chmod g=rw stdio.h       # 所属组设置读写权限
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$  chmod 644 stdio.h        # 设置权限为 rw-r--r--
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ chmod 777 stdio.h        # 设置权限为 rwxrwxrwx
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ sudo chmod -R 777 d2     # -R 递归设置目录级其子目录的权限
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$   # 参考 stdio.h 的权限来设置 1.txt 的权限

22. chown, chgrp 更改所有组和所属组

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ sudo chown root:root 10.c   # 设置为 root 用户 root 组
[sudo] huangshaofeng 的密码: 
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls -l
总用量 36
--w--w---x 1 root          root              0 7月  15 21:04 10.c

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ sudo chown huangshaofeng 10.c   # 只改所有者而不改所属组

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ sudo chown  :huangshaofeng 10.c # 只改所属组而不改所有者

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$  sudo chgrp root 1.txt         # 改所属组
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$  sudo chown -R :root d2        # -R 递归更改
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$  sudo chown --reference=1.txt 2.txt   # 参考 1.txt 来更改 2.txt 的所属组

23. passwd 更改密码

    超级用户可以更改所有人的密码。
    普通用户只能更改自身密码,并且对密码有限制,太简单不行,太相似也不行。


24. su 更改用户 ID 或切换为超级用户
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ su root   # 切换为超级用户,输入超级用户的密码
密码: 
root@huangshaofeng-virtual-machine:/home/huangshaofeng/mywork/linux1# su huangshaofeng   # 切换为 huangshaofeng 用户,由于是超级用户切换的,因此不用输入密码,否则需要输入密码

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ 

=========================================================================

day03

1. 环境变量

   三种变量:环境变量,自定义变量,系统变量

   环境变量可用于 shell 及子 shell,相当于 C 语言中的全局变量
   自定义变量只用于当前 shell,相当 C 语言中的自动变量
   系统变量是由系统自动生成的,以 $ 打头的变量,$0 表示当前命令,$1 第一个参数,...,另外 $*, $@

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ env   # 查询当前 SHELL 的环境变量
PWD=/home/huangshaofeng/mywork/linux1  # 当前工作目录
HOME=/home/huangshaofeng     # 当前用户的主目录
SHELL=/bin/bash           # 当前的 shell
PATH=/opt/Qt5.12.8/5.12.8/gcc_64:/opt/Qt5.12.8/Tools/QtCreator/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin      # 命令的路径


脚本:命令的集合,形成的一个文件。
写一个脚本 1.sh:

echo "............................."
echo

 
ls -l 
 
 
echo ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 
echo 
 
 
ifconfig ens32 
 
 
echo ".............................." 
echo 


授权执行:
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ chmod 777 1.sh
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls -l
-rwxrwxrwx 1 huangshaofeng huangshaofeng   158 7月  16 16:21 1.sh

如何将 1.sh 变成系统命令?
   
   方法1,复制 1.sh 到 PATH 环境变量的路径下,如 /usr/local/bin 下

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls /usr/local/bin/1.sh   # 验证一下原来是否已存在同名的文件
ls: 无法访问'/usr/local/bin/1.sh': 没有那个文件或目录

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ sudo cp 1.sh  /usr/local/bin/1.sh   
[sudo] huangshaofeng 的密码:                                                                          # 复制 1.sh 到 /usr/local/bin 下面

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls /usr/local/bin/1.sh
/usr/local/bin/1.sh                               # 验证复制成功

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ 1.sh    # 不带路径执行命令
.............................

总用量 40
--w--w---x 1 huangshaofeng huangshaofeng     0 7月  15 21:04 10.c
-rwxrwxrwx 1 huangshaofeng huangshaofeng   158 7月  16 16:21 1.sh
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  16 12:44 1.txt
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  16 12:44 2.txt
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  16 12:44 3.txt
drwxrwxr-x 3 huangshaofeng huangshaofeng  4096 7月  16 12:26 d2
lrwxrwxrwx 1 huangshaofeng huangshaofeng     2 7月  16 15:31 d2-sln -> d2
-rw-r--r-- 1 huangshaofeng huangshaofeng 29665 7月  16 12:47 stdio.h
lrwxrwxrwx 1 huangshaofeng huangshaofeng     7 7月  16 15:29 stdio-sln.h -> stdio.h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.62.128  netmask 255.255.255.0  broadcast 192.168.62.255
        inet6 fe80::1fd6:af89:8339:cf53  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:6f:af:20  txqueuelen 1000  (以太网)
        RX packets 9496  bytes 688616 (688.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8122  bytes 752334 (752.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

..............................


方法2,将命令的路径放入 PATH 环境变量中。使用 export 命令导出变量为环境变量:
此方法只在当前终端有效,其他终端无效。为了打开终端即生效,可以将这个命令保存到启动文件中。
启动文件:~/.bashrc,~/.profile。.profile 调用了 .bashrc

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ 1.sh
bash: /usr/local/bin/1.sh: 没有那个文件或目录
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ export PATH=$PATH:/home/huangshaofeng/mywork/linux1
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ 1.sh
.............................

总用量 40
--w--w---x 1 huangshaofeng huangshaofeng     0 7月  15 21:04 10.c
-rwxrwxrwx 1 huangshaofeng huangshaofeng   158 7月  16 16:29 1.sh
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  16 12:44 1.txt
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  16 12:44 2.txt
-rw-rw-r-- 1 huangshaofeng huangshaofeng     0 7月  16 12:44 3.txt
drwxrwxr-x 3 huangshaofeng huangshaofeng  4096 7月  16 12:26 d2
lrwxrwxrwx 1 huangshaofeng huangshaofeng     2 7月  16 15:31 d2-sln -> d2
-rw-r--r-- 1 huangshaofeng huangshaofeng 29665 7月  16 12:47 stdio.h
lrwxrwxrwx 1 huangshaofeng huangshaofeng     7 7月  16 15:29 stdio-sln.h -> stdio.h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.62.128  netmask 255.255.255.0  broadcast 192.168.62.255
        inet6 fe80::1fd6:af89:8339:cf53  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:6f:af:20  txqueuelen 1000  (以太网)
        RX packets 9556  bytes 693277 (693.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8140  bytes 754725 (754.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

..............................

2. find 以表达式在目录中查找文件

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ find . -name  "1.sh"        # 在当前目录下按名称查找 1.sh 文件
./1.sh


3. locate 以名称查找文件

   locate 不是要磁盘中查找,它在 /var/lib/mlocate/mlocate.db 数据库中查找,此文件会在系统启动时更新一次,之后除非执行 updatedb 命令,
   否则不会更新。因此有时间效性,即在这个文件更新后新增的文件找不到,删除的文件却能找到。如果要查找最新文件情况,就先执行 updatedb。

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ locate 1.sh
/etc/profile.d/vte-2.91.sh
/home/huangshaofeng/huaqing/day_13/1.sh
/snap/gnome-3-38-2004/140/etc/profile.d/vte-2.91.sh
/snap/gnome-3-38-2004/143/etc/profile.d/vte-2.91.sh
/snap/gnome-42-2204/111/etc/profile.d/vte-2.91.sh
/snap/gnome-42-2204/120/etc/profile.d/vte-2.91.sh

总体来说,以名称查找 locate 比 find 更快,因为不需要在磁盘中逐个目录查找。


4. grep 文件中搜索满足匹配条件的行

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ grep -nH "printf" /usr/include/*.h

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ find /usr/include/ -name "*.h" |xargs grep -nH "printf"
xargs 命令将 | 管道传过来的文件名作为参数传递给 grep 命令。

 
5. file 打印文件类型
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ file 1.sh
1.sh: ASCII text      # 文本文件

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ file /dev/pts/0 
/dev/pts/0: character special (136/0)      # 字符设备文件


huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ file d2-sln
d2-sln: symbolic link to d2        # 符号链接


huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ file /lib/x86_64-linux-gnu/libc-2.27.so        # 动态库文件
/lib/x86_64-linux-gnu/libc-2.27.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=f7307432a8b162377e77a182b6cc2e53d771ec4b, for GNU/Linux 3.2.0, stripped


6. date 显示修改日期时间
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ date   # 显示日期时间
2023年 07月 16日 星期日 16:44:06 CST

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ sudo date -s "2023-07-15 12:00:00"; date                            # -s 设置日期时间,需要超级权限                         
[sudo] huangshaofeng 的密码:  
2023年 07月 15日 星期六 12:00:00 CST
2023年 07月 15日 星期六 12:00:00 CST


7. gzip, gunzip 压缩/解压缩

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ gzip  *.txt  # 压缩多个文件,每个文件后缀自动加上 .gz,并删除原文件
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1.sh  1.txt.gz  2.txt.gz  3.txt.gz  d2  d2-sln  stdio.h.gz  stdio-sln.
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ gunzip *.txt.gz      # 解压  
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1.sh  1.txt  2.txt  3.txt  d2  d2-sln  stdio.h.gz  stdio-sln.h
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ 


8. bzip2, bunzip2 压缩/解压缩

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ bzip2 1.txt  # 文件后缀自动加上 .bz2,并删除原文件
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1.sh  1.txt.bz2  2.txt  3.txt  d2  d2-sln  stdio.h.gz  stdio-sln.h
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ bzip2 *.txt   # 压缩多个文件
 
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1.sh  1.txt.bz2  2.txt.bz2  3.txt.bz2  d2  d2-sln  stdio.h.gz  stdio-sln.h
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ 

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ bunzip2 *.txt.bz2     # 解压缩
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ls
10.c  1.sh  1.txt  2.txt  3.txt  d2  d2-sln  stdio.h.gz  stdio-sln.h


9. tar 打包,压缩/解压缩

   只打包,或先打包再压缩

   c 打包
   x 解包
   j 以 bzip2 工具压缩/解压缩
   z 以 gzip 工具压缩/解压缩
   J 以 xz 工具压缩/解压缩
   f 打包/解包为文件
   v 显示打包/解包的信息

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$    tar czfv stdio.tar.gz stdio*.h      # gzip 压缩
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$  tar cjfv stio.tar.bz2 stdio*.h         # bzip2 压缩
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$   tar cJfv stio.tar.xz stdio*.h          # xz 压缩

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$  tar xzf stdio.tar.gz -C d11      # gzip 解压
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$  tar xjf stio.tar.bz2 -C d12      # bzip2 解压
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$  tar xJf stio.tar.xz -C d13       # xz 解压


10. wheris 显示命令的源文件、目标文件、帮助文档
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ whereis ls
ls: /bin/ls /opt/filesystem/bin/ls /usr/share/man/man1/ls.1.gz

11. which 显示命令的路径

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ which ls
/bin/ls


12. who, whoami, w 显示系统用户

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ who
huangshaofeng :0           2023-07-15 20:33 (:0)

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ whoami  # 当前用户
huangshaofeng

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ w      # 查看系统中登录的用户情况
 19:16:15 up  5:39,  1 user,  load average: 0.05, 0.01, 0.00
USER     TTY      来自           LOGIN@   IDLE   JCPU   PCPU WHAT
huangsha :0       :0               六20   ?xdm?   2:17   0.02s /usr/lib/gdm3/gd

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ time ls    # 执行 ls 命令,统计它的进程花费的时间
10.c  1.sh  1.txt.gz  2.txt  3.txt  d2  d2-sln  stdio.h.gz  stdio-sln.h

real    0m0.009s
user    0m0.002s
sys    0m0.000s
real    0m0.001s    # 实际时间,即进程开始到结束共花费的时间
user    0m0.001s    # 系统在用户空间运行花费的时间
sys    0m0.000s        # 系统运行这个进程在内核空间花费的时间,即系统调用花费的时间


14. ps 进程状态
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ps
   PID TTY          TIME CMD
  5428 pts/0    00:00:00 bash
  5518 pts/0    00:00:00 bash
  5911 pts/0    00:00:00 ps


USER 用户
PID  进程号
%CPU 占用 CPU 的百分比
%MEM 占用内存的百分比
TTY  终端,脱离了控制终端的用 ? 号表示
STAT 状态,状态码如下:
               D    uninterruptible sleep (usually IO)          # 不可中断的休眠
               R    running or runnable (on run queue)          # 运行中,或就绪队列中等待运行
               S    interruptible sleep (waiting for an event to complete)   # 可中断的休眠(等待事件完成)
               T    stopped by job control signal               # 被 job 控制信号暂停
               t    stopped by debugger during the tracing      # 在跟踪调试期间被调试器暂停
               W    paging (not valid since the 2.6.xx kernel)  # 换页中(Linux 2.6 之后不支持)
               X    dead (should never be seen)                 # 已死(应该永不可见)
               Z    defunct ("zombie") process, terminated but not reaped by  # 僵尸进程
                    its parent

       BSD 扩展的状态码:

               <    high-priority (not nice to other users)     # 高优先级进程
               N    low-priority (nice to other users)          # 低优先级进程
               L    has pages locked into memory (for real-time and custom IO)   # 有页被锁在内存中
               s    is a session leader                         # 会话组长
               l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads    # 多线程
                    do)
               +    is in the foreground process group          # 在前台进程组中

   一般关注占用 CPU 和 内存 情况,以及当前的状态

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ ps axjf  # 查看进程树


15. top 动态查看进程状态

    默认每隔 3 秒刷新一次。可以使用 -d 选项更改。
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ top

top - 19:36:20 up  5:59,  1 user,  load average: 0.24, 0.07, 0.02
任务: 311 total,   2 running, 240 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.3 us,  0.8 sy,  0.0 ni, 97.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2014884 total,   181292 free,  1430900 used,   402692 buff/cache
KiB Swap:   969960 total,   878824 free,    91136 used.   378732 avail Mem 

    占用 CPU 比例说明:
    
           us, user    : time running un-niced user processes   高优先级用户进程
           sy, system  : time running kernel processes          内核进程
           ni, nice    : time running niced user processes      低优先级用户进程
           id, idle    : time spent in the kernel idle handler  内核空闲进程
           wa, IO-wait : time waiting for I/O completion        等待 IO 完成
           hi : time spent servicing hardware interrupts        服务硬件中断
           si : time spent servicing software interrupts        服务软件中断
           st : time stolen from this vm by the hypervisor      系统 VM "偷走"

    PageUp 向上翻页,PageDown 向下翻页。q 退出。

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ top -d 5 -u huangshaofeng
# 间隔 5 秒刷新,查看 huangshaofeng 用户的进程
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ top -d 5 -u 1000       # 间隔 5 秒刷新,查看 ID 为 1000 的用户的进程
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ top -d 5 -p 1          # 间隔 5 秒刷新,查看进程号为 1 的进程

16. kill 向进程发送信号

farsight@ubuntu:~/test$ kill -l    # 显示系统支持的信号
 1) SIGHUP     2) SIGINT     3) SIGQUIT     4) SIGILL     5) SIGTRAP
 6) SIGABRT     7) SIGBUS     8) SIGFPE     9) SIGKILL    10) SIGUSR1
11) SIGSEGV    12) SIGUSR2    13) SIGPIPE    14) SIGALRM    15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD    18) SIGCONT    19) SIGSTOP    20) SIGTSTP
21) SIGTTIN    22) SIGTTOU    23) SIGURG    24) SIGXCPU    25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF    28) SIGWINCH    29) SIGIO    30) SIGPWR
31) SIGSYS    34) SIGRTMIN    35) SIGRTMIN+1    36) SIGRTMIN+2    37) SIGRTMIN+3
38) SIGRTMIN+4    39) SIGRTMIN+5    40) SIGRTMIN+6    41) SIGRTMIN+7    42) SIGRTMIN+8
43) SIGRTMIN+9    44) SIGRTMIN+10    45) SIGRTMIN+11    46) SIGRTMIN+12    47) SIGRTMIN+13
48) SIGRTMIN+14    49) SIGRTMIN+15    50) SIGRTMAX-14    51) SIGRTMAX-13    52) SIGRTMAX-12
53) SIGRTMAX-11    54) SIGRTMAX-10    55) SIGRTMAX-9    56) SIGRTMAX-8    57) SIGRTMAX-7
58) SIGRTMAX-6    59) SIGRTMAX-5    60) SIGRTMAX-4    61) SIGRTMAX-3    62) SIGRTMAX-2
63) SIGRTMAX-1    64) SIGRTMAX    

    32 以下的信号是不可靠信号,33 以上的信号是可靠信号

huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ kill -9 -p 3720         # 向 3720 进程发送 9 号信号,-9 可以替代为 -KILL,或 -SIGKILL
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ kill -STOP -p 3724      # 向 3724 进程发送 STOP 暂停信号
huangshaofeng@huangshaofeng-virtual-machine:~/mywork/linux1$ kill -SIGCONT -p 3724   # 向 3724 进程发送 SIGCONT 恢复运行信号

获取 a.out 程序的进程号:
huangshaofeng@huangshaofeng-virtual-machine:~$ ps aux | grep "a.out"
huangsh+   5975 51.3  0.0   4516   808 pts/0    R+   19:44   0:01 ./a.out
huangsh+   5978  0.0  0.0  16184  1064 pts/1    S+   19:44   0:00 grep --color=auto a.out

17. mount, umount 挂载,卸载
huangshaofeng@huangshaofeng-virtual-machine:~$ df
文件系统           1K-块     已用     可用 已用% 挂载点
udev              982720        0   982720    0% /dev
tmpfs             201492     3248   198244    2% /run
/dev/sda1       40071552 22531340 15678500   59% /
tmpfs            1007440        0  1007440    0% /dev/shm
....
/dev/sdb       262111936 21509888 240602048    9% /media/huangshaofeng/DISK_IMG

设备       启动       起点       末尾       扇区   大小 Id 类型
/dev/sdb1        778135908 1919645538 1141509631 544.3G 72 未知
/dev/sdb2        168689522 2104717761 1936028240 923.2G 65 Novell Netware 386
/dev/sdb3       1869881465 3805909656 1936028192 923.2G 79 未知
/dev/sdb4       2885681152 2885736650      55499  27.1M  d 未知

分区表记录没有按磁盘顺序。

18. 解压文件系统命令

huangshaofeng@huangshaofeng-virtual-machine:~$  sudo tar xzf filesystem.tar.gz -C /opt/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值