Linux使用总结

来源:互联网 发布:电脑免费恢复数据软件 编辑:程序博客网 时间:2024/06/11 07:22
######################################################################################################
#                                linux学习总结                                                         #
#                                  TLone                                                             #
######################################################################################################

vi编辑
g/s1/s//s2/g 用于将所有s2字符串替换为s1
g/^/s// /g   用于在每一行开头插入一个空格
n1,n2s/word1/word2/g   将n1到n2行之间的word1换成word2
n1,$s/word1/word2/g   将n1到结尾之间的word1换成word2
n1,n2 w newfilename 将当前文件n1到n2 之间的内容写入新的文件newfilename
/+目的字符串 用于寻找目的字符串
:ab 字符串1 字符串2 当输入字符串1并按回车或空格时字符串1自动转换成字符串2
e 到一个单词词尾
w 到下一个单词 3w 到后面第三个单词
control f 下一页
cyrol b 上一页
ctrl u 向上半页
ctrl d 向下半页
ctrl p 命令模式下屏幕向上一行
ctrl n 命令模式下屏幕向下一行
ctrl n/p 编辑模式下实现命令自动补全
x 删除光标所在处的字
X 删除光标左面的字
dw 删除光标所在位置到光标所在词词尾
dd 删除当前行
yw 复制一个单词
yy 复制当前行
P 黏贴到下一行
p 黏贴到上一行
u 最后修改一行撤销
打开vi时想要定位到特定行 vi 加号行号 文件名(加号与行号之间没有空格)
:e 加文件名 可以在当前vi中打开另一个文件
:w >或>> 目标文件名 将buffer中的内容写入目标文件
#快速移动光标
n+ 光标向下移动n行
n- 光标向上移动n行
n$ 光标移动到第n行尾
nG 光标移动到n行首
^/0 光标移动至该行首
$  光标移动到该行尾

关于引用
双引号内部允许有命令进行执行(例如:$a,`pwd`)
单引号内部所有字符均按照原来的形似进行输出
反引号内部加上命令用于执行该命令
想要输出特殊符号时要加上\(反斜杠)


输入输出重定向
shell脚本执行结果输出重定向时如果所有结果都要定向到同一文件可在执行时用>或>> 进行定向 若不止重定向道义个文件就在内部分别定向好了
附加重定向符号>>用于将重定向的内容附加到目标文件后面 输出重定向符号>用于直接把内容定向到目标文件若目标文件原来有内容则直接则直接覆盖
输入重定向可以和输出重定向连在一起使用 例:wc -l < infile > outfile 用于统计infile文件行数输出到outfile中
命令 2>目的文件名 用于将命令产生的错误信息重定向到目的文件


命令执行操作符
不同命令可以写在同一行并用分号隔开 例:who;ls 在执行完who命令后直接执行ls命令
逻辑与操作(&&)前一条命令执行成功后才会执行下一条命令 例:date>>file2 && rm file1 在把date的值成功定向到file2时才会删除file1
逻辑或操作(||)前一条命令执行不成功时才会执行下一条命令 例:date>>file2 || rm file1 在把date的值没有定向到file2时执行删除file1的操作


成组命令
将若干条命令用()或{}扩起来可以在逻辑上将其视为同一条命令
(echo“user report for `date`.”;who)|pr左括号后和右括号前不需要有空格,该命令会新开辟一个进程执行,不会影响到父进程
{ echo "user report for `date`.";who }|pr该命令的括号附近需要空格,而且直接在当前进程下执行可以接受当前进程的变量值也可以改变当前进程变量值


数组
bash只支持一维数组,且下标支持数字,变量以及表达式,数字下标大于等于0
赋值方式:
1、city[0]="beijing"
   city[1]="shanghai"
   city[3]="tianjin"
2、数组名(值1 值2...)
   city=(beijing shanghai tianjin)


关于参数
一个脚本中最多有十个位置参数,0-9 但是0为该命令本身,所以可用参数只有九个
shift命令可以将参数1-9依次左移
例:locatefind a b c d e f g h i j k
本来1-9分别是a-i
在脚本中执行shift后位置参数左移一位1-9就变成b-j
执行shift 4 后位置参数左移四位1-9就变成了e-k
$#可以给出实际参数个数(不包括$0)
$?返回上一命令的返回值(返回值为0表示命令成功执行)
$*返回虽有参数组成的字符串(不受九个的限制,若locatefind脚本中有一句echo $* 则输出字符串“a-k”)
引用第九个以后的参数需要把后缀用打括号括起来引用 例:想要引用第十个参数要用以下格式 ${10}
如果中途改变脚本功能可以用set函数重新设置位置参数(如果set后面没有任何东西则会显示所有变量)
        例:
            cat exam14
                       echo `date`
                       set `date`
                       echo $2 $3 $6
                       echo $0 $1 $2 $3 $4 $5 $6


            sh exam14 结果如下:
                         2001年 04月 02日 星期六 16:47:10 CST
                         04月 02日 CST
                         exam14 2001年 04月 02日 星期六 16:47:10 CST


 坑爹的控制结构
if结构
        if 测试条件
            then
                命令
            else
                命令
        fi

case结构
        case 字符串 in
            模式1)命令(这里的模式支持正则表达式)
                   .
                   .
                   .
                   命令;;(这里用的是两个分号)
            模式2)命令
                   命令
                   命令
                   命令;;
        esac

while结构
        while 测试条件
            do
                命令
                命令
            done

for结构
        (1)for 变量 in 值表
            do
                命令
                命令
            done

        (2)for((e1;e2;e3))(e2不为0或e2为真时继续循环,类似c++,不过要注意这里用的是连续两个括号)
                do
                    命令
                    命令
                done


函数相关
函数名()
{
    命令s
}
说明
1、本来函数名前面要有一个function的,可是关键字已经被默认所以可有可无ps:能省就省吧^_*
2、调用函数时不许奥写那个括号,变量通过该函数的位置变量或该脚本内部变量传递


关于脚本
用vi或其他编译器写好脚本后可以将其权限上添加执行权限或sh +脚本名称执行
用第二种方法时可以在sh后面添加-x选项,用于分步执行并显示出每一次的执行结果


关于用户和密码
用户名和密码保存在/etc/passwd文件中
每行的名称分别代表 用户名:密码(用x表示):用户uid(这个值改成0就变成了超级用户):组id:对该账户的描述:home目录位置:默认shell
密码x存储在/etc/shadow文件中
一些乱七八糟的用户不许要shell就把他们的默认shell设置成nologin(删除用户也可以通过把用户默认shell设置成nologin)

shadow文件
路径:/etc/shadow
每行元素
用户名:加密后的密码:上次修改密码时距离1970年1月1日天数:两次修改密码最小间隔天数:几天内必须修改密码
距离密码超期几天时发出警告:超期几天后会被禁用:已经被禁用天数:保留字段
shadow文件只有root用户才能打开


关于vim文件配置
详见www.cnblogs.com/witcxc/archive/2011/12/28/2304704.html


关于c以及cpp文件的编译
c
单文件的编写可以直接用gcc 文件名 然后用./执行生成的文件即可
如果想要自己确定目地文件名就用 -o选项 gcc -o 目标文件名 源代码文件名
多文件以first.h first.c second.h second.c main.c  生成目标文件main为例
(1)gcc first.c second.c main.c -o main
(2)gcc -c first.c
     gcc -c second.c
     gcc -c main.c
     gcc first.o second.o main.o -o main
执行完这些之后就可以用./main执行main文件了
上面那个命令执行之后只会生成一个叫做main的可执行文件
下面那些命令执行后每个.cpp文件都会生成一个对应的.o文件
真正写代码需要执行的时候可以写一个shell脚本来进行执行

cpp
单文件 g++ 源代码文件 -o 目标文件 然后就可以用./命令执行生成的目标文件了
多文件类似上面的c代码编译的第一种方式然后也可以写个shell脚本来执行整个程序

关于ctags
使用前需要先在cpp程序根目录下执行 ctags -R
然后会自动生成一个tag文件
然后在用vi命令打开文档时要运行命令:set tags=tags文件路径
每次改变变量的定义或函数定义就要重新手动运行一下ctags -R命令
wm命令进入tablist模式,:q之后就会进入目录之中
control+]命令进入定义光标所在函数的位置tab

关于权限
个人脚本尽量避免被别人编写,最好自己存放脚本的文件夹禁止别人写入
具体案例见mainshell/example/who1


#############################################################                                                           ##                  一段简单的特洛伊脚本                     ## 通过改写或添加脚本用于实现让其他人帮助实现一定功能的目的  ## 该类脚本会伪装成正常脚本或命令而且被执行过后立刻毁尸灭迹  ##通过root身份执行该脚本不光可以查看当前用户而且可以打开日历 ##当然如果当前文件夹在path路径下面并命名成who后果。。。      ##                                                           ##############################################################who#以下代码尽情发挥不限定为root用户case $(whoami) in root )#恶意命令开始。。。       cal   rm ./who1 #毁尸灭迹开始   ;;esac


0 0