帮助
type [cmd] 查看命令类型(内置?外置?)
help [cmd] 查看内置命令帮助
man [cmd] 查看外置命令帮助
挂载磁盘
mount /dev/disk1 /etc/video -> 向 /etc/video 挂载磁盘disk1
Linux文件 -> 所有对象皆文件
文件结构
树状结构,可以使用mount来向文件夹挂载一些磁盘
文件类型-- bcdlsp
- none, 普通文件
b block, 块设备文件,读写以块进行(DMA?),无流,通常支持随机访问,如U盘
c char, 字符设备,读写以字符进行,有流,通常不可随机访问,如键盘
d dir, 目录文件
I link, 连接文件
s socket, 字连接(主要用于网络通信)
p pipe, 管道文件(主要用于进程通信相关)
进程
ps -ef查看进程
进程位于 /proc/ 下
$$ 是当前进程PID
二级目录信息
/bin -> 可执行文件
/boot -> 引导分区
/dev -> 设备信息
/etc -> 配置文件
/home -> 工作目录
/lib(64) -> 运行类库
/mnt -> 挂载的磁盘
/opt -> 建议将软件安装在opt里面
/proc -> 进程的信息
/root -> root的工作目录
/run -> 运行时的各种变量放在这里
/sbin -> root级别用户可执行的程序
/srv -> 系统服务启动之后需要的数据
/sys -> 系统文件
/tmp -> 临时文件
/usr -> 用户的应用程序和文件放在这里,全称 Unix Software Resource
/var -> 变量和日志文件
/media -> 各种介质
*.d -> 默认文件,依赖文件,动态文件
文件操作
文件的物理数据区域通过Inode进行标识,通过“入口”进行增删改查
cd -> change dir
pwd -> process work dir
ls -> 各种别名操作在alias里面有
mkdir/rmdir -> 不解释了
mkdir -p(parent) a1/{a1_1,a1_2,a1_3} -> 同时创建a1和其下的三个子文件夹
cp -> copy
cp -r(recursive) -i(interactive)
mv -> move剪切,可以用于重命名
mv -i(interactive)
stat -> 文件信息查看
Access(最近访问)进行过read操作的时间
Modify(最近更改)进行过write操作的时间
Change(最近改动)更改过其元数据的时间
touch -> 可以创建文件,使用nano也行
touch文件的话,进行了read和write操作,以及访问了元数据,故文件的三时间都会同步
chmod -> change mod
ln -> 连接(快捷方式)
ln -s abc linkOf_abc -> 建立abc的软连接linkOf_abc
软连接:通俗意义的快捷方式
硬链接:是一个业务镜像,即一个接触到同一个内存区域(Inode标识一致)的“入口”
rm -> remove 删除文件的“入口”,当一个文件没有“入口”,则该文件将被系统逻辑抹消(找不到了嘛)
rm -r(recursive) -f(force) 目录
hjys:jys数据的硬链接,是一个“入口”
jinyesi :jys数据的"入口",是创建文件分配完内存空间后自动创建的一个硬链接
sjys:是jinyesi入口的一个快捷方式,是该快捷方式的“入口”
cat / tac :cat把文件按行号由小到大输出,tac将文件按行号由大到小输出
more:单屏分页显示,回车显示一行,空格显示一页,b回退一页,h呼出提示,q退出
less:功能比more更强大,h呼出提示
head/tail:查看文件的前xx行
head -10 1.txt -> 显示文件的前10行
head -10 1.txt | tail -2 -> 显示1.txt的第9、10行
tail -f 1.txt -> 通过监控文件的Inode的方式实时展现1.txt的末尾数据变化,文件本身变动后将无法跟踪
tail -F 1.txt -> 通过监控入口名字的方法实时展现1.txt的末尾数据变化,主动获取数据,因此文件本身删除重建后依然可以跟踪数据
find [dir] -name a*a -> 在[dir]里面查找以a开头和a结尾的文件
find / -name xxx -> 全局搜索一个名为xx的文件
vi-vim:文件编辑
史上最全Vim快捷键键位图(入门到进阶) | 菜鸟教程 (runoob.com)
键位图
vim +n 1.txt -> 打开的同时定位到第n行,若n没有指定,则定位到最后一行
vim +/xxx 1.txt -> 打开的同时定位到第一次出现xxx的地方,按n查找下一个
vim有3中模式:
进入文时的编辑模式,有快捷键
编辑模式键入i进入输入模式,此时即为普通编辑器,此模式下按esc返回编辑模式,a追加,I行首
编辑模式键入:进入命令模式
编辑模式键入R进入替换模式
i:在光标所在字符前开始插入(insert插入)
a:在光标所在字符后开始插入(追加)
o:在光标所在行的下面另起一新行插入(other另起)
s:删除光标所在的字符并开始插入(这玩意是个啥?)
I:在光标所在行的行首开始插入 如果行首有空格则在空格之后插入
A:在光标所在你行的行尾开始插入
O:在光标所在行的上面另起一行开始插入
S:删除光标所在行并开始插
编辑模式命令:
光标:I光标后边的字符即为当前光标下选中的字符,也就是方形光标内的字符
[num]gg:跳转到第[num]行,没有[num]则跳到第一行
G:跳转到最后一行
[num]dd:向下删除[num]行,包括本行,如果没有指定[num]则默认向下删除一行
D:清空本行,和dd的区别是dd会包括本行转行符号在内,D保留空行
[num]w:光标向后跳过[num]个单词,包括本单词,移动到之后的单词的开头
[num]dw:向后删除[num]个单词
[num]yw:向后复制[num]个单词
W:一样的
[num]yy:向下复制[num]行,包括本行
Y:向上复制,包括本行
[num]x:剪切后[num]个字符,包括本字符
X:向前,其它同上
[num]p:粘贴[num]次
P:向上粘贴
[num]r:向后替换[num]字符为输入字符,包括本字符
3r a:替换后面3个为a字符
R:进入替换模式,esc退出,感觉是由插入比较另类,因为一般来讲是不会向后移动光标符号的
[num]s:向后删除num个字符,并进入编辑模式
S:向后删除num行,保留一个空行,并进入编辑模式
u:undo
U:仅仅退回到上一步,再按就是退回前的那步了
hjkl:左下上右
^/$:行首字符/行尾字符【正则表达式???】
-0+:负即上一行行首,0即这一行行首,正即下一行行首
():“(”为文件首,“)”为文件尾
ZZ:保存并退出
ctrl+s/ctrl+q:锁屏/解锁(没玩明白)
:s/1/2 搜索当前行第一个1并用2代替 search
:s/1/2/g 搜索当前行所有的1并用2代替 global
:#,#s/1/2/g 在#,#间搜索所有1并用2替换
:%s/1/2/g 在整个文档中将1替换为2 100%(全部)
:s/1/2/c 每次替换都给出提示确认 cue提示
命令模式命令:
:进入命令模式
set nu/nonu:显示行号/不显示行号
w:写入
q:退出
!:强制执行
/xxx:查找xxx,n向下,N向上
s/xxx/yyy/:替换该行的第一个xxx为yyy
s/xxx/yyy/g:替换该行所有的xxx为yyy
g/xxx/s//yyy/:替换所有行的第一个xxx为yyy
g/xxx/s//yyy/g:替换全局所有的xxx为yyy
文件传输
linux--linux:scp -r(recursive) [文件] [目录] -> 文件可以是本地文件也可以是远程文件,目录同
文件大小
df(display fileSystem) -h(human) -> 文件分区信息(以人类可读形式输出)
du(display fileSystemUsage) -h(human) --max-depth=1 / -> 以人类可读的形式输出/目录下的大小信息,遍历深度1
文件压缩与解压缩
tar.gz解压 -> tar -zx(gzip, extract)v(verbose)f(file) [压缩文件] [-C(Change dir) [解压目录]]
tar.gz压缩 -> tar -zc(gzip, create)f(file) [压缩文件名] [原文件或目录]
zip解压 -> unzip [压缩文件]
zip压缩 -> zip -r(recursive) [文件或文件夹]
Linux网络
主机名称修改
hostname xxx -> 临时修改为xxx
/etc/hostname -> 永久修改hostname
/etc/hosts -> 修改本地DNS解析信息
网络信息
ifconfig -> 查看网卡配置信息,作用同ip addr
netstat -> 查看网络connect状态socket连接
netstat -a(all)n(numeric)p(programs) 查看所有socket信息,不解析名称,并显示程序
ping -> 略
telnet -> 查看ip的特定端口联通情况
curl -> 以restful风格定位网络资源
curl --help all 显示所有帮助
curl -X <method> url -> curl -X GET http://www.baidu.com
防火墙
详情介绍见:Linux防火墙之iptables详解_别掉头发啦的博客-优快云博客_iptables
熟悉iptables操作:iptables详解(图文)_董筱杰的博客-优快云博客_iptables
主机间免密钥
登陆主机(A)要免密钥登录被登陆主机(B),简记为A->B
B中将A的公钥存放于/root/.ssh/authorized_keys,只要之在这里的公钥,都可以免密钥登录,反之,要想免密钥登录B,只要将自己的公钥放在B的这个位置即可
生成密钥
ssh-keygen -t(type) rsa -P(passpharse) '证书密码' -f(filename) ~/.ssh/id_rsa
拷贝公钥
ssh-copy-id -i(identity_file) ~/.ssh/id_rsa.pub root@B
(其实用cp也可以,就是你得记住路径)
Linux时间
date -> 查看时间
date -s(set) xxxx-xx-xx xx:xx:xx -> 设置时间为xxxx年xx月xx日xx时xx分xx秒
hwclock -> 查看硬件时间
hwclock -w -> 写入时间到硬件
ntpdate [服务器] -> 将时间和该服务器同步,可以选择cn.ntp.org.cn进行时间同步
Linux用户与组
用户的增删改查
用户信息在/etc/shadow
useradd [username] -> 创建用户
userdel -r(remove) [username] -> 删除用户
usermod -> 修改账户
usermod -l(login) [老名] [新名] -> 修改登录名称,不会修改家和组名称
usermod -L(lock) [username] -> 锁定用户
usermod -U(unlock) [username] -> 解锁用户
su [username] -> 转换用户
usermod -g test2 test -> 将test2作为test用户的主组
usermod -G test2,root test -> 将test2和root作为test的附属组
注意:-g将替换现有主组,-G替换现有的所有附属组
cat /etc/shadow -> 查找用户
密码增删改查
密码文件在/etc/passwd
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
passwd [username] -> 更新username的密码
passwd -d(delete) [username] -> 删除密码
passwd -e(expire) [username] -> 使密码过期
cat /etc/passwd -> 查找密码
组的增删改查
组文件在/etc/group
组名:口令:组标识号:组内用户列表
groupadd [username] -> 创建组
groupmod -U(users) usename [group_name] -> 将username添加到groupname里面,该group作为该username的附属组
groupdel [username] -> 删除组本身,注意,如果这个组时某个用户的主组,那么将无法删除,须先删除该组的主成员,才能删除该组,如果该组的主用户删除后为空,则该组删除
groupmod -n(new_name) [new_name] [old_name] -> 将组名改为新名字
cat /etc/group -> 查看组信息
groups [username] -> 查看username的组及成员,默认当前用户的组
结果格式为A:B C -> 表示A用户在B和C两个组里面
**需要注意的是:usermod的主体是user,故username放在最后,以-g-G引入组名,groupmod的主体是groupname故将groupname放在最后,以-U引入用户名
Linux权限
ls查看文件时,看到
d/xxx/xxx/xxx root root:d代表dir目录,第一个时是拥有者权限,第二个是所属组权限,第三个是其他组。第一个root是所有者,第二个是其所属组
修改权限chmod -> change mod
用法:chmod 3位2进制数的10进制表示(如777) username
修改所有者chown -> change owner
用法:chown user:group [文件]
Linux管道与重定向
管道:将结果变为一个临时的文件,放在后面例如 [command] | grep xxx
重定向:改变数据输出的位置
0> --input 1> --ouput(可省略为>) 2> --err
注意,这里的input和output是根据运行程序来说的,output即输出到文件
> --覆盖 >> --追加
即写入到文件时会不会擦除原先的东西
[cmd] >(>>) [file] 2>&1 -> 无论是正确的还是错误的信息,都发送到file中
可以向黑洞/dev/null/里面丢数据
[cmd] >> /dev/null 2>&1
tty -> 显示你的终端设备文件在哪,可以向这里输出信息
Linux进程
前台进程
进程位于/proc/中,每个文件夹以PID命名,存放进程运行的上下文
查看进程:ps -efaux 或者 ps -faux 或者 top
PID--process id
PPID--parent process id
ps -e(all precesses) -f(forest) -a(all) -u(user-orented format) -x(process without controling tty)
top -> 实时的
杀死进程 kill -9 [PID]
后台进程
创建后台进程:将输出和错误重定向,在使用&脱离即可
[cmd] >>[file] 2>&1 & 即可
例如 ping 192.168.0.1 >> abc 2>$1 &
nohup(no hung up) [cmd] -> 后台进程可以和终端进程脱离,使得终端结束后后台进程可以维持运行状态
删除后台进程:kill -9 [PID]即可,前后端通用
查询后台进程:jobs -l(list),注意,非本终端执行的命令是查不到的,需要用ps -efaux查看
Linux工具命令
cut
主要用于文件内容的切割显示
cut -d(delimiter) ':' -f(field) 1,2,3 a.txt -> 将a.txt的内容按照:进行分割,并且去前3列输出
sort
对某个文件排序
sort -t(separator) ':' -k(key) -r(逆序) -n(如果是数字,就按照数字大小来比较,而非默认的字符比较) a.txt -> 在文件a.txt中使用:进行分割,分割玩之后对某列逆序排序
wc
word-count,统计单词数量
wc [file]
结果: xx xx xx [file]
解释:行数 单词数量 字符数量 文件名
单词是以空格作为分界的
grep
grep xxx [file1] [file2]... -> 在file1和file2上找xxx
grep -n xxx a.txt -> 显示a.txt中xxx所在的行号
grep -E(expression) "xxx" a.tzt -> 使用正则表达式匹配
sed--Stream editor
流式处理文件内容