1. 文件操作

1.1 find 查找文件

  1. 1
  2. find / -name test.c
  3. 2:查找当前目录一个月(30天)以前大于100M的日志文件(.log)并删除
  4. find ./ -name "*.log" mtime +30 type f size +100M |xargs rm rf {} ;
  5. # 参数解释
  6. -name 指定文件名
  7. -mtime 指定修改时间(以天为单位) +xx 修改时间大于xx -xx修改时间小于xx
  8. -type 不知什么意思 应该是指定文件类型
  9. -size 指定文件大小 +xx文件大小大于xx -xx文件大小小于xx
  10. xargs 把前一命令输入当作后一命令输出,通常配合管道使用

1.2 grep 查找文件内容

在当前目录及其子目录所有的.cpp文件中查找字符串”example”, 不区分大小写?

  1. grep -i -r example ./*.cpp
  2. #
  3. -i (ignore):忽略大小写
  4. -r (recursion):递归
  5. -e :使用正则
  6. -i:忽略大小写
  7. -v:查找不包括指定内容的行
  8. -w:按单词查找
  9. -c:统计匹配次数
  10. -n:显示行号
  11. -r:递归遍历目录查找
  12. -A:显示匹配行前面多少行
  13. -B:显示匹配行后面多少行
  14. -C:显示匹配行前后多少行
  15. -include:指定匹配的文件类型
  16. -exclude:过滤不需要匹配的文件类型
  17. # 例子:
  18. 多文件查询jieni:grep jieni pika.log zhongzi.log
  19. 查找包含jieni又包含gui的行:grep jieni pika.log | grep gui
  20. 查找匹配jieni或者匹配gui的行:grep jieni | gui pika.log
  21. 显示匹配jieni行的前2行: grep jieni pika.log -A2
  22. 显示匹配行的后2行: grep jieni pika.log -B2
  23. 显示匹配行的前后两行:grep jieni pika.log -C2
  24. 使用正则: grep -e '[a-z]' pika.log
  25. 查找不含jieni的行: grep -v jieni pika.log
  26. 统计jieni的行数:grep -c jieni pika.log
  27. 遍历当前目录和所有子目录匹配:grep -r jieni .
  28. 在当前目录和子目录中查找所有pika文件中查找jieni: grep -r jieni . --include "*.pika"
  29. 查找并输出到指定文件: grep jieni pika.log > result.log
  30. 查找jieni开头的行:grep ^jieni pika.log
  31. 结尾的行:grep jieni$ pika.log
  32. 查找空行: grep ^$ pika.log

1.3 wc 统计文件字数

利用wc指令我们可以计算文件的Byte数、字数、或是列数。
若不指定文件名称、或是所给予的文件名为”-“,则wc指令会从标准输入设备读取数据。

wc testfile testfile_1 testfile_2  #统计三个文件的信息  
结果:
3 92 598 testfile                    #第一个文件行数为3、单词数92、字节数598  
9 18 78 testfile_1                   #第二个文件的行数为9、单词数18、字节数78  
3 6 32 testfile_2                    #第三个文件的行数为3、单词数6、字节数32  
15 116 708 总用量                    #三个文件总共的行数为15、单词数116、字节数708 

# 附加参数:[-clw]
-c或--bytes或--chars 只显示Bytes数。
-l或--lines 显示行数。
-w或--words 只显示字数。

1.4 批量删除

# way1
rm *.c

# way2
find ./  -maxdepth 1 -name "*.c" -maxdepth 1 | xargs rm
# -maxdepth 1:表示是当前目录,不包括其子目录。
# (参数要写在其他参数的前面,同时在路径的后面)

# 用 xargs 是由于很多命令不支持 | 管道来传递参数,
# 而日常工作中有这个必要,所以就有了 xargs 命令

cat 文件拼接

1:cat file1 file2 > file3 :将两个文件拼接在一起生成一个新的文件
2:cat file1 >> file2  :将文件1直接接在文件2的结尾

文件内容排序、去重

sort demo.txt|uniq
注意:uniq是删除相邻的重复行,故要先排序

2. 进程管理

2.1 命令行

操作进程

  • Ctrl+c是强制中断程序的执行,回到shell。
  • Ctrl+z的是将任务中断,但是此任务并没有结束,只是在后台中维持挂起的状态。
  • Ctrl+d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。
  • fg命令把被中断的任务放在前台执行。
  • bg命令把被中断的任务放在后台执行。
  • &: 运行命令时,在命令末尾加上 & 可让命令在后台执行

  • shut down: 重启系统

  • halt: 命令关闭系统

例如:
vi一个文件时,如果要用shell执行别的操作,可不关闭vi,使用Ctrl+z,shell会将vi进程挂起,结束了操作之后,可以用fg命令继续使用vi。

查看进程

  • jobs 查看当前有多少在后台运行的进程
  • ps:列出系统中当前运行的那些进程
  • pg:提供了一次性的查看进程结果,但所提供的查看结果不是动态连续的

常用

  1. top: 显示当前运行程序,动态的。常用来查看系统资源使用情况和查看占用系统资源最多的进程。

(top以列形式显示所有的进程,占最多CPU资源的进程会显示在最上面。Ctrl-C终止

  1. ps -A
  2. kill id 杀死某个指定进程
  3. kill -9 id 强制杀死顽固的进程

2.2 程序内

EXEC函数

使用fork或vfork创建子进程后,子进程通常会调用exec函数来执行另外一个程序。
系统调用exec用于执行一个可执行程序以代替当前进程的执行映像。
exec调用没有生成新进程。一个进程一旦调用exec函数,它本身就“死亡”了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段和堆栈段,唯一保留的就是进程ID。也就是说,对系统而言,还是同一个进程,不过执行的已经是另外一个程序了。

3. 网络与防火墙

3.1 查看网络端口

netstat命令是一个监控TCP/IP网络的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。

netstat [选项]
-a 或--all:显示所有连线中的Socket;
-p 或--programs:显示正在使用Socket的程序识别码和程序名称;
-t 或--tcp:显示TCP传输协议的连线状况;
-u 或--udp:显示UDP传输协议的连线状况;
-x 或--unix:此参数的效果和指定"-A unix"参数相同;
--ip或--inet:此参数的效果和指定"-A inet"参数相同。

例如:
netstat -aptn

3.2 配置防火墙

3. 压缩/解压

tar

压缩:tar zcvf 文件名.tar.gz 源文件(目录)
解压:tar zxvf 文件名.tar.gz

z表示使用gzip压缩 所以才有后面的.gz, 
c表示创建这个压缩包,
v是可视,能看到其打包和压缩的过程,
f表示文件

j表示使用bzip2压缩
x表示解压缩

其他

tar是操作.tar的命令
gzip是压缩.gz压缩包的命令
compress:压缩.Z文件
uncompress:解压缩.Z文件

4. 查看CPU/GPU/磁盘/内存

如何查看Linux 内核

uname -a
cat /proc/version

GPU资源

nvidia-smi

CPU

# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数

# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l

内存

cat /proc/meminfo

free -m:查看内存和cpu使用情况

存储

# 查看某个目录的空间
du -sh [目录名]


磁盘管理

网络管理员在/opt分区上安装应用软件,提示磁盘可用空间不足,解决需要的指令和参数是

1. umount /opt

2. resize

3. parted
parted 有两种运行模式:命令行模式和交互模式。
与fdisk 的交互模式交互模式不同,在 parted 的交互模式下执行命令,一旦按回车键确认,命令就马上执行,对磁盘的更改就立刻生效。

# parted 命令的常用格式是:
1、parted [选项] <硬盘设备名>
2、parted [选项] <硬盘设备名> <子命令> [<子命令参数>]

# 格式(1)用于进入parted 的交互模式。
在该模式下输入parted的子命令对指定的硬盘进行分区等操作。
quit 命令用于退出交互模式。
# 格式(2)直接在命令行方式下对指定的硬盘进行分区等操作。

# 其中常用的选项为:
-h, ––help — 显示求助信息
-i, ––interactive — 在必要时提示用户
-l, ––list — 显示所有磁盘设备的分区表
-s, ––script — 从不提示用户
-v, ––version — 显示版本


5. 用户


UID/GID

UID 范围 用户身份
0 超级用户。UID 为 0 就代表这个账号是管理员账号。在 Linux 中,如何把普通用户升级成管理员呢?只需把其他用户的 UID 修改为 0 就可以了,这一点和 Windows 是不同的。不过不建议建立多个管理员账号。
1~499 系统用户(伪用户)。也就是说,此范围的 UID 保留给系统使用。其中,1~99 用于系统自行创建的账号;100~499 分配给有系统账号需求的用户。
其实,除了 0 之外,其他的 UID 并无不同,这里只是默认 500 以下的数字给系统作为保留账户,只是一个公认的习惯而已。
500~65535 普通用户。通常这些 UID 已经足够用户使用了。但不够用也没关系,2.6.x 内核之后的 Linux 系统已经可以支持 232 个 UID 了。

/etc/passwd:包含用户系统用户(伪用户)
![``2_UG9(RGMOBDO56MGBLT.png
格式:用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
(1)”x” 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中
(2) /etc/passwd 文件的第四个字段GID中看到的 ID 是这个用户的初始组

/etc/group 包含用户组信息
组名:密码:GID:该用户组中的用户列表

GID = { 初始组,附加组 }
初始组,指用户登陆时就拥有这个用户组的相关权限。每个用户的初始组只能有一个,通常就是将和此用户的用户名相同的组名作为该用户的初始组
附加组,指用户可以加入多个其他的用户组,并拥有这些组的权限

用户操作

useradd

命令:useradd [选项] 用户名

选项 含义
-u UID 手工指定用户的 UID,注意 UID 的范围(不要小于 500)。
-d 主目录 手工指定用户的主目录。主目录必须写绝对路径,而且如果需要手工指定主目录,则一定要注意权限;
-c 用户说明 手工指定/etc/passwd文件中各用户信息中第 5 个字段的描述性内容,可随意配置;
-g 组名 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录。
-G 组名 指定用户的附加组。我们把用户加入其他组,一般都使用附加组;
-s shell 手工指定用户的登录 Shell,默认是 /bin/bash;
-e 曰期 指定用户的失效曰期,格式为 “YYYY-MM-DD”。也就是 /etc/shadow 文件的第八个字段;
-o 允许创建的用户的 UID 相同。例如,执行 “useradd -u 0 -o usertest” 命令建立用户 usertest,它的 UID 和 root 用户的 UID 相同,都是 0;
-m 建立用户时强制建立用户的家目录。在建立系统用户时,该选项是默认的;
-r 创建系统用户,也就是 UID 在 1~499 之间,供系统程序使用的用户。由于系统用户主要用于运行系统所需服务的权限配置,因此系统用户的创建默认不会创建主目录。

注意:若不使用 -m 选项,则不会创建主目录。
(为了避免遗漏的设置,可使用adduser按照提示)

passwd

命令:
(1)passwd xxx:修改指定用户xxx的密码
(2)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 个字段。

更改用户信息

(1)法一:使用 Vim 文本编辑器手动修改涉及用户信息的相关文件
(2)法二: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。

删除用户

userdel -r xxx
若使用userdel haha 命令删除该用户时,并不能删除该用户的所有信息,只是删除了/etc/passwd、/etc/shadow、/etc/group/、/etc/gshadow四个文件里的该账户和组的信息。默认情况下创建一个用户账号,会创建一个家目录和一个用户邮箱(在/var/spool/mail目录以用户名命名)
-r 可以删除用户相关文件。

切换用户

命令:su xxx 或 su - xxx
注意,使用 su 命令时,有 - 和没有 - 是完全不同的,- 选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的

  • 我们知道,环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行。
  • 有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。

添加文件用户权限chmod

a表示对所有用户
u表示系主用户
g表示同组用户
o表示其他用户

例1:文件exer1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限。
chmod a+x,g+w exer1
或chmod 775 exer1
备注
a:all
g:group

6. 定时

crontab

通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。这个命令非常适合周期性的日志分析或数据备份等工作。
格式域:m h D M weekday cmd
minute hour day-of-month month-of-year day-of-week commands
这些项都不能为空,必 须填入。如果用户不需要指定其中的几项,那么可以使用代替。因为是统配符,可以代替任何字符,所以就可以认为是任何时间,也就是该项被忽略了。

# 例1: 计划让系统自动在每个月的第一天早上4点钟执行一个维护工作
00 4 1 1-12 * /maintenance.pl

# 例2:
# 命令:01 07 * * 5 /usr/bash /usr/local/run.sh
# 表示: 每周五7点01分执行run脚本

命令

# 查看任务
crontab -l

# 编辑任务:crontab -e (可 增加任务、删除任务、修改任务)
# 删除指定任务方法1: 
crontab -e

#  删除指定任务方法2
# sed -i '/test2.sh/d' /var/spool/cron/root # 删除指定任务
# sed -i '/^$/d' /var/spool/cron/root # 删除空行

7.日志

/var/log/lastlog:记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看
/var/log/wtmp: 永久记录所有用户的登陆、注销信息,同时记录系统的后动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看.
/var/log/utmp:记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。二进制文件,同样,这个文件不能直接用Vi查看(要使用w、who、users等命令查看?)

8.环境变量

# echo $环境变量名
常见环境变量:
HOME:用于保存用户主目录的完全路径名。 
PATH:用于保存用冒号分隔的目录路径名,shell将按PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名称一致的可执行文件将被执行。 
SHELL:当前用户使用的Shell 
UID:当前用户的UID 
LOGNAME:当前用户的登录名 
HOSTNAME:主机名称

查看环境变量

Linux中set 、env 和 export 都可以查看环境变量

  • set命令显示当前shell的变量,包括当前用户的变量,set主要用来设置sh的参数与选项
  • env命令显示当前用户的变量,env用来在构建的环境中运行命令
  • export命令显示当前导出成用户变量的shell变量

每个shell都有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如HOME,SHELL等这些变量。

export也可导出环境变量,但只在当前登录下有效,要想长期有效,需要修改/etc/bashrc(或~/.bashrc),修改完后,source 该文件。

Linux下环境变量的设置

如果想将一个路径加入到 $PATH 中,可以有几种方法
比如我想将 /tmp/xie 路径加入到 $PATH 变量中
1、控制台中设置 (只对当前shell有效)
PATH=$PATH:/tmp/xie
linux常用操作 - 图1

2、修改当前家目录下的 .bashrc 文件 (只对当前用户有效)
vim ~/.bashrc ,在最末尾加入下面的 ,然后 source .bashrc 或者 . .bashrc
export PATH=$PATH:/tmp/xie
linux常用操作 - 图2

3、修改/etc/bashrc 文件 (针对所有用户有效)
vim /etc/bashrc ,在最末尾加入下面的,然后 source /etc/bashrc 或者 . /etc/bashrc
export PATH=$PATH:/tmp/xie
linux常用操作 - 图3