1. 文件操作
1.1 find 查找文件
例1:find / -name “test.c”例2:查找当前目录一个月(30天)以前大于100M的日志文件(.log)并删除find ./ -name "*.log" –mtime +30 –type f –size +100M |xargs rm –rf {} ;# 参数解释-name 指定文件名-mtime 指定修改时间(以天为单位) +xx 修改时间大于xx天 -xx修改时间小于xx天-type 不知什么意思 应该是指定文件类型-size 指定文件大小 +xx文件大小大于xx -xx文件大小小于xxxargs 把前一命令输入当作后一命令输出,通常配合管道使用
1.2 grep 查找文件内容
在当前目录及其子目录所有的.cpp文件中查找字符串”example”, 不区分大小写?
grep -i -r example ./*.cpp#-i (ignore):忽略大小写-r (recursion):递归-e :使用正则-i:忽略大小写-v:查找不包括指定内容的行-w:按单词查找-c:统计匹配次数-n:显示行号-r:递归遍历目录查找-A:显示匹配行前面多少行-B:显示匹配行后面多少行-C:显示匹配行前后多少行-include:指定匹配的文件类型-exclude:过滤不需要匹配的文件类型# 例子:多文件查询jieni:grep jieni pika.log zhongzi.log查找包含jieni又包含gui的行:grep jieni pika.log | grep gui查找匹配jieni或者匹配gui的行:grep jieni | gui pika.log显示匹配jieni行的前2行: grep jieni pika.log -A2显示匹配行的后2行: grep jieni pika.log -B2显示匹配行的前后两行:grep jieni pika.log -C2使用正则: grep -e '[a-z]' pika.log查找不含jieni的行: grep -v jieni pika.log统计jieni的行数:grep -c jieni pika.log遍历当前目录和所有子目录匹配:grep -r jieni .在当前目录和子目录中查找所有pika文件中查找jieni: grep -r jieni . --include "*.pika"查找并输出到指定文件: grep jieni pika.log > result.log查找jieni开头的行:grep ^jieni pika.log结尾的行:grep jieni$ pika.log查找空行: 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:提供了一次性的查看进程结果,但所提供的查看结果不是动态连续的
常用
- top: 显示当前运行程序,动态的。常用来查看系统资源使用情况和查看占用系统资源最多的进程。
(top以列形式显示所有的进程,占最多CPU资源的进程会显示在最上面。Ctrl-C终止)
- ps -A
- kill id 杀死某个指定进程
- 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 内核
GPU资源
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
2、修改当前家目录下的 .bashrc 文件 (只对当前用户有效)
vim ~/.bashrc ,在最末尾加入下面的 ,然后 source .bashrc 或者 . .bashrc
export PATH=$PATH:/tmp/xie
3、修改/etc/bashrc 文件 (针对所有用户有效)
vim /etc/bashrc ,在最末尾加入下面的,然后 source /etc/bashrc 或者 . /etc/bashrc
export PATH=$PATH:/tmp/xie
