常用Linux命令

常用Linux命令

=================================================================================

输入命令时的快捷键:
Ctrl + r        reverse-i-search 根据关键字搜索历史命令
Ctrl + a        跳到命令开始
Ctrl + e        跳到命令结束
Ctrl + k        删除光标之后的命令
Ctrl + u        删除光标之前的命令
Ctrl + c        取消当前命令
Ctrl + l        清屏

------------------------------------------

程序运行时的快捷键:

Ctrl + c        发送SIGINT信号,终止进程
Ctrl + d        发送EOF,结束当前输入
Ctrl + z        发送SIGSTOP信号,挂起进程(之后运行bg可以将进程放到后台继续执行)

stty -a         查看各快捷键作用

=================================================================================

command1 ; command2         命令1后执行命令2
command1 && command2        命令1执行成功后执行命令2
command &                   将命令放到后台执行
jobs                        查看后台运行命令
bg                          将进程放到后台继续执行(需要配合Ctrl + z)
fg id                       将指定job放到前台执行

command &>/dev/null &       后台运行command并且不显示任何输出

command1 $(command2)        command2的输出作为command1的参数
command1 `command2`         作用同上,command2的输出作为command1的参数(~里的·)

command 2>file              将command的错误输出保存至file

command 2>&1                将输出信息定向到标准输出中

命令连接符:
|
>
>>
2>
&
;
&&

=================================================================================

ls、grep、sed、awk、find、locate都支持各自的正则表达式,大部分很类似,稍有不同

=================================================================================

pidof processname           查询指定进程的pid
kill pid                    结束指定进程

fdisk -l                    列出所有磁盘
lsblk                       列出所有块设备信息
df -T                       查看分区格式
du -h                       查看文件实际占用
uname -a                    查看系统版本(同cat /proc/version)
top                         资源占用
top -p 21656 -d 1           查看指定进程CPU占用(PID 21656),每1秒刷新一次
    

free                        内存占用
vmstat 5                    显示资源占用情况(CPU、内存),每5秒刷新一次
iostat -d -x /dev/sda 2     显示磁盘IO情况(2秒刷新一次)
dd                          创建指定大小文件

ln file newname             创建硬连接
ln -s file newname          创建软连接
unlink                      删除连接

history                     查看历史命令
history -c                  清空历史命令
!10                         执行指定历史命令 (执行第10条命令,后面可以继续跟需要添加的命令)
!!                          执行上一条命令
!:0                         上一条命令的命令名(不包括参数,同!#)
!:1                         上一个命令的第一个参数(不包括前面的命令)
!:2                         上一个命令的第二个参数
!$                          上一个命令的最后一个参数
$?                          上一个命令的返回值
${PIPESTATUS[0]}            上一个命令中第一个命令的返回值(用于处理使用管道串联的多个命令的返回值)

man 1 cmd                   查看可执行程序和shell命令说明
man 2 funName               查询Linux的API说明
man 3 funName               查询标准C函数
section in man
       1   Executable programs or shell commands
       2   System calls (functions provided by the kernel)
       3   Library calls (functions within program libraries)
       4   Special files (usually found in /dev)
       5   File formats and conventions eg /etc/passwd
       6   Games
       7   Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
       8   System administration commands (usually only for root)
       9   Kernel routines [Non standard]

man -k funName              查找出现函数或结构体的具体位置(包括section)

readelf -S file.so          查看ELF文件section信息
readelf -s file.so          查看ELF文件的符号表
readelf -n file.so          查看ELF文件或DEBUG文件的core notes(包括Build ID,用于debuginfo的查找)

objcopy --only-keep-debug ./a.out a.out.debug                导出a.out中的debug信息至a.out.debug
objcopy --strip-debug ./a.out                                删除a.out中的debug信息(同strip --strip-debug ./a.out)
objcopy --add-gnu-debuglink=a.out.debug ./a.out              指定a.out对应的调试信息(否则strip之后的文件无法找到对应debug信息)
objdump -s -j .gnu_debuglink ./a.out                         显示a.out中的指定section信息(.gnu_debuglink)


ldd remote-viewer           查看动态库依赖

rpm -qf test.so             参看置顶lib属于的rpm包



tee 可以读取标准输出内容并输出至文件(同时显示),比如: make install | tee make-install.log



=========================================================

vim 常用指令:


查找    /                     查找字符串
        ?                     反向查找字符串
        n                     下一个
        N                     上一个

        *                     查找与当前光标下单词匹配的字符串
        #                     向上查找与当前光标下单词匹配的字符串

        :noh                  取消之前的搜索高亮

        Shift+k               在man手册中查找光标下的函数或结构体


替换    :s/str1/str2          替换当前行第一个str1
        :s/str1/str2/g        替换当前行所有str1
        :n,$s/str1/str2/g     替换重第n行开始到结束的所有str1

使用正则表达式替换
        :0,$s/echo \"Test \([a-zA-Z]\+\) fail.\"/echo -e \"\\033\[31mTest \1 fail.\\033\[0m\"/g           将文本中的所有echo "Test *** fail."替换为echo -e "\033[31mTest *** fail.\033[0m"

删除    dd                删除当前行
        3dd               从当前行开始,向下删除3行
        di                删除当前字符
        x                 删除当前字符(同di)
        D                 从当前位置删除到行尾(同d$)
        dw                从当前位置到下一个单词开头
        db                从当前位置到前一个单词开头
        diw               删除光标上的单词(不包括空白字符)
        daw               删除光标上的单词(包括空白字符)
        diW               删除光标下的字符串(不包括空白字符)
        daW               删除光标下的字符串(包括空白字符)
        dib               删除光标下“()”内的内容(不包括小括号),同di(
        dab               删除光标下“()”的内容(包括小括号)
        diB               删除光标下“{}”内的内容(不包括大括号),同di{
        daB               删除光标下“{}”的内容(包括大括号)
        di"               删除光标下引号内的内容
        dG                从当前位置删除到文件末
        dgg               从当前位置删除到文件首
        cc                删除当前行并切换至INSERT模式
        C                 删除从光标开始至行尾的内容并切换至INSERT模式(同c$)
        cw                删除光标下的work,并切换为INSERT模式
        J                 删除当前行尾部的换行符
        o                 在当前行下另起一行开始输入
        O                 在当前行上另起一行开始输入

复制    yy                复制当前行
        3yy               从当前行开始,复制3行
        yw                复制从光标位置到单词结束位置
        y$                复制从光标位置到行结束
        y^                复制从光标位置到行首
        ya"               复制光标下“”的内容(包括引号)(类似删除快捷键,支持各种yiw/yaw/yiW/yaW/yib/yab/yiB/yaB/yi"/ya"等操作)


选择    v                 开始使用光标选择
        V                 选择行
        y                 将选择的范围复制
        d                 将选择的范围剪切
        ctrl+v            块选择(列选择)
	viw               选中光标下的单词(不包括空白字符)
	viB               选中光标下“{}”内的内容(不包括大括号),同vi{

        =                 使用V选择后,按=可以格式化代码

粘贴    p                 粘贴vi缓冲区中的内容

方向键  hjkl              左下上右
        H M L             屏幕顶部 中间 底部
        gk                在一个长行里向上一屏幕行移动(也可以用方向键代替k)
        gj                在一个长行里向下一屏幕行移动
        10gj              在一个长行里向下移动10屏幕行
        g^                在一个长行里移动到屏幕行开始
        g$                在一个长行里移动到屏幕行结束

跳转    gg                跳转到开始
        G                 跳转到结尾
        10gg或10G         跳转到第10行
        30|               跳转到当前行第30列
        fx                跳转到光标右边第一个x字符(可以使用';'或者','继续查找)
        3fx               跳转到光标右边第三个x字符
        Fx                跳转到光标左边第一个x字符
        tx                跳转到光标右边第一个x字符前
        Tx                跳转到光标左边第一个x字符后
        %                 跳转到对应的括号(包括大括号、中括号、小括号)
        ''(两次单引号)  跳转到刚才的位置(来回切换)
        [[                跳转到当前函数开始位置
        ][                跳转到当前函数结束位置
        ]]                跳转到下一个函数的开始位置
        []                跳转到上一个函数的结束位置
        `.                跳转到最后一次修改的位置
        `"                跳转到上次退出文件时的位置
        :marks            显示默认跳转标识(使用`加mark跳转,比如`3)
        m字母             做标记(小写字母在当前文件起作用,大小字母在全局起作用,使用"`字母"跳转,例如`J)
        Ctrl+o            向前跳(回跳)
        Ctrl+i            向后跳转
        Ctrl+f            向前翻页
        Ctrl+b            向后翻页


cscope操作:
        cscope -Rbq       在源码根目录创建cscope索引文件(shell中执行的命令)
        :cs find {querytype} {name}    查找制定函数定义,其中querytype可以有以下类型:
            0 or s:       Find this C symbol
            1 or g:       Find this definition
            2 or d:       Find functions called by this function
            3 or c:       Find functions calling this function
            4 or t:       Find this text string
            6 or e:       Find this egrep pattern
            7 or f:       Find this file
            8 or i:       Find files #including this file

        :cs f g do_fork   跳转到do_fork定义处


tag
        ctags -R          在源码根目录创建tag索引文件(shell中执行的命令)
        :tag do_fork      跳转到函数定义处

        Ctrl+]            跳转到函数或枚举定义处
        Ctrl+t            返回上一个查找的地方


撤销    u                 撤销
        Ctrl+r            反撤销


        Ctrl+n            自动补全

窗口操作
        sp file1          水平分隔窗口打开file1(同split)
        vsp file2         垂直分隔窗口打开file2
        Ctrl+w 按两次     切换不同窗口

        :close            关闭当前窗口(彻底退出用:q)

        :open file3       打开file3
        !ls               执行ls命令(!可以执行本地命令)
        :saveas file2     另存为新文件名file2

文件操作(一次打开多个文件时)
        :next              下一个文件
        :2next             向后跳2个文件
        :previous          上一个文件
        :first             移动到第一个文件
        :last              移动到最后一个文件
        :args              显示当前文件打开参数
        Ctrl+^             在两个文件之间切换(不影响next命令的顺序)


Tab页操作
        :tabnew 文件名    新Tab打开文件
        :tabc             关闭当前Tab
        :tabo             关闭其它Tab
        :tabs             查看所有Tab
        :tabp             前一个Tab
        :tabn             下一个Tab
        :tabfirst         第一个Tab
        :tablast          最后一个Tab


        gt                下一个Tab
        gT                上一个Tab



TAB替换为空格:
:set ts=4
:set expandtab
:%retab!

常用指令:
set number                显示行号
set autoindent            下一行和当前行缩进相同
set smartwidth            根据C语言自动缩进(配合autoindent使用)
set tabstop=4             tab缩进4个空格(同set ts=4)
set shiftwidth=4          自动缩进为4个空格(比如左大括号的下一行)
set expandtab             输入的tab转换为空格
set showmatch             显示匹配的括号

set nowrap                长度超过屏幕时不自动换行
help wrap                 查看相关帮助信息


:read filename            将filename的文件内容插入到当前光标的下一行
:read !cmd                将cmd的输出插入到当前光标的下一行
:n1,n2 write filename     将n1行-n2行的内容写入文件filename中

多行加入相同内容:
        Ctrl+v选择列后,按I(shift+i),输入要加入的内容,按ESC

.vimrc中加入下列配置可以修改注释颜色
highlight Comment ctermfg=green guifg=green


ctags插件:
扫描工程目录,生成相应的额索引文件(可用于查找、定位、自动补全等)
ctags -R
将生成的tags文件放到vim编辑文件的位置

=========================================================

git命令

git init                          初始化git库
git status                        查看当前目录状态
git add .                         添加所有文件
git commit -m "comment"           提交至本地库
git push origin branchname        将本地分支提交至远程库
git fetch                         更新远程各分支信息
git merge origin/branchname       将远程的branchname分子合并至当前分支
git branch -a                     查看所有分支(包括远程分支)
git checkout branchname           切换至分支branchname
git checkout -b branchname        创建并切换至分支branchname
git checkout -b branchname origin/branchname       映射远程分支到本地的某个新分支中
git branch branchname             创建分支branchname
git diff filename                 查看本次文件修改内容
git diff HEAD filename            查看当前文件和HEAD中版本的区别
git diff HEAD^^ HEAD --stat       查看当前版本与两次commit之前版本差别的文件列表


git rm filename                   从文件库中删除指定文件
git reset HEAD filename           将文件从暂存区中移除(相当于反add,文件内容不会变)
git checkout -- filename          丢弃指定文件在工作区中的修改(回到最近一次git add时或git commit时的状态)

统计指定用户指定时间段内修改的代码量(包括添加、删除。其中${git.username}为指定用户名)
git log --author="${git.username}" --after={2015-01-01} --before={2016-01-01} --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 + $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -

统计指定用户指定时间段内提交次数
git log --author="t${git.username}" --after={2015-01-01} --before={2016-01-01} --oneline | wc -l

=========================================================

调试工具:
strace
ptrace
ltrace
dmesg
systemtap
iptraf        查看各个网卡网络流量信息

lsof -p pid                               显示指定pid打开的所有文件
fuser -v /var/log/messages                查看当前使用messages文件的进程
fuser -k /var/filename                    kill所有打开/var/filename的进程

abrt-cli list                             查看系统记录的崩溃信息(修改配置文件/etc/abrt/abrt-action-save-package-data.conf,将其中的OpenGPGCheck设置为no,可以捕获非GPG签名的安装包崩溃时的coredump)

addr2line
addr2line -e bin_filepath 地址            查找指定可执行文件指定地址对应的代码位置
addr2line -e /usr/lib64/libc-2.17.so -fCi 0x162851    输出libc中指定偏移对应的代码位置(动态库中的地址)
=========================================================
systemtap命令
stap test.stp                             执行指定脚本
stap -l 'kernel.function("*read")'        列出指定的probe对应的line
stap -L 'kernel.function("*read")'        列出制定的probe对应的line及var

=========================================================
GDB命令

break <function>                           在进入指定函数时停住
break <linenum>                            在指定行号停住。
break +/-offset                            在当前行号的前面或后面的offset行停住。offiset为自然数。
break filename:linenum                     在源文件filename的linenum行处停住。
break ... if <condition>                   ...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环境体中,可以设置break if i == 100,表示当i为100时停住程序。
    break main if argc > 1
    break test.c:34 if strlen(mystring) == 0
    break 180 if (string == NULL && i < 0)
    break myfunc if i % (j + 3) != 0

condition 1 argc == 0                      将断点1的条件改为if argc == 0 (命令中不包含if)
condition 1                                删除断点1中的条件

break <linespec> thread <threadno>         在特定线程中中断
break <linespec> thread <threadno> if ...  在特定线程中特定条件下中断

info b                                     显示所有断点信息,同"info breakpoints"

delete                                     删除所有断点
delete breakpoint [n]                      删除某个断点
disable breakpoint [n]                     禁用某个断点,同"disable b n"
enable breakpoint [n]                      使能某个断点

info threads                               查看当前可调式的所有线程
thread ID                                  切换至指定ID的线程
break source.c:123 thread all              在所有线程中相应的行上设置断点
set scheduler-locking off|on|step          控制线程调度方式(可以只调试当前线程,暂时不调度)

catch <event>,event可以是下面的内容:
        throw                              C++抛出的异常时中断
        catch                              C++捕捉到的异常时中断
        exec                               调用系统调用exec时(只在某些操作系统下有用)
        fork                               调用系统调用fork时(只在某些操作系统下有用)
        vfork                              调用系统调用vfork时(只在某些操作系统下有用)
        load 或 load <libname>             载入共享库时(只在某些操作系统下有用)
        unload 或 unload <libname>         卸载共享库时(只在某些操作系统下有用)



watch <expr>         变量发生变化时中断
rwatch <expr>        变量被读时中断
awatch <expr>        变量值被读或被写时中断


continue             继续运行程序直到下一个断点(类似于VS里的F5)
continue n           继续n次,第n+1次中断
next                 逐过程步进,不会进入子函数(类似VS里的F10)
next n               继续走n步,然后中断
setp                 逐语句步进,会进入子函数(类似VS里的F11)
until                运行至当前语句块结束
finish               运行至函数结束并跳出,并打印函数的返回值(类似VS的Shift+F11)
r                    运行程序
r a b c              以参数a b c运行程序
list                 显示源码
list file:N          显示指定文件的指定行(会同时显示上下各5行)
list n1,n2           显示n1行至n2行之间的代码
attach 12345         附加到PID为12345的进程
detach               脱离进程(防止进程在GDB退出时被结束)
file /home/test      加载指定文件的符号
set args a b c       设置运行参数

bt                   查看调用堆栈
up 栈帧号            栈帧上移
down 栈帧号          栈帧下移
info frame           显示栈帧详细信息
info args            显示当前栈帧函数的所有参数
info locals          显示当前栈帧中所有局部变量
info shared          查看动态库
info proc            查看进程信息
info registers       查看寄存器
info watchpoints     查看观察点
ptype                查看变量类型详细说明
whatis               查看变量类型简要说明
frame ###            跳至指定frame(可查看相应的局部变量)

p val                显示变量val
p (char*)val         显示val指向的字符串
p 'main.c'::g_val    显示main.c中的全局变量g_val
p strlen(str)        显示str字符串的长度

x/nfu addr           查看内存数据
    n 表示要显示的内存单元的个数
    f 表示显示方式, 可取如下值
        x 按十六进制格式显示变量。
        d 按十进制格式显示变量。
        u 按十进制格式显示无符号整型。
        o 按八进制格式显示变量。
        t 按二进制格式显示变量。
        a 按十六进制格式显示变量。
        i 指令地址格式
        c 按字符格式显示变量。
        f 按浮点数格式显示变量。
    u 表示一个地址单元的长度
        b 表示单字节
        h 表示双字节
        w 表示四字节
        g 表示八字节


set var expr         修改变量var的值

Ctrl+x Ctrl+a        显示/关闭TUI界面

源码搜索目录相关:
        directory path-list           将一个或者多个源代码搜索目录加入到当前源码搜索目录列表的前面,目录之间使用空格间隔。
        directory                     不带参数的directory将源码搜索目录恢复为默认值。
        set directories path-list     将源码目录设置为path-list,但是会补上默认目录。
        show directories              显示源码搜索目录列表。
        set substitute-path from to   设置目录替换规则,放置在规则列表的末端。
        unset substitute-path [path]  删除path对应的替换规则,或者删除所有的替换规则。
        show substitute-path [path]   显示path对应的替换规则,或者显示所有的替换规则。


相关命令行:
ulimit -c unlimited                       设置crash dump(程序崩溃后,会在当前目录生成dump文件core.xxxx)
gdb --core=core.xxxx                      使用gdb加载dump文件(之后使用"file ./a.out"加载符号文件,也可以使用下面的命令一步完成)
gdb a.out core.xxxx                       gdb加载a.out对应的dump文件core.xxxx

gdb foo 12345                             附加到pid为12345的进程中

gdb -tui                                  以上下分屏方式显示源码和调试输出


=========================================================

文件和目录:
cd -                                             返回上次所在目录
cp -a /tmp/dir1 .                                复制一个目录到当前工作目录(.代表当前目录)
mkdir -p /tmp/dir1/dir2                          创建一个目录树
rm -rf /tmp/dir1                                 删除一个目录及其所有子文件和子目录

ls -1                                            只显示文件或文件夹名

cat /etc/redhat-release                          查看系统版本号

查看文件内容:
cat file1                                        从第一个字节开始正向查看文件的内容
head -2 file1                                    查看一个文件的前两行
more file1                                       查看一个长文件的内容
tac file1                                        从最后一行开始反向查看一个文件的内容
tail -3 file1                                    查看一个文件的最后三行
od -Ax -tx1a -j100 -N50 filename                 以16进制查看一个文件从100偏移之后的50字节(-tx4时,显示的实际上时DWORD,注意直接顺序)
tail -f /var/log/messages                        查看messages日志文件(动态更新)
echo -n text                                     显示内容text,结束位置不换行
echo                                             显示空行(换行)

find . -name "*.[hc]" |xargs cat|grep -v ^$|wc -l          统计当前目录下(包括子目录)h和c文件行数(不包括空行)
find . -name "*.[hc]" |xargs cat|wc -l                     统计当前目录下(包括子目录)h和c文件行数(包括空行)
wc * -l                                                    统计当前目录下(不包括子目录)所有文件行数

dd if=/dev/zero of=file.img bs=1M count=100                生成一个100MB的文件
dd if=/dev/zero of=file.img bs=1M seek=1000 count=0        生成一个1GB的稀疏文件

touch -m -d “2010-08-09 11:12” file1             修改指定文件的修改时间

which gcc                                        查找程序所在位置
whereis gcc                                      查找程序所在位置

服务管理:
service abrtd start                              启动服务
service abrtd stop                               停止服务
chkconfig abrtd on                               开机启动(启用、自动)
chkconfig abrtd off                              开机不启动(禁用)

setup                                            可以设置很多设置,包括服务、网络等

文本处理:
grep str /tmp/test           在文件 '/tmp/test' 中查找 "str"
grep ^str /tmp/test          在文件 '/tmp/test' 中查找以 "str" 开始的行
grep [0-9] /tmp/test         查找 '/tmp/test' 文件中所有包含数字的行
grep str -r /tmp/*           在目录 '/tmp' 及其子目录中查找 "str"
grep $'\t' /tmp/test         在文件'/tmp/test'中查找Tab
grep '按Ctrl+V,再按Tab' test    在文件test中查找Tab
grep -Ei "abc|def"           忽略大小写查找包含abc或def的行(忽略带小写的正则表达式)
grep -E 'expr' /tmp/test     在'/tmp/test'中查找匹配正则表达式'expr'的行
grep -n "" file              显示文件file并显示行号
grep "physical id" /proc/cpuinfo | sort | uniq | wc -l    查询物理CPU个数

diff file1 file2             找出两个文件的不同处
sdiff file1 file2            以对比的方式显示两个文件的不同


hexdump -C file              以十六进制显示文件
od -t x1 file                以十六进制显示文件(可定制性较强)
od -t x1 -N 128 file         以十六进制显示文件前128字节
od -t x1 -j 128 file         以十六进制显示文件128字节之后的内容

vimdiff file1 file2          使用vim显示文件不同(会使用颜色高亮)

ls /proc/1785/task | xargs -i cat /proc/{}/stack          显示所有子进程的调用堆栈({}用于代替xargs分割出的内容,-i可以使用-I{}代替)

查找:
find / -name file1                                        从 '/' 开始进入根文件系统查找文件和目录
find / -user user1                                        查找属于用户 'user1' 的文件和目录
find / -iname filename                                    忽略带小写查找文件filename
find /home/user1 -name \*.bin                             在目录 '/ home/user1' 中查找以 '.bin' 结尾的文件
find /usr/bin -type f -atime +100                         查找在过去100天内未被使用过的执行文件
find /usr/bin -type f -mtime -10                          查找在10天内被创建或者修改过的文件
find -name '*.[ch]' | xargs grep -E 'expr'                在当前目录及其子目录所有.c和.h文件中查找 'expr'
find -type f -print0 | xargs -r0 grep -F 'expr'           在当前目录及其子目录的常规文件中查找 'expr'
find -maxdepth 1 -type f | xargs grep -F 'expr'           在当前目录中查找 'expr'


diff -Naur PathA PathB >AtoB.patch                        生成Patch文件
patch -bp1 < AtoB.patch                                   在当前目录中应用patch文件(参数b为修改文件前备份文件)
patch -RE -p1 < AtoB.patch                                在当前目录中根据patch还原目录文件

locate \*.ps                                              寻找以 '.ps' 结尾的文件,先运行 'updatedb' 命令
locate -b "\name"                                         查找name文件
locate -i filename                                        忽略大小写查找文件
locate $(!!) | head -n 1                                  查找刚才命令的第一行输出文件所在位置
file $(!!) | sed -n 3p                                    显示刚才命令的第三行输出的文件信息

awk
awk -F ":|=" '{print $2}'                                 以':'和'='作为分隔符分隔列,输出第二列内容
awk 'NR>1'                                                输出第二行及之后的内容(忽略第一行)

.....

ldd UVMClient | awk '{if (substr($3,1,1) == "/") {print $3} else if (substr($1,1,1) == "/") {print $1}}'        获取ldd输出中第三列以“/”开头的第三列或以"/"开头的第一列

sed
sed 's/str1/str2/g'                                       将内容中的所有'str1'替换为'str2'
sed -i "s/echo \"Test result:fail/echo -e \"Test result: \\\\033[31mfail\\\\033[0m/g" *.sh    替换当前目录所有sh文件中的指定内容
sed -i 's/str1/str2/g' `grep "str1" -rl .`                将当前文件夹下(包括子文件夹中的文件)中所有的str1替换为str2
.....

cut
cut -d ',' -f 1                                           删除','后的所有内容



sort
......




scp /localpath/file username@hostname:/remotepath/file                上传本地文件到远程目录
scp -r /localpath/folder username@hostname:/remotepath/file           上传本地目录到远程目录
scp username@hostname:/remotepath/file /localpath/file                下载远程文件至本地

mount -t cifs -o username=name //addr/share /mnt/share                挂载windows共享目录share至/mnt/share

umount -l /mnt/mnt_dir                                                立即断开文件系统,所有清理以后执行(可以用于umount卡住的nfs挂载点)

ssh -o ServerAliveInterval=60 username@ip                             保持连接,防止自动断开


getenforce                                                            查看当前系统seLinux是否开启

iptables -nvL --line-number                                           查看当前表的所有规则
iptables -A INPUT -s 192.168.1.5 -j DROP                              添加一条规则,丢弃所有来自192.168.1.5的数据
iptables -D INPUT -s 192.168.1.5 -j DROP                              删除之前添加的规则
iptables -D INPUT 2                                                   删除INPUT中的第二条规则
iptables -R INPUT 3 -j ACCEPT                                         将INPUT中的第三条规则target改为ACCEPT

/*****************************************/
本机A建立连接机器B上的SSH信任关系

ssh-keygen -b 1024 -t rsa                                              本机A生成秘钥
scp ~/.ssh/id_rsa.pub root@ip:~/.ssh/id_rsa.pub                        将生成的公钥拷贝到机器B中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys                        机器B中将拷贝的公钥添加到authorized_keys中

如果文件authorized_keys,要保证文件权限为600(644?)
检测机器B中的配置文件:/etc/ssh/sshd_config,启用其中的下列三行:
                RSAAuthentication yes
                PublicAuthentication yes
                AuthorizedKeysFile .ssh/authorized_keys

如果希望使用短登录名,可以修改~/.ssh/config,添加:
                Host *
                Host *newname
                HostName 192.168.9.21
                User root
                ForwardAgent yes
                Compression yes

下次登录时使用 ssh newname即可登录
删除.ssh目录后,重新建立信任关系失败可能需要如下命令将私钥加入: ssh-add ~/.ssh/id_rsa
/*****************************************/

其它SSH命令:
ssh-copy-id username@host                                                      将本机SSH公钥复制到远程主机,开启无密码登录
dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp                将麦克风输出到远程计算机的扬声器上(音质比较差)
ssh username@host cat /path/to/remotefile | diff /path/to/localfile -          比较本地文件和远程文件
ssh -t reachable_host ssh unreachable_host                                     通过reachable_host创建与unreachable_host的连接
ssh user@host cat /path/to/some/file | xclip                                   将远程主机中的制定文件内容复制到剪切板


/*****************************************/
第三方工具,可以输入密码等交互式会话

expect
SSH_Time_Out()
{
        local host=192.168.9.21
        local time_out=250
        local command="ifconfig"
        local exp_cmd=$(cat << EOF
                spawn ssh root@$host $command
                set timeout $time_out
                expect {
                        "*assword:" { send "123456\r"; exp_continue}
                        "*(yes/no)?" {send "yes\r"; exp_continue}
                        eof {exit 0}
                }
                EOF)
        ??? expect -c "$exp_cmd"
        ??? return $?
}

/*****************************************/

useradd name                            添加用户(如果需要执行sudo的权限,需要在/etc/sudoers中添加相应用户)
passwd name                             设置用户密码
userdel name                            删除用户

chown -R username foldername            修改整个文件夹(递归)的所有者
chgrp -R groupname foldername           修改整个文件夹(递归)的组
chown username:groupname file           同时修改文件的所有者和组
chmod u+w filename                      文件添加写权限


压缩和解压:
bzip2 file1                             压缩 file1
bunzip2 file1.bz2                       解压 file1.bz2
gzip file1                              压缩 file1
gzip -9 file1                           最大程度压缩 file1
gunzip file1.gz                         解压 file1.gz
tar -cvf archive.tar file1              把file1打包成 archive.tar (-c: 建立压缩档案;-v: 显示所有过程;-f: 使用档案名字,是必须的,是最后一个参数)
tar czvf archive.tar.gz dir1            把dir1打包成archive.tar.gz
tar -cvf archive.tar file1 dir1         把 file1,dir1 打包成 archive.tar
tar -tf archive.tar                     显示一个包中的内容
tar -xvf archive.tar                    释放一个包
tar -xvf archive.tar -C /tmp            把压缩包释放到 /tmp目录下
zip file1.zip file1                     创建一个zip格式的压缩包
zip -r file1.zip file1 dir1             把文件和目录压缩成一个zip格式的压缩包
unzip file1.zip                         解压一个zip格式的压缩包到当前目录
unzip test.zip -d /tmp/                 解压一个zip格式的压缩包到 /tmp 目录

tar zxvf archive.tar.gz                 解压tar.gz
tar jxvf archive.tar.bz2                解压tar.bz2
tar Jxvf archive.tar.xz                 解压tar.xz

yum工具:
yum -y install [package]                下载并安装一个rpm包
yum localinstall [package.rpm]          安装一个rpm包,使用你自己的软件仓库解决所有依赖关系
yum -y update                           更新当前系统中安装的所有rpm包
yum update [package]                    更新一个rpm包
yum remove [package]                    删除一个rpm包
yum list                                列出当前系统中安装的所有包
yum search [package]                    在rpm仓库中搜寻软件包
yum clean [package]                     清除缓存目录(/var/cache/yum)下的软件包
yum clean headers                       删除所有头文件
yum clean all                           删除所有缓存的包和头文件
yum whatprovides "*/g++"                查询哪些包提供指定文件
yum install ld-linux.so.2               可以根据缺少的库安装对应的包
yum install "pkgconfig(gstreamer-app-0.10)"                      安装包含指定包的相关包
yum install xxx --downloadonly --downloaddir=/xxx                下载指定软件包(不安装)
yum --disablerepo=\* --enablerepo=c6-media install package       在制定repo中安装package
debuginfo-install package --nogpgcheck                           安装package对应的debuginfo(--nogpgcheck表示检测gpg签名)

rpm -ivh package                        安装一个包
rpm -Uvh package                        升级一个包
rpm -ev package                         卸载一个包
rpm -ev --nodeps package                卸载一个包(忽略依赖)

rpm -qa package                         查询包信息
rpm -ql package                         列出包含的文件
rpm -qpl package.rpm                    列出指定rpm包中的文件
rpm -qpR package.rpm                    列出指定rpm包的依赖包

rpm -qf file                            查找file属于哪个rpm包

rpm2cpio xxx.rpm | cpio -div            解压一个rpm包,会解压到当前目录,最好先新建一个文件夹
rpmbuild -bp xxx.spce                   解压源码并打补丁
rpmbuild -bc xxx.spce                   编译rpm解压出的源码
rpmbuild --rebuild xxx.src.rpm          编译相应的rpm包

安装EPEL源
yum install http://mirrors.ustc.edu.cn/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
yum install http://mirrors.ustc.edu.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm


网络:
ifconfig eth0                                              显示一个以太网卡的配置
ifconfig eth0 192.168.1.1 netmask 255.255.255.0            配置网卡的IP地址
ifdown eth0                                                禁用 'eth0' 网络设备
ifup eth0                                                  启用 'eth0' 网络设备
iwconfig eth1                                              显示一个无线网卡的配置
iwlist scan                                                显示无线网络
ip addr show                                               显示网卡的IP地址
tcpdump -i br0 host 192.168.9.161 -w  test.cap -s 0        抓包
netstat -antp | grep libvirtd                              获取libvirtd进程监听的信息


其他:
su -                    切换到root权限(与su有区别)
shutdown -h now         关机
shutdown -r now         重启
pstree                  以树状图显示程序
man ping                查看参见手册(例如ping 命令)
passwd                  修改密码
df -h                   显示磁盘的使用情况
cal -3                  显示前一个月,当前月以及下一个月的月历
cal 10 1988             显示指定月,日期的月历

watch -d -n 1 'ls -l /var/log/hostagent | grep hostagent'  检测文件变化(-d表示监控修改,-n 1表示每秒刷新一次)


date --date '1970-01-01 UTC 1427888888 seconds'   把相对于1970-01-01 00:00的秒数转换成时间,下面两个命令意义相同
date --date='@1450152602'
date -d '@1450152602'

date -d "2015-12-22 10:00:00" +%s                 把时间字符串转为相对于1970-01-01 00:00的秒数
date "+%Y-%m-%d %H:%M:%S"                         按2015-12-30 16:49:10的格式输出时间

openssl x509 -in ./ca.crt -noout -text            分析证书文件

============================================================================================


qemu-img create -f qcow2 -o backing_file=win7.img win7_using.qcow2 15G       克隆镜像(基于母镜像的QCOW2镜像)

============================================================================================

常用快捷键:

CentOS 中可以通过系统->首选项->键盘快捷键来设置快捷键,如图所示。例如可将运行终端的快捷键设为Ctrl+Alt+T。

Ctrl + u                删除光标之前到行首的字符
Ctrl + k                删除光标之前到行尾的字符
Ctrl + c                取消当前行输入的命令,相当于Ctrl + Break
Ctrl + a                光标移动到行首(ahead of line),相当于通常的Home键
Ctrl + e                光标移动到行尾(end of line)
Ctrl + f                光标向前(forward)移动一个字符位置
Ctrl + b                光标往回(backward)移动一个字符位置
Ctrl + l                清屏,相当于执行clear命令
Ctrl + r                显示:号提示,根据用户输入查找相关历史命令(reverse-i-search)
Ctrl + w                删除从光标位置前到当前所处单词(word)的开头
Ctrl + t                交换光标位置前的两个字符
Ctrl + y                粘贴最后一次被删除的单词
Ctrl + Alt + d          显示桌面
Alt + b                 光标往回(backward)移动到前一个单词
Alt + d                 删除从光标位置到当前所处单词的末尾
Alt + F2                运行
Alt + F4                关闭当前窗口
Alt + F9                最小化当前窗口
Alt + F10               最大化当前窗口
Alt + Tab               切换窗口

Alt +按住左键  移动窗口(或在最下面的任务栏滚动鼠标滑轮)
[鼠标中间键] 粘贴突出显示的文本。使用鼠标左键来选择文本。把光标指向想粘贴文本的地方。点击鼠标中间键来粘贴。
[Tab] 命令行自动补全。使用 shell 提示时可使用这一方式。键入命令或文件名的前几个字符,然后按 [Tab] 键,它会自动补全命令或显示匹配键入字符的所有命令。
在桌面或文件管理器中直接按 / 就可以输入位置,打开文件管理器。
快速搜索:在 vi 或 Firefox 中直接按 / 即可进入搜索状态。
网站链接和图片可直接拖放到桌面或者目录,可以马上下载。
直接将文件管理器中的文件拖到终端中就可以在终端中得到完整的路径名。
在滚动条的空白处点击鼠标中键,屏幕即滚动到那个地方。

============================================================================================

LVM创建LV过程:

创建PV:
pvcreate /dev/sdc1
pvcreate /dev/sdd2
创建VG:
vgcreate data /dev/sdc1 /dev/sdd2
激活VG:
vgchange -a y data
创建PV:
lvcreate -l600 data -n data01        // 600为PE个数,也支持大小,比如-L500M
创建文件系统:
mkfs.ext4 /dev/data/data01
挂载文件系统:
mkdir /data
mount /dev/data/data01 /data


/*
VG中删除PV        vgreduce data /dev/sdd2
VG中添加PV        vgextend data /dev/sdd3

扩展LV        lvextend -L+500M /dev/data/data01        // 也可以直接设定目标大小,比如-L2G
扩容文件系统 resize4fs /dev/data/data01
*/

LV        lvdisplay        lvcreate        lvremove        lvextend        lvreduce        lvchange        lvscan
PV        pvdisplay        pvcreate        pvremove                                        pvchange        pvscan
VG        vgdisplay        vgcraete        vgremove        vgextend        vgreduce        vgchange        vgscan

============================================================================================

Shell编程:

整数比较:
    -eq        等于,如:if [ "$a" -eq "$b" ]
    -ne        不等于,如:if [ "$a" -ne "$b" ]
    -gt        大于,如:if [ "$a" -gt "$b" ]
    -ge        大于等于,如:if [ "$a" -ge "$b" ]
    -lt        小于,如:if [ "$a" -lt "$b" ]
    -le        小于等于,如:if [ "$a" -le "$b" ]
    <          小于(需要双括号),如:(("$a" < "$b"))
    <=         小于等于(需要双括号),如:(("$a" <= "$b"))
    >          大于(需要双括号),如:(("$a" > "$b"))
    >=         大于等于(需要双括号),如:(("$a" >= "$b"))

字符串比较:
=         等于,如:if [ "$a" = "$b" ]
==        等于,如:if [ "$a" == "$b" ],与=等价
              注意:==的功能在[[]]和[]中的行为是不同的,如下:
              1 [[ $a == z* ]]    # 如果$a以"z"开头(模式匹配)那么将为true
              2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
              3
              4 [ $a == z* ]      # File globbing 和word splitting将会发生
              5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
              一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是.
              但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.
!=        不等于,如:if [ "$a" != "$b" ] 。这个操作符将在[[]]结构中使用模式匹配.
<         小于,在ASCII字母顺序下.如:
              if [[ "$a" < "$b" ]]
              if [ "$a" \< "$b" ]
              注意:在[]结构中"<"需要被转义.
>         大于,在ASCII字母顺序下.如:
              if [[ "$a" > "$b" ]]
              if [ "$a" \> "$b" ]
              注意:在[]结构中">"需要被转义.
              具体参见Example 26-11来查看这个操作符应用的例子.
-z        字符串为"null".就是长度为0.
-n        字符串不为"null"
              注意:
              使用-n在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z
              或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可
              以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.

文件判断:
    –b 当file存在并且是块文件时返回真
    -c 当file存在并且是字符文件时返回真
    -d 当pathname存在并且是一个目录时返回真
    -e 当pathname指定的文件或目录存在时返回真
    -f 当file存在并且是正规文件时返回真
    -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
    -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
    -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
    -p 当file存在并且是命令管道时返回为真
    -r 当由pathname指定的文件或目录存在并且可读时返回为真
    -s 当file存在文件大小大于0时返回真
    -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
    -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的
    -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真

字符串处理:

${#string}                              $string的长度
${string:position}                      在$string中, 从位置$position开始提取子串
${string:position:length}               在$string中, 从位置$position开始提取长度为$length的子串
${string#substring}                     从变量$string的开头, 删除最短匹配$substring的子串
${string##substring}                    从变量$string的开头, 删除最长匹配$substring的子串
${string%substring}                     从变量$string的结尾, 删除最短匹配$substring的子串
${string%%substring}                    从变量$string的结尾, 删除最长匹配$substring的子串
${string/substring/replacement}         使用$replacement, 来代替第一个匹配的$substring
${string//substring/replacement}        使用$replacement, 代替所有匹配的$substring
${string/#substring/replacement}        如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring
${string/%substring/replacement}        如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring


============================================================================================


echo -e “\033[30m 黑色字 \033[0m”
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[32m 绿色字 \033[0m”
echo -e “\033[33m 黄色字 \033[0m”
echo -e “\033[34m 蓝色字 \033[0m”
echo -e “\033[35m 紫色字 \033[0m”
echo -e “\033[36m 天蓝字 \033[0m”
echo -e “\033[37m 白色字 \033[0m”

echo -e “\033[40;37m 黑底白字 \033[0m”
echo -e “\033[41;37m 红底白字 \033[0m”
echo -e “\033[42;37m 绿底白字 \033[0m”
echo -e “\033[43;37m 黄底白字 \033[0m”
echo -e “\033[44;37m 蓝底白字 \033[0m”
echo -e “\033[45;37m 紫底白字 \033[0m”
echo -e “\033[46;37m 天蓝底白字 \033[0m”
echo -e “\033[47;30m 白底黑字 \033[0m”

\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m — \33[37m 设置前景色
\33[40m — \33[47m 设置背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标

============================================================================================


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值