系统启动与停止

关机

Linux正确的关机流程是sync > shutdown > reboot > halt
sync 将数据由内存同步到硬盘中。
  • shutdown 会给系统计划一个时间关机。它可以被用于停止、关机、重启机器,可以man shutdown 来看一下帮助文档

    shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉大家,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。
    

shutdown –h now 立马关机

shutdown –h 20:25 系统会在今天20:25关机

shutdown –h +10 十分钟后关机

shutdown –r now 系统立马重启

shutdown –r +10 系统十分钟后重启

shutdown -p now 关闭机器

shutdown -c 取消关机命令

+ halt 命令通知硬件来停止所有的 CPU 功能,但是仍然保持通电。你可以用它使系统处于低层维护状态。注意在有些情况会它会完全关闭系统

```shell
halt 关闭系统,等同于shutdown –h now 和 poweroff

halt -p          关闭机器、关闭电源

halt --reboot    重启机器
  • poweroff 会发送一个 ACPI 信号来通知系统关机

    poweroff          关闭机器、关闭电源
    poweroff --halt    停止机器
    poweroff --reboot  重启机器
    
  • reboot 通知系统重启,等同于 shutdown –r now

    # reboot           ### 重启机器
    
    # reboot --halt    ### 停止机器
    
    # reboot -p        ### 关闭机器 
    
  • exit 退出系统 Ctrl+D

最后总结一下,不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中。

关机的命令有 shutdown –h now halt poweroff 和 init 0 , 重启系统的命令有 shutdown –r now reboot init 6。

快捷键

Tab:命令补全文件补齐

Ctrl+c:当前的程序停止

Ctrl+d:键盘输入结束(EOF)相当于输入 exit

程序编译

  • 对于C程序:用gcc hello.c便可编译;
- o file # 将经过gcc处理过的结果存为文件file,默认名称为a.out
-c # 仅对源文件进行编译,不链接生成可执行文件。在对源文件进行查错时,或只需产生目标文件时可以使用该选项
-g #在可执行文件中加入调试信息,方便进行程序的调试。如果使用中括号中的选项。
-O[0、1、2、3] #对生成的代码使用优化,中括号中的部分为优化级别,缺省的情况为2级优化,0为不进行优化。注意,采用更高级的优化并不一定得到效率更高的代码。
-w #禁止所有警告
-wall #生成全部警告

分步编译源程序:
$gcc –E hello.c –o hello.i
$gcc –S hello.c –o hello.s
生成目标文件
命令:
$gcc –c hello.c –o hello.o
生成可执行文件
命令:
$gcc hello.c –o hello
运行程序
$./hellohello gcc!

  • 对于C程序:用g hello.cpp可编译。编译后,均生成a.out的可执行文件;
    键入指令"./a.out",运行程序。

  • 源文件.java

    编译后生成字节码文件.class

    输入javac helloworld.java编译,java helloworld运行

系统目录结构

目录结构

登录系统后,终端输入ls /

image-20220106173334263

目录为树状结构:

image-20220106173440544

  • /bin
    bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。

  • /boot:
    这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

  • /dev :
    dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

  • /etc:
    etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

  • /home
    用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

  • /lib
    lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found
    这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /media
    linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

  • /mnt
    系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

  • /opt
    opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc
    proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
    这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

  • /root
    该目录为系统管理员,也称作超级权限者的用户主目录。

  • /sbin
    s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

  • /selinux
    这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

  • /srv
    该目录存放一些服务启动之后需要提取的数据。

  • /sys

    这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。

    sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。

    该文件系统是内核设备树的一个直观反映。

    当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

  • /tmp
    tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

  • /usr
    usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

  • /usr/bin:
    系统用户使用的应用程序。

  • /usr/sbin:
    超级用户使用的比较高级的管理程序和系统守护程序。

  • /usr/src:
    内核源代码默认的放置目录。

  • /var
    var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

  • /run
    是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

当前目录与上层目录

```
. 	表示当前目录,也可以使用 ./ 来表示
..	表示上级目录,也可以 ../ 来代表
```

SSH远程登录

yum install ssh 						安装ssh
sudo apt-get install openssh-server  
service sshd start 						启动ssh
systemctl status ssh					查看ssh状态
sudo ufw allow ssh						如果有防火墙
ssh-keygen								生成ssh钥匙
  • user 是你在远程机器上的用户名,如果不指定的话默认为当前用户
  • remote 是远程机器的地址,可以是 IP,域名,或者是后面会提到的别名
  • port 是 SSH Server 监听的端口,如果不指定的话就为默认值 22
  • 生成的公钥放在了~/.ssh/id_rsa.pub

  • 私钥放在了 ~/.ssh/id_rsa

  • 只需要远程机器记住公钥

ssh-copy-id user@remote -p port
  • 也可以登录服务器,将公钥粘贴在.ssh/authorized_keys
ssh user@remote -p port 				远程登录

登陆后再输入密码即可

Linux文件属性

文件基本属性

在Linux中,不同的用户对文件有着不同的权限

  • chown (change owner) : 修改所属用户与组

  • chmod (change mode) : 修改用户的权限

    image-20220109110724835

在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组,如:

ls 显示目录文件
ls -a 	隐藏文件
ls  -l	长格式,详细信息
ls –d   当前目录名
ls –dl  当前目录详细信息
ls –c    按修改时间排序

ll 显示全部文件的属性以及文件所属的用户与组,等同于ls -al(centos7情况下不等效)

image-20220109110955182

文件的第一个属性用 d 表示。d 在 Linux 中代表该文件是一个目录文件。

在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等

  • 当为 d 则是目录
  • 当为 - 则是文件;
  • 若是 l 则表示为链接文档(link file);
  • 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
  • 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

不同的颜色代表不同文件

蓝色:目录

绿色:可执行文件

红色:压缩文件

浅蓝色:链接文件

灰色:其他文件

接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已

image-20220109111207785

image-20220109111252110

从左至右用 0-9 这些数字来表示。

0 位确定文件类型,第 1-3 位确定属主(该文件的所有者)拥有该文件的权限。

第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。

其中,第 1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;

2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 - 字符表示,则没有执行权限

文件属主和属组

对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。

同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。

文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。

因此,Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。

在以上实例中,mysql 文件是一个目录文件,属主和属组都为 mysql,属主有可读、可写、可执行的权限;与属主同组的其他用户有可读和可执行的权限;其他用户也有可读和可执行的权限。

对于 root 用户来说,一般情况下,文件的权限对其不起作用。

更改文件属性

  1. chgrp:更改文件属组

语法:

chgrp [-R] 属组名 文件名

参数选项

  • -R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
  1. chown:更改文件属主,也可以同时更改文件属组

语法:

chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
  1. chmod:更改文件9个属性

可以使用数字来代表各个权限,各权限的分数对照表如下:

  • r:4
  • w:2
  • x:1

每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx— 分数则是:

  • owner = rwx = 4+2+1 = 7
  • group = rwx = 4+2+1 = 7
  • others= — = 0+0+0 = 0

所以等一下我们设定权限的变更时,该文件的权限数字就是 770。变更权限的指令 chmod 的语法是这样的:

 chmod [-R] xyz 文件或目录
  • xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
  • -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

举例来说,如果要将 .bashrc 这个文件所有的权限都设定启用,那么命令如下:

[root@www ~]# ls -al .bashrc
-rw-r--r--  1 root root 395 Jul  4 11:45 .bashrc
[root@www ~]# chmod 777 .bashrc
[root@www ~]# ls -al .bashrc
-rwxrwxrwx  1 root root 395 Jul  4 11:45 .bashrc

符号类型改变文件权限

  • user:用户
  • group:组
  • others:其他

那么我们就可以使用 u, g, o 来代表三种身份的权限。

此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:

chmod u +(加入) r 文件或目录
g -(除去) w
o =(设定) x
a
touch test1    # 创建 test1 文件
ls -al test1    # 查看 test1 默认权限
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1
chmod u=rwx,g=rx,o=r  test1    # 修改 test1 权限
ls -al test1
-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1

chmod u=r f1
为f1文件的所有者只赋予读权限
chmod u+w f1
为f1文件的所有者增加写权限
chmod go-rwx f1
取消f1文件对其他用户的读、写、执行权限

拿掉全部人的可执行权限

chmod  a-x test1
ls -al test1
-rw-r--r-- 1 root root 0 Nov 15 10:32 test1

文件目录管理

  • 绝对路径:
    由根目录 / 写起,例如: /usr/share/doc 这个目录
  • 相对路径:
    不是由 / 写起,例如由 /usr/share/doc 要到 /usr/share/man 底下时,可以写成: cd …/man 这就是相对路径的写法

处理目录路径的常用命令

  • ls: 列出目录及文件名
ls -al 目录文件详细信息,包括隐藏文件
ls -al ~
ll     目录文件详细信息,包括隐藏文件
ls -l  目录文件详细信息
ls -d  仅列出目录本身
  • cd:切换目录
cd [相对路径或绝对路径]
cd      进入用户主目录;
cd  / 	进入根目录;
cd  ~	回到/root
cd  ..  返回上级目录(".."为上级目录的意思);  
cd ../..  返回上两级目录;
cd  -  	返回进入此目录之前所在的目录
  • pwd:显示目前的目录
pwd 	显示当前目录
pwd -P 	显示完整的路径(包括连结路径)
  • mkdir:创建一个新的目录
mkdir test  					创建单层目录
mkdir -p test1/test2/test3/test4	 创建多层目录
mkdir -m 711 test2				创建同时赋予权限drwx--x--x 
  • rmdir:删除一个空的目录
rmdir test						删除单层空目录
rmdir -p test1/test2/test3/test4	  删除多层目录
  • cp: 复制文件或目录
cp [-adfilprsu] 来源档 目标档
cp [options] source1 source2 source3 .... directory
  • **-a:**相当于 -pdr 的意思

  • **-d:**若来源档为连结档的属性,则复制连结档属性而非文件本身;

  • **-f:**为强制的意思,若目标文件已经存在且无法开启,则移除后再尝试一次;

  • **-i:若目标档已经存在时,在覆盖时会先询问动作的进行-l:**进行硬式连结的连结档创建,而非复制文件本身;

  • **-p:**连同文件的属性一起复制过去,而非使用默认属性(备份常用);

  • **-r:**递归持续复制,用於目录的复制行为;

  • **-s:**复制成为符号连结档,亦即捷径文件;

  • **-u:**若 destination 比 source 旧才升级 destination

  • -i:提示是否覆盖现有的目标文件

cp  f1.c  f2.c
将文件f1.c复制(已存在),并命名为f2.c
cp *.c  ss
将所有C语言程序拷贝至ss目录中
cp -i f1.c ../f2.c
将当前目录下的文件f1.c 复制到上层 目录中,并取名为f2.c,若上层目录中已经存在f2.c文件,则在覆盖文件前询问用户
  • rm: 删除文件或目录
rm [-fir] 文件或目录
rm -f :就是 force 的意思,忽略不存在的文件,不会出现警告信息;
rm -i :互动模式,在删除前会询问使用者是否动作
rm -r :递归删除
  • mv: 移动文件与目录,或修改文件与目录的名称
mv [-fiu] source destination
mv [options] source1 source2 source3 .... directory
mv f.c r.c #将f.c改名为r.c
-f :如果目标文件已经存在,不会询问而直接覆盖;
-i :若目标文件已经存在时,就会询问是否覆盖
-u :若目标文件已经存在,且 source 比较新,才会升级 

可以使用 man 来查看各个命令的使用文档,如 :man cp

  • nano 创建文件&编辑文件
  • touch 创建文件

文件备份与压缩

  • tar(为文件和目录创建档案)
tar [选项] 文件或者目录

-c:建立一个.tar文件
-v:列出处理过程中的详细信息
-f:指定新文件名
-t:查看已备份文件
-x:解压某个文件
-z:用zip命令压缩或用unzip解压
-u:更新文件

例1:#tar -cvf data.tar *
将当前目录下的所有文件打包成 data.tar 文件
例2:#tar -tvf data.tar
查看 data.tar 文件中包括了哪些文件
例3:#tar -xvf data.tar
将打包的 data.tar 文件解开
例4:#tar -cvzf data.tar.gz *
将当前目录所有文件打包成 data.tar 文件,再用gzip 命令压缩
  • gzip(压缩文件)
gzip [选项] 压缩(解压缩)的文件名
-d 将压缩文件解压
-l 显示每个压缩文件的详细信息
-c 将输出写到标准输出上,并保留原有文件
-r 递归式查找指定目录并压缩其中的所有文件或解压缩
-t 测试、检查压缩文件是否完整
-v 对每一个压缩和解压的文件,显示文件名和压缩比

例1:#gzip -9 f1
以最高压缩比压缩文本文件 f1
例2:#gzip -l f1.gz
查看压缩文件 f1.gz 的详细信息
例3:#gzip -d f1.gz
解压缩文件 f1.gz
  • zip
例:将当前目录下的所有C文件压缩到data.zip文件中
zip data.zip  *.c
  • unzip(展开文件*.zip)
unzip [选项] 压缩文件名.zip

-d 目录将压缩文件解到指定目录下
-v 查看压缩文件目录,但不解压
-t 测试文件有无损坏,但不解压	
-x 文件列表解压缩文件,但不包括指定的

例1:#unzip data.zip –d mydir
创建 mydir 目录,将文件data.zip 解压到此目录
  • tar是用来打包的,没有压缩,生成*.tar文件*
  • gzip是用来压缩的,压缩前可以打包,也可以不打包,生成*.gz文件
  • tar有个参数是-z,打包完再调用gzip进行压缩

文件内容编辑

  • cat 由第一行开始显示文件内容
    • -A :可列出一些特殊字符而不是空白
    • -b :列出行号,空白行不标行号
    • -E :将结尾的断行字节 $ 显示出来;
    • -n :列印出行号,空白行会有行号
    • -T :将 [tab] 按键以 ^I 显示出来;
    • -v :列出一些看不出来的特殊字符
  • tac 从最后一行开始显示,是 cat 的倒着写
  • nl 显示的时候,顺道输出行号
    • -b :指定行号指定的方式,主要有两种:
      -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);
      -b t :如果有空行,空的那一行不要列出行号
    • -n :列出行号表示的方法,主要有三种:
      -n ln :行号在荧幕的最左方显示;
      -n rn :行号在自己栏位的最右方显示,且不加 0 ;
      -n rz :行号在自己栏位的最右方显示,且加 0 ;
    • -w :行号栏位的占用的位数。
  • more 一页一页的显示文件内容
    • 空白键 (space):代表向下翻一页;
    • Enter :代表向下翻『一行』;
    • /字串 :代表在这个显示的内容当中,向下搜寻『字串』这个关键字;
    • :f :立刻显示出档名以及目前显示的行数;
    • q :代表立刻离开 more ,不再显示该文件内容。
    • b 或 [ctrl]-b :代表往回翻页,不过这动作只对文件有用
  • less 与 more 类似,但是比 more 更好的是,他可以往前翻页
    • 空白键 :向下翻动一页;
    • [pagedown]:向下翻动一页;
    • [pageup] :向上翻动一页;
    • /字串 :向下搜寻『字串』的功能;
    • ?字串 :向上搜寻『字串』的功能;
    • n :重复前一个搜寻 (与 / 或 ? 有关!)
    • N :反向的重复前一个搜寻 (与 / 或 ? 有关!)
    • q :离开 less 这个程序;
  • head 只看头几行
head -3 test.cpp 前三行
  • tail 只看尾巴几行
tail [-n number] 文件 
  • grep 查找文件里符合条件的字符串
grep [-abcEFGhHilLnqrsvVwxy][-A<显示行数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
# 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。

用户与用户组管理

用户管理

创建账号

1.添加新的用户账号使用useradd命令,其语法如下:

useradd 选项 用户名

参数说明:

  • 选项:

    • -c comment 指定一段注释性描述。
    • -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
    • -g 用户组 指定用户所属的用户组。
    • -G 用户组,指定用户所属的附加组。
    • -s Shell文件 指定用户的登录Shell。
    • -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
  • 用户名:

    指定新账号的登录名。

# useradd –d  /home/sam -m sam 为登录名sam产生一个主目录 /home/sam
# useradd -s /bin/sh -g group –G adm,root gem

此命令新建了一个用户gem,该用户的登录Shell是 /bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。

删除账号

userdel 选项 用户名   删除一个已有的用户账号
userdel -r sam  	把用户的主目录一起删除

修改账号

usermod 选项 用户名

选项包括-c, -d, -m, -g, -G, -s, -u以及-o等

usermod -s /bin/ksh -d /home/z –g developer sam

将用户sam的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer

用户口令管理

passwd 选项 用户名
  • -l 锁定口令,即禁用账号
  • -u 口令解锁
  • -d 使账号无口令
  • -f 强迫用户下次登录时修改口令

用户组管理

增加用户组

groupadd 选项 用户组
  • -g GID 指定新用户组的组标识号(GID)。
  • -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

删除用户组

groupdel 用户组

修改用户组属性

groupmod 选项 用户组
  • -g GID 为用户组指定新的组标识号。
  • -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
  • -n新用户组 将用户组的名字改为新名字
 groupmod -g 102 group2

将组group2的组标识号修改为102

groupmod –g 10000 -n group3 group2

将组group2的标识号改7为10000,组名修改为group3

如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限

newgrp root

将切换到目的用户组

系统管理

系统管理

  • write
write(向用户发送信息)
write 用户账号 [终端名称]
功能:向系统中某一用户发送信息
write Guest hello
  • free
free(查看当前系统使用情况)
free [选项]
功能:查看当前系统内存的使用情况
选项: 	-b 以字节为单位显示。
			-k 以K 字节为单位显示。
			-m 以M 字节为单位显示。
例: #free –k
以 K 字节为单位查看当前系统内存使用情况

进程管理

  • who
who[选项]
功能:查看当前在线上的用户情况
who
查看当前登录到系统的用户信息:
who –HlT
查看当前登录到系统中用户的详细信息:

-a, --all same as -b -d --login -p -r -t -T -u

-b, --boot
time of last system boot

-d, --dead
print dead processes

-H, --heading
print line of column headings

-l, --login
print system login processes

--lookup
attempt to canonicalize hostnames via DNS

-m     only hostname and user associated with stdin

  • ps
ps [选项]
报告进程的状态
-e 显示所有进程。	-f 全格式
-h 不显示标题。	-l 长格式。
-w 宽输出
-r 只显示正在运行的进程。
-x 显示没有控制终端的进程。
-a 显示终端上所有进程,包括其他用户的进程
-u 查看属于自己的进程详细信息

ps –al查看其它用户的进程的详细信息:
  • kill
Kill [-signal] 进程号
送出一个特定的信号 (signal) 给进程号为pid 的进程
-signal:signal是信号类别;
-p:列出pid,不发送信号

kill -9 pid 终止该进程

image-20220512162402218

网络管理

  • ifconfig
# 只有root可以配置网卡参数,普通用户只能显示网卡信息。
ifconfig -interface [选项] address
功能:显示和配置网络接口

-interface:指定的网络接口名,如eth0 和eth1。
up:激活指定的网络接口卡。
down:关闭指定的网络接口。
broadcast address:设置接口的广播地址
pointopoint:启用点对点方式。
address:设置指定接口设备的IP 地址。
netmask address:设置接口的子网掩码。

ifconfig -a #得到所有网络界面的IP地址。
ifconfig eth0 210.30.99.100 #设置第一块网卡的ip地址
ifconfig eth0 # 查看网卡的ip地址:
Ifconfig eth0 up      
Ifconfig eth0 down# 停止/启用网络接口

  • nslookup
查看域名对应ip
nslookup lrdhappy.com

Server:         183.60.83.19
Address:        183.60.83.19#53

Non-authoritative answer:
Name:   lrdhappy.com
Address: 101.43.108.114
  • ping
ping [选项] IP 地址

-i:指定收发信息的间隔秒数
-c:设置完成要求回应的次数
ping6 检测ipv6

ping -c 4 192.168.1.100 #发4个icmp包
ping -i 2 192.168.1.100 #每间隔 2 秒钟发包

磁盘管理

  • df:列出文件系统的整体磁盘使用量
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示
  • du:检查磁盘空间使用量
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
  • fdisk:用于磁盘分区
fdisk [-l] 装置名称
fdisk -l 				列出所有分区信息
fdisk /dev/hdc

磁盘格式化

mkfs [-t 文件系统格式] 装置文件名
-t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)

磁盘检验

fsck [-t 文件系统] [-ACay] 装置名称
  • -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
  • -s : 依序一个一个地执行 fsck 的指令来检查
  • -A : 对/etc/fstab 中所有列出来的 分区(partition)做检查
  • -C : 显示完整的检查进度
  • -d : 打印出 e2fsck 的 debug 结果
  • -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
  • -R : 同时有 -A 条件时,省略 / 不检查
  • -V : 详细显示模式
  • -a : 如果检查有错则自动修复
  • -r : 如果检查有错则由使用者回答是否修复
  • -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复。

磁盘挂载与卸除

Linux 的磁盘挂载使用 mount 命令,卸载使用 umount 命令

mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n]  装置文件名  挂载点
  • -f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
  • -n :不升级 /etc/mtab 情况下卸除。
umount /dev/hdc6     
mount /dev/hdc6 /mnt/hdc6

vi/vim

vi-vim-cheat-sheet-sch1

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。
  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式
  • q 退出程序
  • w 保存文件
  • dw 删除光标所在的单词
  • dd 删除当前行
  • d$(D)删除光标至行尾所有字符
  • /abc 从前查询abc
  • ?acb 从后查询abc
  • n 向前继续查询
  • N 向后继续查询
  • r 替换光标所在的字符
  • cw 替换一个单词
  • cb 替换光标所在的前一字符
  • c$ 替换字光标位置至行尾的所有字符
  • cc 替换当前行
  • yw 将光标所在单词拷入剪贴板
  • Y 将光标至行尾的拷入剪贴板
  • yy 将当前行拷入剪贴板
  • p 将剪贴板中的内容粘贴在光标后
  • P将剪贴板中的内容粘贴在光标前
  • :set nu( :set number ) 显示行号
  • :set nonu( :set nonumber ) 不显示行号
vim runoob.txt 建立一个名为 runoob.txt 的文件

vi 文件名 就能够进入 vi 的一般模式了。请注意,记得 vi 后面一定要加文件名,不管该文件存在与否

Ctrl+Z+Z也可以退出

第一部分:一般模式可用的光标移动、复制粘贴、搜索替换等

移动光标的方法
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 “30j” 或 “30↓” 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20 则光标会向后面移动 20 个字符距离。
0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个档案的最后一行(常用)
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
n n 为数字。光标向下移动 n 行(常用)
搜索替换
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则: 『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g:%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc:%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)
删除、复制与贴上
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd 删除游标所在的那一整行(常用)
ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦!
. 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)

第二部分:一般模式切换到编辑模式的可用的按钮说明

进入输入或取代的编辑模式
i, I 进入输入模式(Insert mode): i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)
a, A 进入输入模式(Insert mode): a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用)
o, O 进入输入模式(Insert mode): 这是英文字母 o 的大小写。o 为在目前光标所在的下一行处输入新的一行; O 为在目前光标所在的上一行处输入新的一行!(常用)
r, R 进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)
[Esc] 退出编辑模式,回到一般模式中(常用)

第三部分:一般模式切换到指令行模式的可用的按钮说明

指令行的储存、离开等指令
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
ZZ 这是大写的 Z 喔!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出)
ZQ 不保存,强制退出。效果等同于 :q!
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!
vim 环境的变更
:set nu 显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu 与 set nu 相反,为取消行号!

vim 中批量添加注释

方法一 :块选择模式

批量注释:

Ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 //#,输入完毕之后,按两下 ESCVim 会自动将你选中的所有行首都加上注释,保存退出完成注释。

取消注释:

Ctrl + v 进入块选择模式,选中你要删除的行首的注释符号,注意 // 要选中两个,选好之后按 d 即可删除注释,ESC 保存退出。

方法二: 替换命令

批量注释。

使用下面命令在指定的行首添加注释。

使用名命令格式: :起始行号,结束行号s/^/注释符/g(注意冒号)。

取消注释:

使用名命令格式: :起始行号,结束行号s/^注释符//g(注意冒号)

  • 自动补全:ctrl + n

  • \rr 运行程序

  • \rc 保存并编译程序(会生成二进制文件)

yum命令

yum [options] [command] [package ...]
  • **options:**可选,选项包括-h(帮助),-y(当安装过程提示选择全部为 “yes”),-q(不显示安装的过程)等等。
  • **command:**要进行的操作。
  • **package:**安装的包名。

yum常用命令

  • 列出所有可更新的软件清单命令:yum check-update
  • 更新所有软件命令:yum update
  • 仅安装指定的软件命令:yum install <package_name>
  • 仅更新指定的软件命令:yum update <package_name>
  • 列出所有可安裝的软件清单命令:yum list
  • 删除软件包命令:yum remove <package_name>
  • 查找软件包命令:yum search
  • 清除缓存命令:
    • yum clean packages: 清除缓存目录下的软件包
    • yum clean headers: 清除缓存目录下的 headers
    • yum clean oldheaders: 清除缓存目录下旧的 headers
    • yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的 headers
yum -y install wget

apt命令

 apt [options] [command] [package ...]
  • **options:**可选,选项包括 -h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
  • **command:**要进行的操作。
  • package:安装的包名。

apt 命令执行需要超级管理员权限(root)

apt 常用命令

  • 列出所有可更新的软件清单命令:sudo apt update

  • 升级软件包:sudo apt upgrade

    列出可更新的软件包及版本信息:apt list --upgradeable

    升级软件包,升级前先删除需要更新软件包:sudo apt full-upgrade

  • 安装指定的软件命令:sudo apt install <package_name>

    安装多个软件包:sudo apt install <package_1> <package_2> <package_3>

  • 更新指定的软件命令:sudo apt update <package_name>

  • 显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:sudo apt show <package_name>

  • 删除软件包命令:sudo apt remove <package_name>

  • 清理不再使用的依赖和库文件: sudo apt autoremove

  • 移除软件包及配置文件: sudo apt purge <package_name>

  • 查找软件包命令: sudo apt search

  • 列出所有已安装的包:apt list --installed

  • 列出所有已安装的包的版本信息:apt list --all-versions