文件命令
帮助命令
help cd #内部命令
ls --help #外部命令
目录
pwd #显示当前目录
cd XXX #切换到XXX目录下, cd .. 返回上层目录; cd . 当前目录; cd - 返回上次操作目录
ls -al # -a显示隐藏文件; -l长格式显示文件
mkdir XXX #创建目录
rmdir XXX #删除空目录
rm -rf XXX #-r删除文件夹 -f强制删除(force)
cp -r XXX YYY #将XXX复制到YYY; -r复制目录
mv XXX YYY #将XXX移动到YYY;可以作为重命名命令
touch XXX #创建文件XXX
通配符:略
查看
cat -f XXX #显示内容; -f实时更新
head -n XXX #显示文件开头; -n显示开头的n行
tail -nf XXX #显示文件结尾; -n显示结尾n行;-f实时更新(用来查看实时更新的日志)
wc -lwb XXX #统计文件信息; -l行数(lines);-w字符数(words) -b字节数(bytes)
more XXX #分页显示内容
less XXX #支持翻页的分页
压缩
tar -czfv XXX.tar.gz YYY #将YYY压缩成XXX.tar.gz文件;c压缩打包;czf使用gzip压缩;v显示所有过程
tar -xzfv XXX.tar.gz YYY #将XXX.tar.gz 解压到YYY中;X解压
# czf使用gzip压缩;cjf使用bzip压缩->速度慢,但压缩率高
网络扩展名
# .tar.gz 为 .tgz
# .tar.bz2为 .tbz2
复制粘贴
#复制:
windows/Linux下:Ctrl + insert,Mac下:command + c
#粘贴
windows/Linux下:Shift + insert,Mac下:command + v
文件重定向和管道
重定向
输出重定向>和追加重定向>>
echo Hello > /root/mm #将”Hello“输出重定向到/root/mm文件中(文件不存在,创建文件)(覆盖)
echo Hello >> /root/mm #新起一行,将”Hello“输出重定向到/root/mm文件中(文件不存在,创建文件)(不会覆盖)
输入重定向<和输入追加重定向<<
cat < /root/mm # 可以看到终端现实”Hello“;将某一文件的内容作为命令的输入
cat > /root/bc<<EOF #以EOF作为分隔符
错误重定向和错误追加重定向&>
cat /root/ghfdgd 2> /root/b #查看不存在的`ghfdgd`文件,并将报错信息输出到`/root/b`文件中
cat /root/ghfdgd 2>> /root/b
同时实现输出和错误重定向&>
ls /etc &> /root/b #存在/etc目录,所以执行输出重定向
ls /hgfdhgfjk &> /root/oo #不存在目录`/hgfdhgfjk`,所以执行错误重定向,将错误信息输出到`/root/oo`
管道
将某命令的输出作为另一个命令的输入(从左到右)
rpm -qa|grep a|more
命令rpm -qa显示已经安装在系统上的RPM包,
命令grep a是过滤软件包
命令more是分页显示这些信息
文件检索
-
find /path/to/directory/ -name '*.py':搜索某个文件路径下的所有*.py文件find /boot -name grub.cfg查找在/boot目录下的grub.cfg文件find / -name '*.conf'查找/目录下所有以“.conf”结尾的文件find . -ctime -20查找当前目录及子目录下最近20天内更改过的文件。
-
grep xxx:从stdin中读入若干行数据,如果某行中包含xxx,则输出该行;否则忽略该行。grep 'test file' kkk在文件kkk中搜索匹配"test file"grep 'test' d*在以d开头的文件中搜索匹配“test”的行数据内容grep ^b /root/aa在/root/aa中找以b开头的行内容grep -v ^b /root/aa在/root/aa中找不是以b开头的行内容grep le$ /root/kk在/root/kk中找以le结尾的行内容ps -ef | grep sshd查找sshd的进程信息
-
locate -ic httpd.conf-i不区分大小写;-c显示找到几个http.conf; -
wc:统计行数、单词数、字节数-
既可以从
stdin中直接读入内容;也可以在命令行参数中传入文件名列表; -
wc -l:统计行数 -
wc -w:统计单词数 -
wc -c:统计字节数
-
-
tree:展示当前目录的文件结构-
tree /path/to/directory/:展示某个目录的文件结构 -
tree -a:展示隐藏文件
-
-
ag xxx:搜索当前目录下的所有文件,检索xxx字符串 -
cut:分割一行内容-
从
stdin中读入多行数据 -
echo $PATH | cut -d ':' -f 3,5:输出PATH用:分割后第 3、5 列数据 -
echo $PATH | cut -d ':' -f 3-5:输出PATH用:分割后第 3-5 列数据 -
echo $PATH | cut -c 3,5:输出PATH的第 3、5 个字符 -
echo $PATH | cut -c 3-5:输出PATH的第 3-5 个字符
-
-
sort:将每行内容按字典序排序-
可以从
stdin中读取多行数据 -
可以从命令行参数中读取文件名列表
-
-
xargs:将stdin中的数据用空格或回车分割成命令行参数find . -name '*.py' | xargs cat | wc -l:统计当前目录下所有 python 文件的总行数
用户命令
#用户管理
useradd #新建用户
userdel -r #删除用户;-r 删除家目录
passwd #修改密码
usermod #修改用户属性
chage #修改用户属性
id XXX #检测XXX用户是否存在
#用户组管理
groupadd #新建用户组
groupdel #删除用户组
usermod -g group1 user1 #将用户user1的用户组改为group1
useradd -g group1 user1 #新建用户user1时制定用户组group1
#切换身份
su - user1 #临时环境更换为user1
exit #退出当前环境
su #切换身份,但还是当前路径
sudo #让普通用户执行root权限的命令
配置文件
/etc/passwd:其中每行的x代表该用户登录需要密码 (删除则不需要)/etc/shadow:保存用户和用户密码 (加密后)/etc/group:组名,是否密码验证,组 id,其他组
文件权限
文件类型
- - 普通文件
- d 目录文件
- b 块特殊文件
文件权限表示方法
- 读 r 4
- 写 w 2
- 执行 x 1
文件权限属主从左到右:文件属主、文件属组、其他用户
目录权限的标识方法
- x 进入目录
- rx 显示目录内的文件名
- wx 修改目录内文件名
- 没有r权限不可查看文件名
文件权限修改
#chmod可以修改u,g,o,a四个维度的权限
#增加权限+,减少权限-,设置权限=
chmod u+x XXX #XXX的文件属主添加 执行权限
chmod 755 -R XXX #数字修改法;-R递归修改文件夹权限
chmod u-x,g=,o=re XXX #修改
#chown:更改属主,属组
chown user1 XXX #XXX的属主改为user1
chown :group1 XXX #XXX的属组改为group1
chown user1 :group1 XXX #XXX的属主改为user1,属组改为group1
#查看目录权限
ls -ld XXX #-d只列出目录
ls -ld #当前所在文件夹的权限
#umask 控制默认创建文件权限(新建文件的权限)
SUID,SGID,SBIT
略
软件命令
- CentOS、RedHat 使用
yum包管理器,软件安装包格式为 rpm - Debian、Ubuntu 使用
apt包管理器,软件安装包格式为 deb
yum包管理器
配置yum源
略
yum install
yum remove
yum list | grouplist
yum update
apt包管理器
apt命令需要sudo
sudo apt update #列出所有可更新的软件清单命令
sudo apt upgraduate #升级软件包
sudo apt list --upgradeable #列出可更新的软件包及版本信息
sudo apt full-upgrade #升级软件包,升级前先删除需要更新软件包
sudo apt install XXX #安装指定的软件命令
sudo apt install XXX YYY ZZZ #安装多个软件包
sudo apt update XXX #更新指定的软件命令
sudo apt show XXX #显示软件包具体信息,例如:版本号,安装大小,依赖关系等等
sudo apt remove XXX #删除软件包命令
sudo apt autoremove XXX #清理不再使用的依赖和库文件
sudo apt purge XXX #移除软件包及配置文件
sudo apt search XXX #查找软件包命令
sudo apt list --installed #列出所有已安装的包
sudo apt list --all-versions #列出所有已安装的包的版本信息
系统状态查看
进程
top #查看所有进程的信息;M按使用内存排序;P按使用CPU排序;q退出;
top -p <pid> #查看指定pid的进程信息
ps aux #查看所有进程;PPID父进程好;TTY执行该进程的终端、pts虚拟终端、
kill -9 pid #杀死编号为pid的进程
kill -s SIGTERM pid #略
内存与硬盘
df -h #查看硬盘使用情况
free -h #查看内存使用情况
du -sh #查看当前目录占用的硬盘空间
网络
netstat -nt #查看所有正在运行的网络连接;-n显示IP地址;-t以TCP方式截取内容;-p端口对应的进程;-l TCP的状态,listen
ping www.baidu.com #检查是否联网
ifconfig
traceroute -w 1 www.baidu.com #追踪到目标主机的每一跳;-w 1 超时仅等待1秒钟
其他
w #列出当前登录的用户
SSH服务
基本用法
远程登录服务器:
ssh user@hostname
user: 用户名hostname: IP 地址或域名
第一次登录时会提示:
```The authenticity of host '123.57.47.211 (123.57.47.211)' can't be established.
ECDSA key fingerprint is SHA256:iy237yysfCe013/l+kpDGfEG9xxHxm0dnxnAbJTPpG8.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入yes,然后回车即可。 这样会将该服务器的信息记录在~/.ssh/known_hosts文件中。
然后输入密码即可登录到远程服务器中。
默认登录端口号为 22。如果想登录某一特定端口:
ssh user@hostname -p 22
配置文件
创建文件 ~/.ssh/config。
然后在文件中输入:
Host myserver1
HostName IP地址或域名
User 用户名
Host myserver2
HostName IP地址或域名
User 用户名
Port 端口号
之后再使用服务器时,可以直接使用别名myserver1、myserver2。
密钥登录
生成密钥对一定是在客户端上做, 然后再将公钥传给服务端,这样就可以不限制的访问服务端了。
创建密钥:
ssh-keygen
然后一直回车即可。
执行结束后,~/.ssh/目录下会多两个文件:
id_rsa:私钥id_rsa.pub:公钥
之后想免密码登录哪个服务器,就将公钥传给哪个服务器即可。
例如,想免密登录myserver服务器。则将公钥中的内容,复制到myserver中的~/.ssh/authorized_keys文件里即可。
也可以使用如下命令一键添加公钥:
ssh-copy-id myserver
scp服务
远程文件复制
基本用法
命令格式:
scp source destination
将source路径下的文件复制到destination中
一次复制多个文件:
scp source1 source2 destination
复制文件夹:
scp -r ~/tmp myserver:/home/acs/ :将本地家目录中的tmp文件夹复制到myserver服务器中的/home/acs/目录下。
scp -r ~/tmp myserver:homework/ :将本地家目录中的tmp文件夹复制到myserver服务器中的~/homework/目录下。
scp -r myserver:homework . :将myserver服务器中的~/homework/文件夹复制到本地的当前路径下。
指定服务器的端口号:
scp -P 22 source1 source2 destination
注意: scp的-r -P等参数尽量加在source和destination之前。
使用scp配置其他服务器的vim和tmux
scp ~/.vimrc ~/.tmux.conf myserver:
vim
vim XXX #XXX存在则打开,否则创建XXX并打开
四种模式
- 正常模式:
i进入插入模式;:进入命令行模式;v进入可视模式 - 插入模式:
ESC进入正常模式 - 命令行模式:
ESC进入正常模式 - 可视模式:
ESC进入正常模式
正常模式
#进入插入模式
i #当前行当前字符
I #当前行的 开头 字符
a #当前行当前字符的下一个字符
A #当前行的 结尾 字符
o #下一行 (产生新的空行)
O #上一行 (产生新的空行)
#进入命令行模式
:/? #任意一个
#光标移动
hjkl #左下上右
g #跳转到第一行
G #跳转到最后一行
^ #跳转到当前行开头,HOME键也行
$ #跳转到当前行结尾,END键也行
#复制粘贴剪切删除
y #复制选中文本
yy #复制当前行
6yy #复制6行
y$ #复制 从当前字符到当前行 结尾
y^ #复制 从当前字符到当前行 开头
p #粘贴
d #剪切选中文本
dd #剪切当前行
6dd #剪切6行
d$ #剪切 从当前字符到当前行结尾
x #删除
#撤销和反撤销
u #撤销
ctrl + r #反撤销
#替换字符
r #对当前字符进行替换
#行号
:set nu #显示行号
:set nonu #不显示行号
#配置vimrc
vim /etc/vimrc
插入模式
命令行模式
:wq XXX #保存文件名为XXX
:wq #保存
:q! #强制退出
:noh #关闭查找关键词高亮
/x #查找x;向下查找按 n;向上查找按 N
:s /old /new#替换
:%s /old /new#全文替换
:1,$s/word1/word2/g #将全文的word1替换为word2
:1,$s/word1/word2/gc #将全文的word1替换为word2,且在替换前要求用户确认。
:6 #光标移动到第六行,从1开始数
3+<ENTER> #向下移动3行,不用输入:
可视模式
略
bug
- 每次用vim编辑文件时,会自动创建一个
.filename.swp的临时文件。 - 如果打开某个文件时,该文件的swp文件已存在,则会报错。此时解决办法有两种:
- 找到正在打开该文件的程序,并退出
- 直接删掉该swp文件即可
tmux
功能: (1) 分屏。 (2) 允许断开Terminal连接后,继续运行进程。
- 结构:
- 一个tmux可以包含多个session,一个session可以包含多个window,一个window可以包含多个pane。
- 实例:
- tmux:
- session 0:
- window 0:
- pane 0
- pane 1
- pane 2
- ...
- window 1
- window 2
- ...
- window 0:
- session 1
- session 2
- ...
- session 0:
- tmux:
-
tmux:新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个shell对话框。 -
左右分屏:按下
Ctrl + a后手指松开,然后按%:将当前pane左右平分成两个pane。 -
上下分屏:按下
Ctrl + a后手指松开,然后按"(注意是双引号"):将当前pane上下平分成两个pane。 -
关闭当前
pane:Ctrl + d:关闭当前pane;如果当前window的所有pane均已关闭,则自动关闭window;如果当前session的所有window均已关闭,则自动关闭session。 -
鼠标点击可以选pane。
-
键盘选择pane:按下
ctrl + a后手指松开,然后按方向键:选择相邻的pane。 -
鼠标拖动pane之间的分割线,可以调整分割线的位置。
-
键盘调整分割线:按住
ctrl + a的同时按方向键,可以调整pane之间分割线的位置。 -
全屏/取消全屏pane:按下
ctrl + a后手指松开,然后按z:将当前pane全屏/取消全屏。 -
挂起session:按下
ctrl + a后手指松开,然后按d:挂起当前session。 -
打开挂起的session:
tmux a:打开之前挂起的session。 -
选择session:按下
ctrl + a后手指松开,然后按s:选择其它session。 方向键 ——上:选择上一项 session/window/pane 方向键 ——下:选择下一项 session/window/pane 方向键 ——右:展开当前项 session/window 方向键 ——左:闭合当前项 session/window -
创建
window:按下Ctrl + a后手指松开,然后按c:在当前session中创建一个新的window。 -
选择
window:按下Ctrl + a后手指松开,然后按w:选择其他window,操作方法与(12)完全相同。 -
键盘翻阅
pane:按下Ctrl + a后手指松开,然后按PageUp:翻阅当前pane内的内容。 -
** 鼠标滚轮翻阅
Pane:翻阅当前pane内的内容。 -
选中文本:在
tmux中选中文本时,需要按住shift键。(仅支持Windows和Linux,不支持Mac,不过该操作并不是必须的,因此影响不大) -
复制粘贴文本:
tmux中复制/粘贴文本的通用方式:- 按下
Ctrl + a后松开手指,然后按[ - 用鼠标选中文本,被选中的文本会被自动复制到
tmux的剪贴板 - 按下
Ctrl + a后松开手指,然后按],会将剪贴板中的内容粘贴到光标处
- 按下
其他
ctrl + c
ctrl + u #清空本行命令
ctrl + r #快速搜索之前的命令