Linux常用命令

此讲义的出处:AcWing Linux基础课

此讲义说明:方便以后自己复习使用

1、Linux常用命令

1. 常用命令介绍
    (1) ctrl c: 取消命令,并且换行
    (2) ctrl u: 清空本行命令
    (3) tab键:可以补全命令和文件名,如果补全不了快速按两下tab键,可以显示备选选项
    (4) ls: 列出当前目录下所有文件,蓝色的是文件夹,白色的是普通文件,绿色的是可执行文件
    (5) pwd: 显示当前路径
    (6) cd XXX: 进入XXX目录下, cd .. 返回上层目录
    (7) cp XXX YYY: 将XXX文件复制成YYY,XXX和YYY可以是一个路径,比如../dir_c/a.txt,表示上层目录下的dir_c文件夹下的文件a.txt
    (8) mkdir XXX: 创建目录XXX
    (9) rm XXX: 删除普通文件;  rm XXX -r: 删除文件夹
    (10) mv XXX YYY: 将XXX文件移动到YYY,和cp命令一样,XXX和YYY可以是一个路径;重命名也是用这个命令
    (11) touch XXX: 创建一个文件
    (12) cat XXX: 展示文件XXX中的内容
    (13) 复制文本
        windows/Linux下:Ctrl + insert,Mac下:command + c
    (14) 粘贴文本
        windows/Linux下:Shift + insert,Mac下:command + v
    (15) cd - ;比如的那个前路径为/home/kdh/home, 下一步路径走到了/usr/lib,
    	cd -即可一回到原先的目录/home/kdh/home 
    (16) 在普通命令下,按w就会一直往下一个单词走

常见骚操作

①将a.txt, b.txt, c.txt复制到dir_0下,重命名为a0.txt, b0.txt, c0.txt;
		cp a.txt /dir_0/a0.txt
小技巧,如何在服务器中文件的内容整体复制出来?
在tmux里不可以用鼠标滚轮,所以不可以在tmux中复制文件的文本
退出tmux
cat filename; 将filename中的内容展示出来
鼠标选中文本开头的若干内容
用滚轮滑到文件末尾
按shift;同时鼠标点击文件末尾,此时选中全文
windows/Linux下在Terminal下复制文本是shift + insert ,Max下是command + c复制全文

Linux vim /vimplus更改代码模板

首先进入 ~/.vim/plugged
然后vim prepare-code
键盘向下选择 snippet 点击回车展开
在下列中选择你想更改的模板代码
即可更改
~是家目录
~/.vim/plugged/prepare-code/snippet$ vim snippet.c

2、tmux

tmux的配置文件 ~/.tmux.conf

如果在服务器上的操作版本

1.使用scp将ac terminal中的tmux配置文件上传到自己的服务器

scp .tmux.conf your_server:

2.重启tmux

pkill tmux && tmux

在自己本地ubuntu的配置

1.先安装tmux sudo apt-get install tmux
2. 安装好后,用vim,编辑,把以下内容进行复制到配置文件中,保存退出即可
set-option -g status-keys vi
setw -g mode-keys vi

setw -g monitor-activity on

# setw -g c0-change-trigger 10
# setw -g c0-change-interval 100

# setw -g c0-change-interval 50
# setw -g c0-change-trigger  75


set-window-option -g automatic-rename on
set-option -g set-titles on
set -g history-limit 100000

#set-window-option -g utf8 on

# set command prefix
set-option -g prefix C-a
unbind-key C-b
bind-key C-a send-prefix

bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

bind < resize-pane -L 7
bind > resize-pane -R 7
bind - resize-pane -D 7
bind + resize-pane -U 7


bind-key -n M-l next-window
bind-key -n M-h previous-window



set -g status-interval 1
# status bar
set -g status-bg black
set -g status-fg blue


#set -g status-utf8 on
set -g status-justify centre
set -g status-bg default
set -g status-left " #[fg=green]#S@#H #[default]"
set -g status-left-length 20


# mouse support
# for tmux 2.1
# set -g mouse-utf8 on
set -g mouse on
#
# for previous version
#set -g mode-mouse on
#set -g mouse-resize-pane on
#set -g mouse-select-pane on
#set -g mouse-select-window on


#set -g status-right-length 25
set -g status-right "#[fg=green]%H:%M:%S #[fg=magenta]%a %m-%d #[default]"

# fix for tmux 1.9
bind '"' split-window -vc "#{pane_current_path}"
bind '%' split-window -hc "#{pane_current_path}"
bind 'c' new-window -c "#{pane_current_path}"

# run-shell "powerline-daemon -q"

# vim: ft=conf

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
            ...
操作:
提示:用一次tmux命令,就会新建一个session,关于session的选择,见12)

    (1) tmux:新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个shell对话框。
    (2) 按下Ctrl + a后手指松开,然后按%:将当前pane左右平分成两个pane。
    (3) 按下Ctrl + a后手指松开,然后按"(注意是双引号"):将当前pane上下平分成两个pane。
    (4) Ctrl + d:关闭当前pane;如果当前window的所有pane均已关闭,则自动关闭window;如果当前session的所有window均已关闭,则自动关闭session。
    (5) 鼠标点击可以选pane。
    (6) 按下ctrl + a后手指松开,然后按方向键:选择相邻的pane。
    (7) 鼠标拖动pane之间的分割线,可以调整分割线的位置。
    (8) 按住ctrl + a的同时按方向键,可以调整pane之间分割线的位置。
    (9) 按下ctrl + a后手指松开,然后按z:将当前pane全屏/取消全屏。
    (10) 按下ctrl + a后手指松开,然后按d:挂起当前session。(会退出tmux)
    (11) tmux a:打开之前挂起的session。(即进入ctrl + a + d 之前的的session)
    (12) 按下ctrl + a后手指松开,然后按s:选择其它session。
        方向键 —— 上:选择上一项 session/window/pane
        方向键 —— 下:选择下一项 session/window/pane
        方向键 —— 右:展开当前项 session/window
        方向键 —— 左:闭合当前项 session/window
    (13) 按下Ctrl + a后手指松开,然后按c:在当前session中创建一个新的window。
    	为了看的更清晰,需要多窗口的话,一个session对应一个window会好的多
    (14) 按下Ctrl + a后手指松开,然后按w:选择其他window,操作方法与(12)完全相同。
    (15) 按下Ctrl + a后手指松开,然后按PageUp:翻阅当前pane内的内容。
    (16) 鼠标滚轮:翻阅当前pane内的内容。
    (17) 在tmux中选中文本时,需要按住shift键。(仅支持Windows和Linux,不支持Mac,不过该操作并不是必须的,因此影响不大)
    (18) tmux中复制/粘贴文本的通用方式:※※※※
        (1) 按下Ctrl + a后松开手指,然后按[
        (2) 用鼠标选中文本,被选中的文本会被自动复制到tmux的剪贴板
        (3) 按下Ctrl + a后松开手指,然后按],会将剪贴板中的内容粘贴到光标处

3、vim

功能:
    (1) 命令行模式下的文本编辑器。
    (2) 根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。
    (3) 使用方式:vim filename
        如果已有该文件,则打开它。
        如果没有该文件,则打开个一个新的文件,并命名为filename
模式:
    (1) 一般命令模式
        默认模式。命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等。
    (2) 编辑模式
        在一般命令模式里按下i,会进入编辑模式。
        按下ESC会退出编辑模式,返回到一般命令模式。
    (3) 命令行模式
        在一般命令模式里按下:/?三个字母中的任意一个,会进入命令行模式。命令行在最下面。
        可以查找、替换、保存、退出、配置编辑器等。
操作:
    (1) i:进入编辑模式
    (2) ESC:进入一般命令模式
    (3) h 或 左箭头键:光标向左移动一个字符
    (4) j 或 向下箭头:光标向下移动一个字符
    (5) k 或 向上箭头:光标向上移动一个字符
    (6) l 或 向右箭头:光标向右移动一个字符
    (7) n<Space>:n表示数字,按下数字后再按空格,光标会向右移动这一行的n个字符
    (8) 0 或 功能键[Home]:光标移动到本行开头
    (9) $ 或 功能键[End]:光标移动到本行末尾
    (10) G:光标移动到最后一行
    (11) :n 或 nG:n为数字,光标移动到第n行
    (12) gg:光标移动到第一行,相当于1G
    (13) n<Enter>:n为数字,光标向下移动n行
    (14) /word:向光标之下寻找第一个值为word的字符串。
    (15) ?word:向光标之上寻找第一个值为word的字符串。
    (16) n:重复前一个查找操作
    (17) N:反向重复前一个查找操作
    (18) :n1,n2s/word1/word2/g:n1与n2为数字,在第n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2
    (19) :1,$s/word1/word2/g:将全文的word1替换为word2
    (20) :1,$s/word1/word2/gc:将全文的word1替换为word2,且在替换前要求用户确认。
    (21):s/word1/word2/g 将本行的word1替换成word2
    (21) v:选中文本(按两下ESC,就可以取消选中的文本)
    (22) d:删除选中的文本(d/dd实际是剪切,删除后,可以通过p粘贴回来)
    (23) dd: 删除当前行
    (24) y:复制选中的文本
    (25) yy: 复制当前行
    (26) p: 将复制的数据在光标的下一行/下一个位置粘贴
    (27) u:撤销
    (28) Ctrl + r:取消撤销
    (29) 大于号 >:将选中的文本整体向右缩进一次(不行的话就 shift + >)
    (30) 小于号 <:将选中的文本整体向左缩进一次 (不行的话就 shift + <)
    (31) :w 保存
    (32) :w! 强制保存
    (33) :q 退出
    (34) :q! 强制退出
    (35) :wq 保存并退出
    (36) :set paste 设置成粘贴模式,取消代码自动缩进(将代码原样的复制)
    (37) :set nopaste 取消粘贴模式,开启代码自动缩进
    (38) :set nu 显示行号
    (39) :set nonu 隐藏行号(将tumx全屏后,用于复制代码)
    (40) gg=G:将全文代码格式化
    	连招小技巧:
    	ggdG 表示从起始处开始删,一直到结尾,ggd5表示从开始处开始删一直删到第5行
    	同理:ggyG从起始处开始复制,一直到结果处
    (41) :noh 关闭查找关键词高亮
    (42) Ctrl + q:当vim卡死时,可以取消当前正在执行的命令
    (43) Ctrl + s:不是保存,而是会使得vim卡死,
    (44) 在普通模式下替换一个字符:按r + 更改的值 完成替换
异常处理:
    每次用vim编辑文件时,会自动创建一个.filename.swp的临时文件。
    如果打开某个文件时,该文件的swp文件已存在,则会报错。此时解决办法有两种:
        (1) 找到正在打开该文件的程序,并退出
        (2) 直接删掉该swp文件即可
    (45)nyy:表示从当前行开始复制n行,同理4dd,从当前行开始删除4行
    (46)ngc + 空格; 表示从当前行开始,将n行的内容进行注释
    (47)在vim里编辑多个文件的方法
    	当vim还没启动:vim file1 file2..
    	当vim已经启动输入以下命令可以打开另一个文件
    		:e filename
    	文件的切换:
    		:bn 切换到下一个文件 next
    		:bp 切换到上一个文件 prev
        
        
 修改vim的颜色:单次:
 	:colorscheme + 空格 + tab选择自己喜欢的颜色样式
 长期修改的话:在主题设置中 colorscheme,后面修改想要的颜色
 比较不错的颜色:shine、darkblue、default、dracula(就他) morning\

vim常用骚操作

	 [1] 删除第11行                                   11Gdd
    [2] 将所删除的行粘贴到文件最后一行的下一行       			  Gp
    [3] 复制第5行                                     5Gyy
    [4] 将所复制的行粘贴到文件当前最后一行的下一行   			  G$p
    [5] 删除第11行第15个字符(包含该字符)至第13行第5个字符(包含该字符) 11G14<space>v13G5<space>d
    
    所以移动到某一行,还是用nG,即行号+G,这样v后的框选就变得非常简单
    
   【6】 复制代码,先进入编辑模式,在复制也可以
    【7】vim +622 文件名  表示从该文件的第622行开始显示
    
   【8】 在复制粘贴代码后如何一行也不少,且按格式粘贴代码?
    	把代码复制好后,先进入要复制的文件,进入后输入:set paste
    	进入i编辑模式,然后shift + insert粘贴
    	esc退回普通模式,:set nopaste
    	
【9】多行注释的方式
1) [ctrl]+v 进入竖选模式
2) 选择范围
3) I(一定是大写)
4)输入 //
5)输入 [ESC]

【10】当一段代码中括号内,{},[],<>()内部,如果删除扩号内部内容和删除包括扩号内容
a{ 表示删除所有的{}里的内容,包括{}
	da{   删除当前所处的{}的所有内容
	ya{   复制当前所有的{}的所有内容
i{ 表示删除所有的{}里的内容,不包括{}
	di{   删除当前所处的{}内的所有内容
	yi{   复制当前所有的{}内的所有内容  
p->paragraph(段) 包括了边界与空行
	dap   删除当前所处的段的内容
	dip   删除当前所有的段的内容

[11] 复制粘贴较长的代码************
	在普通模式下输入  :set paste
	在想要粘贴的部分按 shift + fn + insert
	gg=G
	此时会有很多的间隔符号(没有就算),但这部是必要的操作  :set nopaste
	(有间隔符在次输入)gg=G

组合键的使用

i: 在光标前面插入   insert
I: 在行首插入
a: 在光标后面插入   after
A: 在行尾插入
o: 在下面另起一行,并在行首插入  other
O: 在上面另起一行,并在行首插入
v: 进入行选模式
[ctrl]+v: 进入竖选模式

[n]-: 往上移动n行
[n]+: 往下移动n行

w:下一个单词的词首 word
b:上一个单词的词首 before word

dw: 删除一个单词
[n]dw 或 d[n]w删除n个单词
[n]dd 或 d[n]d删除n行
:[m],[n]d删除[m,n]行
d^删除到行首 可以d0,
d$删除到行尾
dt)删除到)  delete to )
dt"删除到"  delete to "

[n]yy 或 y[n]y复制n行
:[m],[n]y复制[m,n]行
yw复制一个单词
[n]yw 或 y[n]w复制n个单词
yt)复制到)
yt"复制到"

4、shell

1.概述

课堂笔记-shell概述

一、脚本示例
新建一个test.sh文件,内容如下:

#! /bin/bash
echo "Hello World!"
二、运行方式
作为可执行文件
acs@9e0ebfcd82d7:~$ chmod +x test.sh  # 使脚本具有可执行权限
acs@9e0ebfcd82d7:~$ ./test.sh  # 当前路径下执行
Hello World!  # 脚本输出
acs@9e0ebfcd82d7:~$ /home/acs/test.sh  # 绝对路径下执行
Hello World!  # 脚本输出
acs@9e0ebfcd82d7:~$ ~/test.sh  # 家目录路径下执行
Hello World!  # 脚本输出

三、用解释器执行
acs@9e0ebfcd82d7:~$ bash test.sh
Hello World!  # 脚本输出
2.注释

注释

一、单行注释
每行中#之后的内容均是注释。

# 这是一行注释
echo 'Hello World'  #  这也是注释

二、多行注释
格式:
:<<EOF
第一行注释
第二行注释
第三行注释
EOF

其中EOF可以换成其它任意字符串。例如:
:<<abc
第一行注释
第二行注释
第三行注释
abc

:<<!
第一行注释
第二行注释
第三行注释
!
3.变量

变量

一、定义变量
定义变量,不需要加$符号,例如:

name1='yxc'  # 单引号定义字符串
name2="yxc"  # 双引号定义字符串
name3=yxc    # 也可以不加引号,同样表示字符串
二、使用变量
使用变量,需要加上$符号,或者${
   }符号。花括号是可选的,主要为了帮助解释器识别变量边界。
养成好习惯的话,一定要这样写${
   }

name=yxc
echo $name  # 输出yxc
echo ${name}  # 输出yxc
echo ${name}acwing  # 输出yxcacwing

三、只读变量
使用readonly或者declare可以将变量变为只读。

name=yxc
readonly name
declare -r name  # 两种写法均可(r = read)

name=abc  # 会报错,因为此时name只读

四、删除变量
unset可以删除变量。

name=yxc
unset name
echo $name  # 输出空行

五、变量类型
自定义变量(局部变量)
	子进程不能访问的变量-> 在命令行输入bash,就会开启子进程的shell程序,编辑shell脚本就是在局部定义的
环境变量(全局变量)
	子进程可以访问的变量

①自定义变量改成环境变量:
acs@9e0ebfcd82d7:~$ name=yxc  # 定义变量
acs@9e0ebfcd82d7:~$ export name  # 第一种方法
acs@9e0ebfcd82d7:~$ declare -x name  # 第二种方法

②环境变量改为自定义变量:
acs@9e0ebfcd82d7:~$ export name=yxc  # 定义环境变量
acs@9e0ebfcd82d7:~$ declare +x name  # 改为自定义变量

六、字符串
字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号与双引号的区别:

单引号中的内容会原样输出,不会执行、不会取变量;
双引号中的内容可以执行、可以取变量;
name=yxc  # 不用引号
echo 'hello, $name \"hh\"'  # 单引号字符串,输出 hello, $name \"hh\"
echo "hello, $name \"hh\""  # 双引号字符串,输出 hello, yxc "hh"


七、获取字符串长度
name="yxc"
echo ${
   #name}  # 输出3


八、提取子串
name="hello, yxc"
echo ${name:0:5}  # 提取从0开始的5个字符

注意事项
1、定义变量时,等号两边  不能  有空格
2、定义变量的时候变量都是字符串,但当变量需要是整数时,会自动把变量转换成整数
3、type+命令可以解释该命令的来源(内嵌命令。第三方命令等)
如type readonly 
#readonly is a shell builtin(shell内部命令)
type ls 
# ls is aliased to ‘ls –color+auto’
4、被声明为只读的变量无法被unset删除
5、bash可以用来开一个新的进程,exit或Ctrl+d退出新的bash
6、字符串中,不加引号和双引号效果相同
7、如果一个变量不存在的话,他的值是空字符串
8、默认变量是局部变量(自定义变量)
4.默认变量

默认变量

一、文件参数变量
在执行shell脚本时,可以向脚本传递参数。$1是第一个参数,$2是第二个参数,以此类推。特殊的,$0是文件名(包含路径)。例如:

①创建文件test.sh:
#! /bin/bash

echo "文件名:"$0
echo "第一个参数:"$1
echo "第二个参数:"$2
echo "第三个参数:"$3
echo "第四个参数:"$4

②然后执行该脚本:
acs@9e0ebfcd82d7:~$ chmod +x test.sh 
acs@9e0ebfcd82d7:~$ ./test.sh 1 2 3 4
文件名:./test.sh
第一个参数:1
第二个参数:2
第三个参数:3
第四个参数:4

注意事项:
1、向脚本传递参数时,参数个数超过一位需要用大括号括起来
例如:符号只能取一个变量如果要取数字是两位的话参数需要加括号例如符号只能取一个变量如果要取数字是两位的话参数需要加括号例如{
   10}10就是10就是1 后面在输出0
echo$10是错误的,但是echo ${10}是正确的

2$0是文件名(包含路径),其实就是我们输入的第一段,输入绝对路径就显示绝对路径,输入相对路径就显示相对路径

3、注意分清 退出状态 和 标准输出

符号只能取一个变量如果要取数字是两位的话参数需要加括号例如符号只能取一个变量如果要取数字是两位的话参数需要加括号例如{10} 而 10就是10就是1 后面在输出0

参数 说明
$# 代表文件传入的参数个数,如上例中值为4
$* 由所有参数构成的用空格隔开的字符串,如上例中值为"$1 $2 $3 $4"
$@ 每个参数分别用双引号括起来的字符串,如上例中值为"$1" “$2” “$3” “$4”
$$ 脚本当前运行的进程ID
$? 上一条命令的退出状态(注意不是stdout,而是exit code)。0表示正常退出,其他值表示错误
$(command) 返回command这条命令的stdout(可嵌套)如:$(ls) 返回的是/home/kdh/
`command` 返回command这条命令的stdout(不可嵌套)
5.默认变量

数组

数组中可以存放多个不同类型的值,只 支持  一维数组,初始化时不需要指明数组大小。
数组下标从0开始。

一、定义
数组用小括号表示,元素之间用空格隔开。例如:

array=(1 abc "def" yxc)
也可以直接定义数组中某个元素的值:

array[0]=1
array[1]=abc
array[2]="def"
array[3]=yxc


二、读取数组中某个元素的值
格式:
${array[index]}
例如:

array<

相关推荐

  1. Linux命令

    2024-04-21 20:18:03       51 阅读
  2. Linux 命令

    2024-04-21 20:18:03       64 阅读
  3. Linux命令

    2024-04-21 20:18:03       56 阅读
  4. linux命令

    2024-04-21 20:18:03       59 阅读
  5. Linux命令

    2024-04-21 20:18:03       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 20:18:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 20:18:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 20:18:03       87 阅读
  4. Python语言-面向对象

    2024-04-21 20:18:03       96 阅读

热门阅读

  1. 【数学】常用等价无穷小及其注意事项示例

    2024-04-21 20:18:03       42 阅读
  2. CentOS常见的命令

    2024-04-21 20:18:03       41 阅读
  3. 常用渗透测试checklist

    2024-04-21 20:18:03       31 阅读
  4. 关于DDD设计模式的各种疑问:什么是DDD架构?

    2024-04-21 20:18:03       30 阅读
  5. iOS Delegate receiver 如何返回值给 sender

    2024-04-21 20:18:03       34 阅读
  6. UML绘制

    2024-04-21 20:18:03       33 阅读
  7. 怎么直连某个服务器的dubbo服务

    2024-04-21 20:18:03       34 阅读