目录
Linux相关命令行学习
命令参数基本形式
command parameters
command
指的是要使用的命令名称parameters
参数列表
短参数:
-
符号后面加上一个字母,且区分大小写
command -a
当然可以添加多个短参数
command -a -b -c -d
初次之外,甚至可以将短参数连在一起
command -abcd
举个🌰:
# 列出当前工作目录下的所有文件
ls -a
# 除了列出所有意外,还列表显示详细信息
ls -la
长参数:
--
后面添加一个英语单词,或多个字母
command --apple
但是如果存在多个
长参数,则不能像短参数那样写在一起,必须分开
command -apple --car --cat
除此意外,短参数还能和长参数混合使用
:
ls -l --all
参数传值
有些参数必须要赋值才行,赋值的话也很简单
短参数赋值,直接在后面追加值
即可:
command -a 666
而长参数,则需要添加 =
来赋值:
command --all=666
可以看到,短参数方便,但不好直观看出参数的作用,而长参数比较繁琐,但可以直接看出参数的作用
其它参数
有些命令可能会有自身规定
的其它参数形式,这时候就要查询帮助文档了
小结
- 命令可直接使用,也可带上参数,用于指定选项
- 参数有
-
+单个字母
或者--
+多个字母
的形式 - 特殊的命令还会有自身特殊的参数给定形式
基本命令操作
获取命令
补全一个命令
命令前几个字母 + tab键
可以尝试查找补全想输入的命令
如果待选择的命令过多,还会提示是否全部展示:
此时输入 y
可以展示所有待命令。
除了补全命令意外,使用tab
键 还可以补全当前目录下的文件名称
查找以前输入的命令
方法1:
使用方向键的 ↑
和 ↓
,快速的切换到上一个/下一个命令
简单方便,但是不适合查找很久前输入过的问题
方法2
使用快捷键 control + r
转换到查找命令的功能下,输入直接输入过的命令中存在的字母,则会自动补全
方法3
使用 history
命令,可以列出之前所有输入过的命令,并且携带编号
要快速的调用输入过的命令时候,使用 !
+ 编号
即可
常见快捷键
在终端:
快捷键 | 作用 |
---|---|
ctrl + l | 清空屏幕 |
ctrl + d | 传递EOF 结束符号 |
shift + pageUp | 向上滚屏 |
shift + pageDo | 向下滚屏 |
编辑命令时:
快捷键 | 作用 |
---|---|
ctrl + a | 光标跳到当前行开头 |
ctrl + e | 光标跳到当前行的结尾 |
ctrl + u | 删除所有 光标左边 的字符 |
ctrl + k | 删除所有 光标右边 的字符 |
ctrl + w | 删除光标左边 的一个单词 |
ctrl + y | 粘贴用上面命令删除的字符串 |
文件相关操作
linux文件组织结构:
在linux下,一切皆为文件
有个叫根目录 /
的目录,这个目录包含了所有
其他的文件和目录
目录名 | 说明 |
---|---|
bin | 存放用户的可执行文件 |
boot | 和linux启动相关的文件 |
dev | 存放设备文件,目录中每个文件对应一个设备 |
etc | 法语(et cetera) 放一些零零散散的文件,比如配置文件 |
home | 用户的私人目录 |
lib | 存放程序运行时所需库文件 .so文件 |
media | 通过media的子目录来访问外设中的内容 ,比如U盘,DVD |
mnt | mount挂载缩写,用于临时挂载一些装置 |
opt | optional application software package 可选的应用软件包,安装的第三方插件 |
root | 超级用户root的主目录,其他用户位于/home |
sbin | system binary 系统二进制文件,系统级重要的可执行文件 |
srv | service服务,包含一些网络服务启动之后 所需要取用的数据 |
tmp | 临时存放文件的地方 |
usr | Unix Software Resource Unix 操作系统软件资源,非常大,存放了大部分用户可调用的程序 |
var | variable 可变的,存放一些动态的数据,比如说日志 |
pwd & which
pwd : print working directory
打印当前工作目录名称
pwd
# /home/mao
which
用于获取命令的可执行文件的位置
比如说想获取pwd
命令文件的位置:
which pwd
# 打印 /bin/pwd
获取自身的位置:
which which
# 打印 /usr/bin/which
ls & cd & du
ls : list
,列出当前工作目录下的文件和文件夹
一般列出来以后,根据类型的不同,颜色也不同
ls
如果发现使用ls
并没有显示颜色,可以添加参数来显示:
ls --color=auto
初次之外,ls
还可以有其它很多参数
参数 | 作用 |
---|---|
-a | 显示所有的文件,包括隐藏文件 |
-l | 以列表的形式显示,并且显示很多详细信息 |
-h | human-readable 将使用合适的单位进行显示 |
-t | time 按文件最近一次修改时间排序 |
cd : change directory
改变当前的工作目录,后面接要切换到的目录。支持绝对路径和相对路径
cd /usr
cd app/libs
cd ..
: 切换到父目录cd ~
: 切换到当前用户的家目录cd
: 同上cd /
: 切换到根目录
du : disk usage
获取文件和目录所占的空间大小。
du
不过这样不方便查看,可以使用-h
参数,使用合适的单位展示:
du -h
默认情况下,du
命令只显示目录的大小,如果还要显示文件
的大小,需要使用 -a
参数
如果只想知道当前目录的总大小,则可以使用 -s
参数,只输出总大小,不输出子目录的信息
cat & less
cat : concatenate
一次性显示文件的所有内容
cat xxx.py
# 终端输出xxx.py中的内容
由于是直接全部显示在终端中,所以cat
命令只适合小文件。
如果想在展示文件内容的时候加上行号,可以使用 -n
参数
less : 分页显示文件中的内容
less 命令会分一页一页的显示文件内容,使我们可以方便的在终端里阅读。
less test.py
less
会读入文件开始的若干行,至于具体几行,就看屏幕的高度了,这样就能慢慢的往后继续读
当然,需要用户自己去翻页,于是又有了一些快捷键:
按键 | 作用 |
---|---|
空格 | 下一页 |
b | 上一页 |
d | 下半页 |
u | 上半页 |
回车 | 下一行 |
y | 上一行 |
q | 退出less 命令 |
= | 显示当前所在位置 包括行数 以访问占比 |
h | 打开帮助文档 使用 q 离开 |
/ | 进入搜索模式,开始搜索 |
head & tail
head : 显示文件开头的几行
默认会显示文件的头10
行
head xxx.py
当然也可以使用 -n
参数来控制到底显示最开始的多少行
head -n 20 xxx.py
tail : 显示文件尾部几行,默认为10行
也可使用 -n
来指定到底显示多少行
除此之外,还可以使用 -f
参数来实时追踪文件的更新内容:
tail -n 5 xxx.py
如果 xxx.py
文件尾部有追加新的内容,则可以里面查看到。
默认 tail -f
会每隔 1s 检查一次文件是否有新的内容 也可以自己设置刷新间隔时间:
# 每隔2s检查一次
tail -n 5 -s 2 xxx.py
touch & mkdir
touch : 创建一个空白文件
# 创建一个名为 a.py 的文件
touch a.py
# 当然可以联系创建
touch a.py b.py
# 如果名字中有空格,则需要加上 ""
touch "a b.py"
mkdir : make directory
创建一个目录
用法和 touch
类似,可以创建单个目录,也可连续创建目录,目录名也可有空格
除此之外,使用 -p
参数还可以递归的进行创建文件夹
mkdir a/b/c
先创建a
再创建b
再创建c
cp & mv & rm
cp : copy
拷贝一个文件/目录
# 拷贝a.py文件 并将名称设置为b.py
cp a.py b.py
# 将 a.py文件复制到 www 文件夹中
cp a.py www/
# 将 a.py文件复制到 www 文件夹中 并重命名为b.py
cp a.py www/b.py
如果需要拷贝目录
则要加上 -r
参数
cp -r www/ qqq/
不仅如此,cp
还支持通配符 *
# 将所有的py文件拷贝到www文件夹中
cp *.py www/
mv : move
移动/重命名 文件/文件夹
# 将a.py文件重命名为b.py
mv a.py b.py
# 将a.py文件移动到www文件夹下
mv a.py www/
# 当然也支持通配符
mv *.py www/
rm : remove
删除文件和目录
该命令需要谨慎使用
# 直接删除a.py文件
rm a.py
# 连续删除多个文件
rm a.py b.py c.py
- 使用
-f
(force) 参数时,不会询问是否删除,强制删除 - 使用
-r
(recursive) 递归的删除其包含的子目录和文件 - 如果将
-rf
组合在一起使用,会非常危险
ln
ln : link
链接,用于创建文件/文件夹的链接
linux下有软链接
和硬链接
两种链接
- 硬链接 : 直接指向被创建文件的innode所标识的
内容
- 软链接 : 指向目标文件的
文件名
,而不是文件内容
因此,如果b
是 a
的硬链接,必须将 a和b
全部删除,才能保证内容被删除
而如果 b
是 a
的软链接,删除 a
以后,内容就可被删除,而 b
由于所指向的文件不见了,则变成了 死链接
初次之外,只有软链接
可以指向目录,硬链接不行
# 创建a的硬链接
ln a b
# 创建a的软链接
ln -s a b
权限相关
在 linux 中可以创建许多的用户
,且被划分在不同的群组
当中
而用户中,有个root
,有权利做任意事情
sudo
sudo : substitute user do
成为root
用户进行命令执行
# 暂时成为root用户
sudo whoami
# root
# 一直成为root
# 输入 ctrl + d 就可以退出root
sudo su
用户管理相关
adduser : 添加一个新用户,必须以root
来添加
adduser mao
# Adding user `mao' ...
# Adding new group `mao' (1000) ...
# Adding new user `mao' (1000) with group `mao' ...
# Creating home directory `/home/mao' ...
# Copying files from `/etc/skel' ...
# Enter new UNIX password:
# 接下来输入密码即可
passwd : 修改一个用户的密码
passwd mao
# Enter new UNIX password:
# Retype new UNIX password:
# passwd: password updated successfully
deluser : 删除一个用户
deluser mao
# Removing user `mao' ...
# Warning: group `mao' has no more members.
# Done.
删除的时候不会重复确认,慎用
删除用户的时候,如果要删除用户的家目录,可以加上 --remove-home
参数,否则得手动删除
deluser --remove-home thomas
群组管理
如果添加一个用户 mao
,且还没有为其设置所属组,那么会自动创建一个同名的组,并将其放入该组中
addgroup : 创建新的组
addgroup student
# Adding group `student' (GID 1000) ...
# Done.
usermod :user modify
用于修改用户的参数
使用 -g
参数可以修改组
# 将用户 mao 的组修改为 student
usermod -g student mao
并且可以通过 -G
参数一次添加到多个组中:
usermod -G a,b mao
而 -G
会把用户从原先的群组中剔除,如果想追加,则需要添加 -a
参数
usermod -aG c mao
追加群组的时候,一定要用大写的 -G
这个参数,不能用小写的 -g
这个参数
groups : 查询用户所属组
当用户组被修改以后,可以通过该命令查看一下是否修改成功
groups mao
# student
# 不加参数的话,则会显示当前用户所属群
groups
当然一个用户也可以属于多个组
delgroup : 删除群
# 后面直接添加群名即可
delgroup c
# Removing group `c' ...
# Done.
文件权限管理
chown : change owner
修改文件的所属者
chgrp : change group
修改文件所属的组
可以将文件的所属者给修改:
chown + 用户 + 文件
# 将 t.py 文件的所属者修改为mao
chown mao t.py
chgrp 用法类似:
chgrp mao t.py
chown
除了可以修改所属用于以外,也可以修改所属组
:
# : 分隔用户和组
chown mao:mao a.py
添加 -R
参数,可以递归的修改文件夹中所有文件和文件夹的所属用户
# : 分隔用户和组
chown -R mao:mao www/
chmod : 修改文件的访问权限
每一个文件都会有一系列的权限属性,标志了哪些用户
有哪些操作的权限
一个用户对于一个文件的操作来说,一共有三种操作 : 读
写
执行
使用命令 ls -l
可以查看当前工作目录下的文件,各种用户都拥有哪些权限:
第一列的字母就是描述了文件权限相关的信息:
字母 | 意义 |
---|---|
d | 文件是一个目录 |
l | 文件是一个链接 |
r | 读权限 |
w | 写权限 |
x | 执行权限 |
如果一个 x
在 d
上,则表示这个目录可以被切换进去,如果还有 r
的话,则表示可以查询到该目录的内容
第一列被划分为 10
个字符,有各自的含义
- 1 : 表示该文件类型,普通、目录、链接
- 2-4 : 表示文件
拥有者
的操作权限 - 5-7 : 表示文件
所属组
拥有的操作权限 - 8-10 : 表示
其它用户
所拥有的操作权限
对于每一类用户,用三个字符来表示三种不同权限的方式:
r--
: 只有读权限-wx
: 有写和执行的权限r-x
: 有读和执行的权限- 以此类推
修改权限:
数字法描述 : 将 rwx
分别标志位不同的数字,使得任意相加后不会重复
权限 | 值 |
---|---|
r | 4 |
w | 2 |
x | 1 |
此时可以数字来方便的表示任意权限方案 :
方案 | 值 |
---|---|
--- | 0 |
r-- | 4 |
rw- | 6 |
-wx | 3 |
rwx | 7 |
… | … |
此时如果给一个 640
则表示:
拥有者
有读,写
权限所属组
有读
权限其他用户
没有权限
此时就可以直接使用 chmod
命令来修改了:
# 给所有用户全部权限
chmod 777 a.py
字母分配法 : 使用权限
和用户
的简写来相对的分配权限
符号 | 意义 |
---|---|
u | 文件所有者 |
g | 文件所属群组 |
o | 其他用户 |
a | 所有用户 |
+ | 添加权限 |
- | 去除权限 |
= | 分配权限 |
任意搭配以后,就可以自由的分配权限了:
# 给所属用户 添加rx权限
chmod u+rx a.py
# 给所属组添加写 w权限
chmod g+w a.py
# 移除其他用户的执行权限
chmod o-x a.py
# 所有用户添加写权限
chmod +x a.py
# 直接赋给权限
chmod u=rwx,g=r,o=- a.py
使用 -R
可以递归的修改子目录中文件权限
文件查找
locate & find
locate : 快速查找,用于定位要查找的文件
locate nohup.out
# /root/my-app/nohup.out
# /root/nohup.out
# /root/rude_interview/app/nohup.out
可能存在多个同名文件,找到后都会打印出来
但是,如果新建一个新的文件a.py
以后,使用locate
命令却无法查找到这个a.py
文件。
这就是 locate
命令的缺点 : locate
命令不会直接对磁盘进行查找,而是在存储文件的数据库中进行查找,linux一般每天更新一次这个文件数据库,所以刚创建的文件无法被查询到。
可以使用 updatedb
来立即刷新文件数据库,这样就能查找到刚刚创建的文件了。
find : 深入查找,可以做很多事情
find
不会查找文件数据库,而是直接遍历硬盘,这样及时性
好,但如果硬盘太大了,查找起来会比较慢
语法 : find "where" "what" "to do"
在哪查找什么,找到后怎么做
- where : 指定从哪个目录进行查找,子目录也会继续进行。默认下在当前工作目录下查找
- what : 查找什么。比如查找
名字 大小 访问时间
,必须的 - find : 找到以后,进行的后续处理,如果没有则不会做其它事情
根据文件名查找
find -name a.py
# ./gittest/a.py
# ./a.py
# 如果没有输出,则表示a.py没有查找到
find /var/log -name "syslog"
# /var/log/installer/syslog
# /var/log/syslog
当然所搜的关键字也可以带上通配符 *
根据文件大小查找
# 查找大于100m的文件
find / -size +100M
# 查找小于100k的文件
find /var -size -100k
# k M G
根据访问时间查找
-atime:
access time
# 查找7天之内访问过的py文件
find -name "*.py" -atime -7
仅查找目录或文件
使用-type
参数即可 d
为目录 f
普通文件。默认全部查找出来
# 只查找名为 kkk 的目录
find / -name "kkk" -type d
数据流
数据处理
grep : 过滤数据并打印
基本用法:
# 在 a.py 文件中搜索 func 这个文本
grep func a.py
# 如果要搜索的文本中存在 空格 则需要 “”
grep "hello mao" a.py
grep相关参数:
参数 | 作用 |
---|---|
-i | 忽略大小写 |
-n | 显示结果所在行号 |
-v | 取反,只要不存在的行 |
-r | 递归在文件夹中进行查找 |
-E | 使用正则表达式进行查找 |
sort : 对文件进行排序操作
有这么一个文本文件 nums.txt
:
c
b
a
d
o
k
# 执行后
sort nums.txt
a
b
c
d
k
o
默认状态下按照首字母ascii码进行排序,当然还有其它参数可选:
参数 | 作用 |
---|---|
-o | 将排序后的内容写入新文件中 |
-r | 逆向排序 |
-R | 随机排序 |
-n | 对数字排序 |
wc : word count
统计单词数量、行数等等
wc test.py
# 22 46 439 test.py
返回一个四元组:
- 22 : 行数,换行符的数量
- 46 : 单词数
- 439 : 字节数 n 8bit
- test.py : 被统计的文件名
# 只要行数
wc -l test.py
# 只要单词数
wc -w test.py
# 只要字符数
wc -c test.py
# 只统计字符数 ? 为什么是 m?
wc -m test.py
uniq : 删除文件文件中的重复内容
uniq nums.txt
如果要将结果保存在新的文件中:
uniq nums.txt a.txt
初次之外,还有些好用的参数:
# 除了去重以外,还显示原始出现个数
uniq -c nums.txt
# 只保留重复的项
uniq -d nums.txt
cut : 剪切文件的一部分内容,用于对文件的每一行进行剪切处理
# 每一行保留第2到第4个字符
cut -c 2-4 name.txt
流 & 输出重定向
- 重定向 : 将本来要显示在终端上的数据,传输到其它的地方,比如
文件
,下一步命令的输入
- 管道 : 将两个命令连接起来,一个命令的输入作为另外一个命令的输入,构成了管道
重定向到文件
> : 重定向到新的文件
ls > q.txt
此时会创建一个名为 q.txt
的文件,并吧 ls
本身要输出的内容写入该文件中。
但是如果 q.txt
已经存在的话,则会将老的文件覆盖
如果不想在终端显示
也不想写入文件中,可以重定向到一个空文件/dev/null
中
ls -l > /dev/null
>> : 重定向到文件尾部
如果指定文件不存在,则创建并写入。如果存在,则添加到文件的末尾
。
ls >> q.txt
重定向错误输出:
输出分为两种 标准输出
文件描述符1
和 标准错误输出
文件描述符2
上面的 >
和 >>
都是重定向标准输出
的操作,并不能将标准错误输出
重定向
必须使用 2>
来将标准错误输出
重定向
同理 2>>
就是将标准错误输出追加
# 正常的话,输出到q.txt 错误信息输出到error.log
ls aaaa > q.txt 2>> error.log
如果想要标准输出
和标准错误输出
都在一个文件,可以在最后使用使用 2>&1
即可
cat a.py > res.txt 2>&1
cat a.py >> res.txt 2>&1
小结
- 2> :将标准错误输出重定向
- 2>> :将标准错误输出追加重定向
- 2>&1 :将标准输出和标准错误输出重定向到同一个地方
输入重定向 & 管道
上面可以操作数据去哪里,这里就是决定命令的输入从哪里来
< : 从文件中读取
# 普通显示一个文件内容
# 给 cat 传的只是 `a.py` 这个文件名
# 之后 cat 命令先打开这个文件,再读取数据,再显示
cat a.py
# 从 a.py 中获取内容给cat
# cat 接收到的是a.py中的内容
# 而负责打开文件的操作则是交给了shell命令去做的
cat < a.py
结果是一样,但是过程不同
<< : 将键盘上的输入重定向到某个命令的输入中去
sort -n << END
# > 5
# > 4
# > 6
# > 9
# > 3
<<
右侧的是结束符,当输入为 END
时,表示数据输入完成。结束符可以自己定义
也可以和之前的结合起来
sort -n << END > res.txt 2>&1
| : 管道符,用于建立管道,将前一个命令的 结果
转交给后一个命令的输入
# 从运行的进程中 查找带有python字符串的行
ps -ef | grep python
# 按照文件夹的名字排序显示
ls | sort
# 显示文件大小最大的10条
du | sort -nr | head
linux进程
监视系统进程
w : 显示系统中目前有哪些用户登录,以及在干什么
w
18:50:29 up 17 days, 3:45, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 42.49.xxx.x 18:50 2.00s 0.01s 0.00s w
第一行和 uptime
命令输出一样 有 当前时间
运行时间
负载信息
其中负载
load average: 0.00, 0.00, 0.00
三个数字分别表示:
- 1 分钟以内的平均负载
- 5 分钟之内的平均负载
- 15 分钟之内的平均负载
表示一段时间内的平均
活跃进程数
,就是使用了CPU的进程数量
是否超载要根据机器的核数
和平均负载
来综合确定
比如说单核处理器超过 1
就表示超载了,双核超过 2
才算超载以此类推…
其余行和 who
命令类似,展示当前登录的所有用户信息
ps : process status
: 用于显示当前系统中的进程
不过只是显示执行的那一瞬间的状态
PID TTY TIME CMD
21160 pts/0 00:00:00 bash
21461 pts/0 00:00:00 ps
列 | 说明 |
---|---|
PID | 进程ID |
TTY | 进程所运行的终端 |
TIME | 进程运行了多久 |
CMD | 产生这个进程的程序名 |
ps
不加其它的参数的时候,只会列出当前运行 ps 命令的用户
在当前这个终端中所运行的进程,并且虽然也是当前用户运行的,但不是在当前的终端
里,因此也没列出来。
参数 : -ef
可以列出所有的进程
ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jun25 ? 00:00:25 /lib/systemd/systemd --system --deserialize 24
root 2 0 0 Jun25 ? 00:00:00 [kthreadd]
root 3 2 0 Jun25 ? 00:00:24 [ksoftirqd/0]
还多了一些列:
列 | 说明 |
---|---|
UID | 用户标志符 |
PPID | 进程的父进程号 |
参数 -efH
: 按照乔木状列出进程
root 31989 1 0 Jul08 ? 00:00:16 /usr/sbin/sshd -D
root 21086 31989 0 07:42 ? 00:00:00 sshd: root@pts/0
root 21160 21086 0 07:42 pts/0 00:00:00 -bash
root 23240 21160 0 07:57 pts/0 00:00:00 ps -efH
参数 -u
: 列出此用户运行的进程:
ps -u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1191 0.0 0.1 14316 896 ttyS0 Ss+ Jun25 0:00 /sbin/agetty --keep-baud 115200,38400
root 1192 0.0 0.0 14540 732 tty1 Ss+ Jun25 0:00 /sbin/agetty --noclear tty1 linux
root 23530 0.0 0.5 21172 4924 pts/0 Ss 07:59 0:00 -bash
root 23651 0.0 0.3 38308 3256 pts/0 R+ 08:00 0:00 ps -u
参数 : -aux
通过 CPU 和内存使用来查看进程
# 默认的无序的
ps -aux
# cpu降序排列
ps -aux --sort -pcpu | less
# 内存占用降序排列
ps -aux --sort -pcpu | less
# 也可以两种一起排序
ps -aux --sort -pcpu,+pmem | less
pstree : 以树形的方式显示进程:
systemd─┬─YDLive───{YDLive}
├─YDService───9*[{YDService}]
├─acpid
├─2*[agetty]
├─barad_agent─┬─barad_agent
│ └─barad_agent───3*[{barad_agent}]
进程操作
top : 展示进程动态列表
ps
命令作用很多,但是只能获取到某一时刻的状态,使用 top
就可以实时的监测进程状态了
top
不过 top
命令获取的进程数要比 ps
要少一些,因为只显示排在前面的一些进程,为了正好占用一个屏幕的大小。
默认按照占用 cpu
比例从大到小排列的。初次之外,top
命令还可交互
快捷键 :
按键 | 作用 |
---|---|
q | 退出 |
h | 显示帮助界面 q 退出 |
B | 加粗一些数据 |
f | 添加或删除某些列 q 退出 |
F | 改变进程列表排序所参照的列 q 退出 |
u | 依照用户来过滤显示。可以输入用户名,按回车 |
k | 结束某个进程 输入 PID |
s | 修改刷新时间 默认 3s |
ctrl + c : 强行终止当前正在运行的进程
kill : 结束指定的进程,通过PID杀死进程
# 结束 PID=9876的进程
kill 9876
# 当然也可连续结束
kill 9876 5432 1234
使用 -9
参数可以强制结束指定进程
kill -9 9876
killall : 可以通过 程序名
来结束进程
kill python
halt & reboot : 关机和重启
# 需要管理员权限才能关机
halt
poweroff
# 同样需要管理员权限
reboot
前后台进程
前台程序 : 默认情况下,用户创建的进程都在前台,前台程序从键盘读取数据,将输出显示在终端上。
后台程序 : 不必
等待程序运行结束
就可以输入其他命令
& : 在后台运行程序
find / mao > test.txt 2>&1 &
# [1] 13420
- [1] : 是该终端后台进程的编号
- 13420 : 进程号 PID ,如果想结束 可以使用
kill 13420
nohup : no hangup
让进程和终端分离开来
仅仅使用 &
的话,后台进程还是和终端相关的,当终端退出时,该进程也退出了。如果想终端退出,进程还是继续运行,则需要 nohup
命令。
可以看看 nohuup
的说明:
man nohup
run a command immune to hangups, with output to a non-tty
运行的进程不受 hangup 信号影响
nohup cat a.py
# nohup: ignoring input and appending output to 'nohup.out'
忽略输入,并且输出到 nohup.out文件中
如果想结束运行的进程,则可以先通过 ps -ef | grep command
来查找到该进程的 PID
再使用 kill
命令关闭。
一般会把 nohup
和 &
一起使用
ctrl + z : 转到后台,并暂停运行
如果忘记了添加 &
的时候,就可以使用该快捷键了
# 查看进程相关信息
top
此时按下 ctrl + z
:
[1]+ Stopped top
此时 top
进程就被放在后台,并且变为 停止
状态,然后就可以输入其它命令了
bg : 将命令转入后台运行
。假如命令已经在后台,并且暂停着,那么 bg 命令会将其状态改为运行
- 如果不添加任何参数,则作用于
最近的
一个后台进程 - 如果后面加 %1,%2 这样的参数, (可不要 %),则作用于指定标号的进程
bg
# [1]+ top &
bg 命令会把在后台暂停的进程重新唤醒,使之在后台重新运行。
注意:
- 使用普通命令
grep
这种,bg
是起作用的,转为后台运行 - 而
top
这种交互的命令不能再后台运行
一般需要先 ctrl + z
将进程暂停了,才能输入 bg
在后台运行进程
fg : foreground
将后台进程转换到后台运行
用法和 bg
类似,不加参数,作用于最近
的一个后台进程 如果加参数则作用指定的
定时 & 延时
文件解压缩
压缩文件有很多种比如说 7z rar zip tar
等等
打包
: 将多个文件变成一个总的文件集合(archive)压缩
: 将一个大的文件,通过某种算法使得占用的存储空间变小
tar : 将多个文件打包
归档
打包:
# 将文件夹 advance 中的文件打包,命名为 test.tar
tar -cvf test.tar advance/
# 也可以把多个文件放入
tar -cvf k.tar a.py b.py c.py
# 追加文件进入归档中
tar -rvf k.tar d.txt
查看:
# 查看归档中的文件
tar -tf test.tar
解文档:
# 和创建文档相反
tar -xvf k.tar
参数列表:
参数 | 意义 |
---|---|
-c | create 创建新的归档 |
-v | verbose 显示操作细节 |
-f | file 指定归档文件 |
-t | list 查看内容 |
-x | extract 额外添加 |
gzip & bzip2 : 压缩归档
- gzip : 后缀名为
.tar.gz
- bzip2 : 后缀名为
.tar.bz2
gzip使用:
# 将 k.tar 压缩
gzip k.tar
# 解压
gunzip k.tar.gz
bzip2使用
# 压缩
bzip2 k.tar
# 解压
bunzip2 k.tar.bz2
使用 tar 同时归档+压缩 :
使用gunzip压缩
tar -zcvf k.tar.gz www/
使用 bzip2 压缩
tar -jcvf k.tar.bz2 www/
SSH使用
ssh 默认使用的是22端口
# 使用root名称进行远程登录
ssh root@139.xx.xx.x
# 如果不指定登录用户名,则使用当前机器登录的用户名名称
ssh 139.xx.xx.x
# 指定 23 为链接端口
ssh -p 23 139.xx.xx.x
网络相关
文件传输
wget
wget -参数 地址
直接会下载地址所指向的内容,如果需要停止,则使用 ctrl + c
下载时候,也会出现下载的 进度
。
具有很强的适用性,可以在不稳定网络中有出色的表现。如果出现了下载失败的问题,它还会再次连接到服务器,从停止的地方继续下载。
# 继续下载
wget -c xxxxx
# c : continue
scp
secure copy
网络当中进行拷贝操作:
可以将文件从一台电脑拷贝到另外一台去,并且拷贝的信息是安全的。
scp 源文件 目标文件
然后源文件
和目标文件
都可以这样表示:
username@ip:file_path
- username : 登录名
- ip : 远程服务器的地址
- file_path : 文件所在的路径
从当前电脑中的文件拷贝到远程电脑:
-P 指定端口 注意是大写的 P
,而ssh
是小写的p
scp -P 12345 xxx.jpg mao@xx.xxx.xx.x:/home/mao/images/
sftp
文件传输协议
连接到 ftp
服务器:
# ftp://speedtest.tele2.net/表示ftp服务器的地址
# -p 表示被动的
# -oPort 指定端口
sftp -oPort 4321 mao@speedtest.tele2.net
一旦输入用户名和密码,连接上之后,其它操作和 ftp 是一样的
可以使用简单的命令行:
ls,cd,pwd
文件的传输:
- put : 用于上传文件
- get : 用于下载文件
如果想运行本机电脑的命令,可在命令前加上!
比如 !s
断开则使用 ctrl + D
快捷键