Linux使用技巧

Keywords: #技术 #Linux
Table of Contents

tmux使用技巧

# 窗口管理器 最重要的就是他能保存当前窗口的状态 之后还能连回来(包括ssh远程连接服务器)
tmux # 创建一个新的会话
tmux ls # 列出所有会话
tmux attach/a -t 1(会话号) # 重新连接上会话
tmux new-s name # 创建指定名称会话
tmux kill-session/ses -t 1(会话号) # 关闭指定会话 

ctrl-b # 为功能切换键
[ #上下查看历史记录 q退出
d # 把当前会话挂起在后台(退出tmux,但是没有关闭)
s # 在tmux中列出所有的会话 -->键可以展开看到窗口 树型递归显示
w # 在tmux中列出所有的窗口 -->键可以展开看到面板 树型递归显示
c # 在当前会话下 创建一个新的窗口
n # 切换为下一个的窗口
p # 切换为前一个的窗口
1 2 3 4…… # 直接输入数字切换指定的窗口
& # 关闭当前窗口 y:yes

% # 把当前窗口分成左右两个面板
" # 把当前窗口分成上下两个面板
方向键 # 在不同面板中切换
q # 在当前窗口显示出面板的编号,并切换面板
z # 把当前面板最大化/恢复
x # 关闭当前的面板

: # 输入指令模式
new / new -s name # 新建一个会话
…………

Tmux Cheat Sheet & Quick Reference

vim使用技巧

# 有三个模式 1.功能模式 2.插入模式 3.命令模式

# 1.功能模式(在插入模式下按esc进入)
k j h l # 上下左右
0 # 到当前光标所在行的第一个字符
$ # 到当前光标所在行的最后一个字符
G # 到当前文件的最后一行
gg # 到当前文件的第一行
H # 到当前页面的最上面
M # 到当前页面的中间
L # 到当前页面的最后一行
v # 可视模式
V # 行可视,从当前行开始全选
ctrl-V # 块可视,从当前块开始xuan'z

# 前面都可以加数字
y # 复制选择的内容
yy # 复制光标所在的一整行
p # 粘贴复制的内容
10 p # 输入数字可以指定粘贴多少行
d # 删除选中的内容
dd # 删除光标所在的一整行
x # 删除光标之后一个字符
X # 删除光标前面一个字符

u # 复原前一个动作
/to # 查找文件内容中的to字符
n # 查找下一个字符
>> # 向右缩进
<< # 向左缩进

# 同时操作多行
ctrl+shift+v
j
shift+i
输入
liang'ci

# 2.插入模式
i # 在当前光标插入
I # 在当前光标行首插入
o # 在光标下方新开一行插入
O # 在光标上方新开一行插入
A # 在光标所在最后一行插入

# 3.命令模式(在功能模式下:)
:w file.txt # 把当前内容写入file文件
:wq # 写入并退出
:set num # 显示行号
:set nonum # 不显示行号

# 配置文件 ~/.vimrc 可以增加加载配置

Vim操作手册

Vim教程

调度任务操作

# 打开应用程序,在后台运行
firefox &
# 打开应用程序,在前台运行
firefox 
# 把前台的程序,挂起在后台(会暂停)
ctrl-Z
# 把暂停程序调度到在后台执行
bg 1(作业号)
# 把后台程序调度回前台执行
fg 1(作业号)
# 查看所有作业任务
jobs
# 在前台退出程序
ctrl-C
# 杀掉当前某个后台任务
kill %1(作业号)

Linux系统目录结构

  • /bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。

  • /boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。

  • /dev : dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。

  • /etc: etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。

  • /home: 用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的,如上图中的 alice、bob 和 eve。

  • /lib: lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。

  • /lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

  • /media: linux 系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。

  • /mnt: 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。

  • /opt: opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。

  • /proc: proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。 这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:

    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    
  • /root: 该目录为系统管理员,也称作超级权限者的用户主目录。

  • /sbin: s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。

  • /selinux: 这个目录是 Redhat/CentOS 所特有的目录,Selinux 是一个安全机制,类似于 windows 的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。

  • /srv: 该目录存放一些服务启动之后需要提取的数据。

  • /sys

    这是 Linux2.6 内核的一个很大的变化。该目录下安装了 2.6 内核中新出现的一个文件系统 sysfs 。

    sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。

    该文件系统是内核设备树的一个直观反映。

    当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。

  • /tmp: tmp 是 temporary(临时) 的缩写这个目录是用来存放一些临时文件的。

  • /usr: usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

  • /usr/bin: 系统用户使用的应用程序。

  • /usr/sbin: 超级用户使用的比较高级的管理程序和系统守护程序。

  • /usr/src: 内核源代码默认的放置目录。

  • /var: var 是 variable(变量) 的缩写,这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。

  • /run: 是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

文件操作

cat file1.txt > file2.txt # 把file1中的内容覆盖到file2中
cat file1.txt >> file2.txt # 把file1中的内容追加到file2中
# 文件的权限
# ll 可以列出文件的详细信息
# 文件信息有10个字符组成
drwxr-xr-x (drwxrwxrwx)
# 第1位代表文件类型 2-4位代表文件所有者对文件的权限(user) 5-7位代表所有者同一组用户对文件的权限(group) 8-10位代表其他用户对文件的权限(other)
# 文件类型中 d是目录 -是文件 l是链接文件 b是装置文件里面的可供储存的接口设备 c是装置文件里面的串行端口设备

# r-->read(可读) w-->write(可写) x-->execute(可执行)

# 改变权限
chmod u-w file.txt # 对于file文件 把user的w的权限减掉
chmod u+w file.txt # 与上面相反
chmod 777 file.txt # 对于file文件 所有人都是可读可写可执行的权限
# r-->4  w-->2  x-->1  一共等于7 三位数字 分别对应user group other
# u-->user g-->group o-->others 
# +(加入) -(除去) =(设定)
exp:chmod u=rwx,g=rx,o=r file.txt
# 修改所属用户与组
chown (change owner)
chown [–R] 属主名 文件名
exp: chown bin install.log
chown [-R] 属主名:属组名 文件名
exp: chown root:root install.log
# 更改文件属组
chgrp (change group)
chgrp [-R] 属组名 文件名

文件目录管理

# 绝对路径
/user/share/doc
# 相对路径
cd ../man
# 常用的目录命令
ls cd pwd mkdir rmdir cp rm mv cat tac(cat倒过来) nl(显示行号) more(一页页翻动) less head(取出文件前面几行) tail(取出文件后面几行)

linux常见的目录操作命令

Linux通配符

? # 代表单个字符
* # 代表任意字符
[ab] # 匹配ab两个字符 a.txt b.txt
[1-3] # 匹配一个连续的范围 file1 file2 file3

环境变量

echo $PATH # 查看PATH环境变量的值
echo $PATH 或者 echo $HOME 或者 echo $USER # 查看指定环境变量
printenv / env # 显示当前用户的所有环境变量
# 添加系统级环境变量(需root权限、针对所有用户、永久生效)
vim /etc/profile
export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"
source /etc/profile
# 添加用户级环境变量
# 在home/username 用户目录下

# 1. .bash_profile:这是在登录时加载的主要文件。通常用于设置用户的个人环境变量和启动脚本。
# 2. .bash_login:如果 .bash_profile 不存在,则会尝试加载此文件。
# 3. .profile:如果 .bash_profile 和 .bash_login 都不存在,则会尝试加载此文件。这是一个通用的配置文件,适用于多种类型的 shell。
# 4. .bashrc:这是在每次打开新的终端窗口时加载的文件。它包含了用户定义的别名、函数、自定义环境变量等。

# 例如:
vim /home/lc622/.bash.profile 或 ~/.bash.profile
export CLASSPATH=./JAVAHOME/lib;JAVA_HOME/jre/lib 
source /home/guok/.bash_profile

用户和用户组管理

# 添加新的用户账号
useradd 选项 用户名
#	选项:
#    -c comment 指定一段注释性描述。
#    -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
#    -g 用户组 指定用户所属的用户组。
#    -G 用户组,用户组 指定用户所属的附加组。
#    -s Shell文件 指定用户的登录Shell。
#    -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
exp:
useradd –d  /home/sam -m sam
useradd -s /bin/sh -g group –G adm,root gem
# 删除帐号
userdel 选项 用户名
-r # 把用户的主目录一起删除
exp:
userdel -r sam
# 修改账号
usermod 选项 用户名
#	选项跟添加新用户一样
exp:
usermod -s /bin/ksh -d /home/z –g developer sam
# 用户口令的管理
passwd 选项 用户名
#	选项:
#    -l 锁定口令,即禁用账号
#    -u 口令解锁
#    -d 使账号无口令
#    -f 强迫用户下次登录时修改口令

# 如果是用户,只能修改自己的账户口令
# 如果是root。能修改任何用户的口令
# 增加一个新的用户组
groupadd 选项 用户组
#	选项
#    -g GID 指定新用户组的组标识号(GID)
#    -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同
exp:
groupadd group1
groupadd -g 101 group2
# 删除一个已有的用户组
groupdel 用户组
exp:
groupdel group1
# 修改用户组
groupmod 选项 用户组
#	选项
#    -g GID 为用户组指定新的组标识号。
#    -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
#    -n新用户组 将用户组的名字改为新名字
exp:
groupmod -g 102 group2
groupmod –g 10000 -n group3 group2
# 如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限
newgrp root
# /etc/passwd文件是用户管理工作涉及的最重要的一个文件
cat /etc/passwd
# 格式:
# 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
# /etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生
cat /etc/shadow
# 格式
# 登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
# /etc/group文件存放用户组的所有信息
cat /etc/group
# 格式
# 组名:口令:组标识号:组内用户列表

更改用户所用的shell,可以直接修改/etc/passwd用户后面的shell选项

vim /etc/passwd 

远程连接

# ssh远程连接
ssh root@192.168.10.150
# 输入密码  也可以使用密钥认证登陆

# 图形化远程连接 两边都安装 teamviewer软件

# 远程传输文件
scp ./file.txt lc622@192.168.10.150:~/Myfile # 将本地的file文件传输到远程用户目录下的Myfile文件夹
scp lc622@192.168.10.150:~/Myfile/file.txt ./ #与上方相反
# VNC远程连接
# ssh连接上云服务器 (AWS亚马逊云服务器)
vncserver # 设置VNC密码
vim ~/.vnc/xstartup # 编辑文件
# 云服务器
https://www.runoob.com/linux/linux-cloud-server.html
# 云服务器 域名注册 网站系统
https://c.runoob.com/cloud-server/

Linux磁盘管理

# df/duf 列出文件系统的整体磁盘使用量
df [-ahikHTm] [目录或文件名]
    -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
    -k :以 KBytes 的容量显示各文件系统;
    -m :以 MBytes 的容量显示各文件系统;
    -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
    -H :以 M=1000K 取代 M=1024K 的进位方式;
    -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
    -i :不用硬盘容量,而以 inode 的数量来显示
# du/duf 检查磁盘空间使用量
du [-ahskm] 文件或目录名称
    -a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
    -h :以人们较易读的容量格式 (G/M) 显示;
    -s :列出总量而已,而不列出每个各别的目录占用容量;
    -S :不包括子目录下的总计,与 -s 有点差别。
    -k :以 KBytes 列出容量显示;
    -m :以 MBytes 列出容量显示;
# fdisk 磁盘分区表操作工具
fdisk [-l] 装置名称
-l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。
# 磁盘格式化
mkfs [-t 文件系统格式] 装置文件名
-t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效) 
# 磁盘检验
fsck [-t 文件系统] [-ACay] 装置名称
    -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
    -s : 依序一个一个地执行 fsck 的指令来检查
    -A : 对/etc/fstab 中所有列出来的 分区(partition)做检查
    -C : 显示完整的检查进度
    -d : 打印出 e2fsck 的 debug 结果
    -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
    -R : 同时有 -A 条件时,省略 / 不检查
    -V : 详细显示模式
    -a : 如果检查有错则自动修复
    -r : 如果检查有错则由使用者回答是否修复
    -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复。
# 磁盘挂载与卸除 
mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n]  装置文件名  挂载点
	-f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
	-n :不升级 /etc/mtab 情况下卸除

apt命令

  • 列出所有可更新的软件清单命令:sudo apt update

  • 升级软件包:sudo apt upgrade

    列出可更新的软件包及版本信息:apt list --upgradeable

    升级软件包,升级前先删除需要更新软件包:sudo apt full-upgrade

  • 安装指定的软件命令:sudo apt install <package_name>

    安装多个软件包:sudo apt install <package_1> <package_2> <package_3>

  • 更新指定的软件命令:sudo apt update <package_name>

  • 显示软件包具体信息,例如:版本号,安装大小,依赖关系等等:sudo apt show <package_name>

  • 删除软件包命令:sudo apt remove <package_name>

  • 清理不再使用的依赖和库文件: sudo apt autoremove

  • 移除软件包及配置文件: sudo apt purge <package_name>

  • 查找软件包命令: sudo apt search <keyword>

  • 列出所有已安装的包:apt list --installed

  • 列出所有已安装的包的版本信息:apt list --all-versions


好用的命令行工具

dust(du)

能代替du,一目了然展示目录和文件大小的工具

https://link.zhihu.com/?target=https%3A//github.com/bootandy/dust

duf(df)

代替df,通过彩色表格展示磁盘使用情况的工具

https://link.zhihu.com/?target=https%3A//github.com/muesli/duf

exa(ls)

更加人性化的显示目录下的文件的工具。通过不同颜色展示来区别文件类型,还支持梳妆的方式展示文件层级

exa -l

https://link.zhihu.com/?target=https%3A//github.com/ogham/exa

zoxide(cd)

更聪明的cd命令,能够记住最常使用的目录,目录跳转更加方便

z 目录

https://link.zhihu.com/?target=https%3A//github.com/ajeetdsouza/zoxide

bat(cat)

查看文件内容,默认自带翻页、行号和高亮

bat 文件名

https://link.zhihu.com/?target=https%3A//github.com/sharkdp/bat


Linux教程