zoukankan      html  css  js  c++  java
  • Linux & Shell 学习笔记【1/2】

    因为工作上的需要,花了些许时间去熟悉学习Linux和Shell,现在也花点事件在此记录一下以加强巩固学习的内容吧。学的不算深入,所以都是一些比较junior的内容。

    在下一篇随笔会详述之前写的一个用于解析swift(569/940/950)的Shell。

    一. Linux

    1. 如下为一些经常使用到的命令,因为刚开始学习的时候记忆的东西比较多,都是根据全称来记忆的,多使用之后就会熟悉了。

    cd / ls / mkdir / rmdir / rm / touch / mv / cp

    对应全称如下

    change directory / list / make directory / remove directory / remove / touch / move / copy

    2. 归档/压缩会用到后面两个命令: tar / gzip

    归档/解归档命令如下:

    tar -cvf archived.tar fileName/FolderName --- 归档文件/文件夹,其中c=create(创建归档);v=visual(显示归档过程);f=file(归档后文件名);archived.tar为归档后的文件名; fileName/FolderName为需要归档的文件/文件夹

    tar -xvf  archived.tar   --- 解除归档,其中vf参数与归档的含义相同,x=extract(解析归档)

    压缩/解压命令如下:

    gzip fileName  --- 压缩,会自动生成fileName.gz的压缩文件(原始的fileName文件会消失)

    gzip -d fileName.gz  --- 解压缩,会自动生成fileName的文件(压缩文件会消失)

    上述的归档/解归档和压缩/压缩可以同时使用

    tar -zcvf archived.tar.gz fileName/FolderName  --- 在归档命令的基础上添加z(标识以gzip的方式进行压缩)

    tar -zxvf  archived.tar.gz   --- 在解归档的基础上添加z(标识以gzip的方式进行解压)

    3.history

    该命令用来获取历史执行命令的记录(会显示对应的commandNumber & commandContent),有如下两个参数:

    history n  --- 展示最新的n条历史记录

    history -c  ---清空历史记录

    其中针对展示的历史记录,可以通过两个方式进行调用:

    ! + commandNumber

    ! + commandContent

    其中commandContent可以为前几个字符,环境会自动匹配历史中最新的命令。

    4. 用户/用户组操作

    添加/删除用户

    useradd newUsername  --- 添加新用户newUsername(此时用户组也默认新建,亦为newUsername)

    uueradd groupName newUsername  --- 添加新用户newUsername,并且该用户所属groupName 用户组

    passwd newUsername userPwd  --- 为用户newUsername 添加密码userPwd

    userdel newUsername  --- 删除用户newUsername

    groupadd newGroupName  --- 添加新用户组newGroupName

    groupdel newGroupName  --- 删除用户组newGroupName

    5. 文件夹权限管理

    针对每个文件都存在属主/属组/其他人的三个读/写/执行权限。可通过如下命令修改文件的属主/属组

    chown newUsername:newGroupName fileName  --- 修改文件fileName的属主为newUsername,属组为newGroupName

    如果只想修改属组,把newUsername置空,注意':'不能去掉。同时也可以通过如下命令

    chgrp newGroupName fileName

    如上两个命令我理解全称就是change owner和change group(方便记忆,包括后面的chmod=change modification)

    6. 利用scp进行上传/下载

    规则一般就是scp source destination

    下载:scp username@host:absolutePath/fileName D:  ---- 将文件fileName下载到D盘中

    上传:scp D:fileName username@host:absolutePath/  --- 将文件fileName上传到服务器absolutePath/下

    如果是上传文件夹,在上传的路径前加-r (标识recursive)

    7. grep/sed/awk

    这三个命令也会经常使用到,查询的时候使用grep比较多,替换使用sed比较多,对查询后的继续处理使用awk比较多。

    grep:

    如grep test test*   ---用来查询以test开头的文件中包含test字符串的内容

    echo “abc” | grep ‘^a'  -- 查询字符串abc是否以字母a开头

    如上可以知道grep也支持正则表达式(会在后面描述),一般情况下需要使用正则时候我会使用egrep,因为有些正则grep还不能使用(应该需要使用grep -e)

    sed:

    echo “abc" | sed 's/a/A/g’  ---可以将a替换成A

    sed -n '1,3p' fileName   输出文件fileName的第一行到第三行,其中p为print,n为quiet(代表只输出选中的内容,否则所有内容都会输出,而且选中的内容会输出两遍)

    awk:

    awk -F ‘:’ '{print $2}' fileName  --- 以分号为分隔符,输出每一行的第二个字符。其中-F为field seperator,作用同-v FS

    awk -v RS=':' 'NR==2{print}'  --- 以分号为RS(row seperator行分隔符),并输出第二行(NR=number row)

    上述只是具体,实际功能均远不止于此,特别awk的功能在处理字符串上极为强大。前段时间因为工作需要利用awk解析swift(569/940/950)报文到指定的格式上,会在后面单独写一遍文档详述。

    8, 切换用户

    su userName  --- 切换到userName用户,但依旧使用当前的环境变量,但userName为空时为切换到root。可以使用exit命令退出当前用户

    su - userName  --- 与上面的相比的不同时会切换当前的环境变量到新用户

    9.管道

    管道用符号|标识,即将管道左边的输出作为管道右边的输入,如:

    echo “123” | grep ‘1’

    上述命令中将文本作为grep命令的输入

    10. 标准输出/输入/错误输出

    标准输入为0,默认从屏幕输入

    标准输出为1,默认输出的屏幕

    标准错误输出为2,默认输出到屏幕

    echo 123 > fileName  --- 将文本123输出到文件fileName中,此时123不会输出到屏幕上

    cat > file1 < file2  --- 将file2作为file1的标准输入,即拷贝file2的内容到file1

    command > file 2>$1  --- 将命令command的结果输出到file中,并将标准错误输出的转到标准输出,即此时如果存在错误也会很标准输出一样输出至file中

    11. 其他零碎的小命令

    sort  排序

    last | sort

    uniq  对重复的内容只显示一次(unique),其中可以使用参数-c来计算重复的数量,如下

    uniq -c

    wc 计算数量(行/单词/字符), 全称应为word count

    wc -l A --- 计算行数

    wc -w  --- 计算单词数量

    wc -m  ---计算字符数量

    如果什么参数都没有,会显示行/单词/字符的数量

    tee 将内容输出的文件的同时标准输出,如:

    echo “123” | tee test.txt

    如上命令在把文本123输入到test.txt*(覆盖的方式)的同时输出到屏幕

    ps -aux  --- 查看内存等使用情况

    top  --- 查看内存等使用情况(动态)

    df -h  ---查看磁盘使用情况

    dos2unix fileName  ---- window和linux的换行符不同,所在需要通过该命令去除多余的^M

    unix2dos filename

    tr ‘a-z’ 'A-Z' 将小写字母转成大写字母

    二. VIM

    1. 搜索字符串

    :/string  --- 向文件尾部搜索字符串

    :?string  --- 向文件头部搜索字符串

    搜索过程中使用n(向下搜索)/N(向上搜索)字符串

    2. 替换字符串

    :[range]s/oldString/newString/g

    其中range可以是1,4代表第一行至第四行:%代表全部内容

    g标识全部替换

    3. 编辑模式

    i/o为进入编辑模式,其中o为在当前行插入一行并让光标停在新的一行

    通过ctrl x + ctrl o可以对参数进行补齐(根据现在文件内容),如果在写shell,参数又比较长,还是比较好用的

    通过ctrl x + ctrl n可以对参数进行补齐(根据当前目录文件)

    4. 指令模式

    u为取消上一次操作(undo),ctrl + r为重做上一次操作(redo);万一取消错了,redo还是很有用的

    v/V/ctrl + v可以对区块(即不对整行进行处理)进行选择,进而进行后续操作(yy/dd/p)

    5. 多文件处理

    好处是针对多个文件间需要使用yy/p命令,不同vim下的文件是无法处理的。vim 后加多个文件可以多文件处理,利用:files可以展示正在多文件处理的文件列表,:n进入到下一个文件,:N进入到上一个文件。

    环境参数设置

    :set nu  --- 显示行号(number)

    :set nonu  --- 不显示行号

    :set hlsearch  --- 高亮查询的结果(highlight search)

    :set nohlsearch  --- 不高亮查询结果

    :set autoindent  --- 启用indent(当该行存在indent,换行后下一行也会保留和改行的indent)

    :set noautoindent  --- 不启动indent

    :set backup  --- 启动备份,当文件发生修改时,会自动生成一个fileName~的备份文件

    :set nobackup  --- 关闭备份(默认为关闭的状态)
    ;syntax on   --- 启动语法(字符颜色不同)

    :syntax on  --- 关闭语法

    三. 正则

    ^为匹配首字符,但在[]代表非

    $匹配尾字符,如^1.*2$为匹配1开头2结尾的字符

    . 匹配除换行符外的任意字符

    *匹配前面的内容0次或多次

    +匹配前面的内容1次或多次

    ?匹配前面的内容0次或1次

    {n}匹配前面的内容n次

    {n,}匹配前面的内容n次或更多次

    {n,m}匹配前面的内容n-m次(包含n和m)

    |各个条件之间的或

  • 相关阅读:
    不要进行过度设计,某一层存在真的有意义吗?是否可以更简单。
    化繁为简 定义权限
    Ajax加载子域跨站cookie丢失的问题.
    Exists 比Contains 慢非常多。
    ValidationExpression="http(s)?://([w-]+.)+[w-]+(/[w- ./?%&=]*)?" can not work
    全屏显示问题
    将System.Drawing.Bitmap转换为Direct2D.D2DBitmap
    《ASP.NET Core In Action》读书笔记系列,这是一个手把手的从零开始的教学系列目录
    《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core 解决方案结构解析1
    《ASP.NET Core In Action》读书笔记系列四 创建ASP.NET Core 应用步骤及相应CLI命令
  • 原文地址:https://www.cnblogs.com/liyijin/p/12589418.html
Copyright © 2011-2022 走看看