linux命令

133 阅读6分钟

文件命令

帮助命令

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是分页显示这些信息

文件检索

  1. find /path/to/directory/ -name '*.py':搜索某个文件路径下的所有*.py文件

    • find /boot -name grub.cfg 查找在/boot目录下的grub.cfg文件
    • find / -name '*.conf' 查找/目录下所有以“.conf”结尾的文件
    • find . -ctime -20 查找当前目录及子目录下最近20天内更改过的文件。
  2. 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的进程信息
  3. locate -ic httpd.conf -i不区分大小写;-c显示找到几个http.conf;

  4. wc:统计行数、单词数、字节数

    • 既可以从stdin中直接读入内容;也可以在命令行参数中传入文件名列表;

    • wc -l:统计行数

    • wc -w:统计单词数

    • wc -c:统计字节数

  5. tree:展示当前目录的文件结构

    • tree /path/to/directory/:展示某个目录的文件结构

    • tree -a:展示隐藏文件

  6. ag xxx:搜索当前目录下的所有文件,检索xxx字符串

  7. 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 个字符

  8. sort:将每行内容按字典序排序

    • 可以从stdin中读取多行数据

    • 可以从命令行参数中读取文件名列表

  9. 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	#略

Kill命令

内存与硬盘

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 端口号

之后再使用服务器时,可以直接使用别名myserver1myserver2


密钥登录

生成密钥对一定是在客户端上做, 然后再将公钥传给服务端,这样就可以不限制的访问服务端了。

创建密钥:

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等参数尽量加在sourcedestination之前。


使用scp配置其他服务器的vimtmux

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文件已存在,则会报错。此时解决办法有两种:
    1. 找到正在打开该文件的程序,并退出
    2. 直接删掉该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
          • ...
        • session 1
        • session 2
        • ...
  1. tmux:新建一个session,其中包含一个windowwindow中包含一个panepane里打开了一个shell对话框。

  2. 左右分屏:按下Ctrl + a后手指松开,然后按%:将当前pane左右平分成两个pane

  3. 上下分屏:按下Ctrl + a后手指松开,然后按"(注意是双引号"):将当前pane上下平分成两个pane

  4. 关闭当前paneCtrl + d:关闭当前pane;如果当前window的所有pane均已关闭,则自动关闭window;如果当前session的所有window均已关闭,则自动关闭session

  5. 鼠标点击可以选pane

  6. 键盘选择pane:按下ctrl + a后手指松开,然后按方向键:选择相邻的pane

  7. 鼠标拖动pane之间的分割线,可以调整分割线的位置。

  8. 键盘调整分割线:按住ctrl + a的同时按方向键,可以调整pane之间分割线的位置。

  9. 全屏/取消全屏pane:按下ctrl + a后手指松开,然后按z:将当前pane全屏/取消全屏。

  10. 挂起session:按下ctrl + a后手指松开,然后按d:挂起当前session

  11. 打开挂起的sessiontmux a:打开之前挂起的session。

  12. 选择session:按下ctrl + a后手指松开,然后按s:选择其它session。 方向键 —— :选择上一项 session/window/pane 方向键 —— :选择下一项 session/window/pane 方向键 —— :展开当前项 session/window 方向键 —— :闭合当前项 session/window

  13. 创建window:按下Ctrl + a后手指松开,然后按c:在当前session中创建一个新的window

  14. 选择window:按下Ctrl + a后手指松开,然后按w:选择其他window,操作方法与(12)完全相同。

  15. 键盘翻阅pane:按下Ctrl + a后手指松开,然后按PageUp:翻阅当前pane内的内容。

  16. ** 鼠标滚轮翻阅Pane:翻阅当前pane内的内容。

  17. 选中文本:在tmux中选中文本时,需要按住shift键。(仅支持Windows和Linux,不支持Mac,不过该操作并不是必须的,因此影响不大)

  18. 复制粘贴文本 tmux中复制/粘贴文本的通用方式:

    1. 按下Ctrl + a后松开手指,然后按[
    2. 用鼠标选中文本,被选中的文本会被自动复制到tmux的剪贴板
    3. 按下Ctrl + a后松开手指,然后按],会将剪贴板中的内容粘贴到光标处

其他

ctrl + c
ctrl + u	#清空本行命令
ctrl + r	#快速搜索之前的命令