`
xyqck163
  • 浏览: 105384 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

linux笔记

阅读更多

压缩指令
compress  老式的unix上用的压缩命令,现在已经基本不用
gzip,Zcat 常用压缩指令
[root@www ~]# gzip 檔名
選項與參數:
-c  :將壓縮的資料輸出到螢幕上,可透過資料流重導向來處理;
-d  :解壓縮的參數;
-t  :可以用來檢驗一個壓縮檔的一致性~看看檔案有無錯誤;
-v  :可以顯示出原檔案/壓縮檔案的壓縮比等資訊;
-#  :壓縮等級,-1 最快,但是壓縮比最差、-9 最慢,但是壓縮比最好!預設是 -6

zcat , compress 都可以读取gzip 和compress 的压缩包

复制命令
cp 命令用于复制 默认情况下文件在复制后会将复制出来的文件的权限设定当前用户,
如果想保留原来的权限则需要提供参数 比如 加上-p  或 -a
使用cp可以用来建立连接档(快捷方式) 加上-s参数或 -l参数
还可以备份文件,加上-u只有文件有更新时才复制
复制目录 -r
[root@www ~]# cp [options] source1 source2 source3 .... directory
選項與參數:
-a  :相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)
-d  :若來源檔為連結檔的屬性(link file),則複製連結檔屬性而非檔案本身;
-f  :為強制(force)的意思,若目標檔案已經存在且無法開啟,則移除後再嘗試一次;
-i  :若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)
-l  :進行硬式連結(hard link)的連結檔建立,而非複製檔案本身;
-p  :連同檔案的屬性一起複製過去,而非使用預設屬性(備份常用);
-r  :遞迴持續複製,用於目錄的複製行為;(常用)
-s  :複製成為符號連結檔 (symbolic link),亦即『捷徑』檔案;
-u  :若 destination 比 source 舊才更新 destination !

1. 在运行程序时 按快捷键Ctrl+Z 会将程序放到后台执行
2. 使用 alias 指令可以定义指令的别名  如:  alias ll='ls -l'  ,直接执行alias将会把当前已经定义的所有alias都显示出来
   unalias可以取消别名
3. vim 中块选择,v ,V ,Ctrl+v  三个快捷键  ,移动光标进行选择,选中后可以按y进行复制 ,回到一般模式 后按p进行黏贴及可
    使用ctrl+w 可以在vim不同的视窗之间进行切换
    存为新文件的指令为 :w newfilename
    编辑后回退  :e!
4. dos或windows 下的文件使用CRLF进行的换行。而Linux下的文件使用的LF进行换行,所以将在dos下写好的脚本拿到linux下执行就有可能会出现指令解析错误的情况。
    解决方案就是将dos生成的文件转换为linux下的格式。    使用命令:
    [root@www ~]# dos2unix [-kn] file [newfile]  《《--将dos文件转换为unix格式
    [root@www ~]# unix2dos [-kn] file [newfile]  《《--将unix文件格式转换为dos格式
5. 编码转换 指令 iconv
    小技巧,使用编码转换可以进行简体和繁体互转。
6. shell 脚本, shell scripts 的编制
   shell可以看成是通过语言界面与内核进行交互的平台,不同的类unix系统使用的shell版本也不相同,Linux一般使用Bourne Again SHell (簡稱 bash)
   1) 查看可以使用的shell ,在/etc/shells 这个文件中

7. env 指令可以查看当前的环境变量。 set指令 可以查看当期所有设置的变量,包括环境变量。
8. 使用set查出所有的环境变量,其中 PS1 变量中的值决定了命令行的显示形式 
比如
PS1='[\u@\h:\W]\$'  <<--- 当如此设置时,命令行显示成如下所示
[chengkai@localhost:chengkai]$ 

9. 两个比较特别的变数
    $ 美元符是一个变数,用于存放shell的PID
   
    chengkai@localhost:/$ echo $$
    2765
    chengkai@localhost:/$ bash
    chengkai@localhost:/$ echo $$
    2769
    ? 问号也是一个变数,用于存放shell上一个指令的错误代码,如果上一个指令没有错误,那么输出0
10. 使用  export 变量名  可以将变量定义为环境变量。直接使用export可以打印出所有的环境变量,和env类似,不过更全

11. 使用locale -a 指令 可以查看所有语系
    直接使用 locale 指令可以打印出当前所有变量中的语系
    在  /etc/sysconfig/i18n  这个文件中存放了系统启动时预设的编码方式
12. 键盘读取指令 read variable
    直接使用read指令不加参数,会出现一个等待符号等待用户输入内容
    chengkai@localhost:/$ read varobj
    hi world
    chengkai@localhost:/$ echo $varobj
    hi world

chengkai@localhost:/$ read -p "please input text:" aaa   《《--  使用-p参数可以在输入开头添加默认提示文本
please input text:   
chengkai@localhost:/$

13. declare 指令用于定义变量,如果没有加参数直接使用declare ,那么效果和set类似
chengkai@localhost:/$ declare -r readOnlyVar=12345   《《--加上 -r参数后定义的变量就成了只读类型,若想恢复只有退出后重新登录
chengkai@localhost:/$ echo $readOnlyVar
12345
chengkai@localhost:/$ readOnlyVar=34567
-bash: readOnlyVar: readonly variable

chengkai@localhost:/$ declare -a myVar=1234          《《--加上 -a参数可以将变量定义为数组类型
chengkai@localhost:/$ echo $myVar
1234
chengkai@localhost:/$ myVar[0]=0index            《《-- 可以这样为数组中元素赋值
chengkai@localhost:/$ myVar[1]=1index
chengkai@localhost:/$ myVar[3]=3index
chengkai@localhost:/$ echo $myVar            《《-- 不加索引直接输出时 只会输出头索引处的变量值
0index
chengkai@localhost:/$ echo $myVar[0],$myVar[1],$myVar[3]    《《--这种书写方式是错误的,shell不认,只能加上大括号
0index[0],0index[1],0index[3]
chengkai@localhost:/$ echo ${myVar[0]},${myVar[1]},${myVar[3]}   《《--正确
0index,1index,3index
chengkai@localhost:/$ declare -x bbb='abc'        《《-- 加上 -x参数可以将变量定义为环境变量,与export相同
chengkai@localhost:/$ export
declare -x HOME="/home/chengkai"
declare -x LANG="en_US.UTF-8"
declare -x LOGNAME="chengkai"
declare -x MAIL="/var/mail/chengkai"
declare -x OLDPWD
declare -x PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
declare -x PWD="/"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="192.168.1.6 2420 22"
declare -x SSH_CONNECTION="192.168.1.6 2420 192.168.1.154 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm"
declare -x USER="chengkai"
declare -x aaa=""
declare -x bbb="abc"    《《-- 在这里

14.  ulimit 指令可以对用户调用系统资源的程度进行限制
     如果没有加任何参数直接执行ulimit,那么会显示出当前用的所有限制
15. shell 中变量里边有删除和取代的功能
    删除功能:
    ${variable#/*kerberos/bin:}  从头开始删除变量variable中和/*kerberos/bin:匹配的最短字符串
    ${variable##/*kerberos/bin:} 删除最长匹配串
    ${variable%/*kerberos/bin:}  从末尾开始删除变量variable中和/*kerberos/bin:匹配的最短字符串
    ${variable%%/*kerberos/bin:} 从末尾开始匹配,删除最长匹配串
    上面不同的是 ,使用# 或%  表示匹配最短串  ,  使用 ## 或 %%匹配最长串

    替换功能:
    ${variable/bin/BIN:}  将变量中的从头开始搜索到的第一个小写bin替换为大写BIN
    ${variable//bin/BIN}  将变量中所有的小写bin替换为大写BIN

    默认值:
    varobj=${varobj-zifuchuan} 如此赋值时,如果varobj没有定义那么默认会将-后的字符串进行赋值
    varobj=${varobj:-zifuchuan}  如此格式 :- 和 - 不同的地方在于 使用:-时如果varobj没有定义或者为空字符串时都将使用后边的默认值

    myvar=${varobj=zifuchuan}  varobj 未定义时 myvar和 varobj同时变为默认值,否则同时变为varobj的值
    myvar=${varobj:=zifuchuan} varobj 未定义或为空字符串时,同时变为默认值,否则同时变为varobj的值

    varobj=${varobj?zifuchuan} varobj 未定义时 以 zifuchuan为错误信息输出,否则赋值
    varobj=${varobj:?zifuchuan} varobj 未定义或为空字符串时 以 zifuchuan为错误信息输出,否则赋值
   
16. history 命令用于查看目前为止输入命令的历史记录   ~/.bash_history  文件用于存放历史记录,每当用户退出时进行一次记录,所以可以就~/.bash_logout 文件修改来定义历史的记录。
    $HISTSIZE 变量中存放了历史记录的最大条数 
17. 有些机器上使用ls 查看的内容是没有颜色的,解决办法, 声明一个ls别名 为 alias ls='ls --color=tty'

18. /etc/issue 文件负责 用户在主机登录后的一些欢迎信息。  在这里通过一些特定的可以获得需要显示的系统信息
    /etc/issue.net  文件负责当用户使用telnet等远程方式登录时的欢迎信息
        \d 本地端時間的日期;
    \l 顯示第幾個終端機介面;
    \m 顯示硬體的等級 (i386/i486/i586/i686...);
    \n 顯示主機的網路名稱;
    \o 顯示 domain name;
    \r 作業系統的版本 (相當於 uname -r)
    \t 顯示本地端時間的時間;
    \s 作業系統的名稱;
    \v 作業系統的版本。
   
    一般情况而言 issue 文件主要用于系统信息的显示,如果有一些额外的信息需要添加,
    那么可以修改/etc/motd  ,修改后同样会追加为欢迎信息
   

19. /etc/profile 系统整体的设定放在了这个文件里边。
    ~/.bash_profile 或 ~/.bash_login 或 ~/.profile   属于使用者个人设定,针对自己的变量设置在改资料时在这里编辑
20. linux分为 login 登录 和 non login登录,login登录时需要输入用户名与密码,non login登录则不需要输入用户名密码
    我们一般的登录都属于login登录, 而如果在shell中执行bash开启新的shell时是不需要输入用户名密码的,这时采用的就是 non login登录。
    /etc/profile 和 ~/.bash_profile 文件都只有在使用login方式登录时才会加载,
   个人登录时,三个文件的执行顺序如下。3个文件只会执行其中一个,如果找到了 ~/.bash_profile 文件,那么就不会读取后两个文件,依次类推。
   1.  ~/.bash_profile   ---依次加载 ~/.bashrc -> /etc/bashrc
   2. ~/.bash_login
   3. ~/.profile

   ~/.bashrc 在non login方式下会进行读取

21. 使用source 指令动态加载设定档。 当使用non login方式进行登录时是不会读取 /etc/profile 和 ~/.bash_profile 设定文件的,
    所以如果这时需要加载/etc/profile 文件的话就必须手动执行指令
    source /etc/profile  《《---这样就加载了/etc/profile 设定档
    . /etc/profile       《《---效果和上边一样

22.  stty(setting tty) 命令用于设定终端机。  可以使用stty设定按键含义,使用stty -a 将会打印出当前所有的按键列表
     在red hat linux中 backspace 键为回退删除键,在stty指令打印出的按键表中,erase = ^? 就表示backspace 键的擦除效果
    
     通过stty指令可以设定按键功能,如
     stty erase ^h  《《--这样就将删除按键就变成了crtl+h ,这时再按backspace键只会打印出^?符号
     stty erase ^?  《《--这样就换回了backspace键


23. 通过set设定预设值  set [-uvCHhmBx]
#####set -u 當使用未設定變數時,會顯示錯誤訊息;
chengkai@localhost:/$ echo $dddd  <<---输出一个未定义的变量
                  <<---由于变量没有定义所以没有输出内容
chengkai@localhost:/$ set -u      <<---设置预设参数为 -u ,表示在输出没有定义的变量时将会报错
chengkai@localhost:/$ echo $dddd
-bash: dddd: unbound variable      <<---报错了

#####set -v  在訊息被輸出前,會先顯示訊息的原始內容;
chengkai@localhost:/$ message='hello'
chengkai@localhost:/$ echo $message
hello
chengkai@localhost:/$ set -v     
chengkai@localhost:/$ echo $message
echo $message
hello

##### set -x 在指令被執行前,會顯示指令內容(前面有 ++ 符號)
chengkai@localhost:/$ set -x
chengkai@localhost:/$ echo $message
+ echo hello            <<---显示了指令的内容
hello

##### 其它参数
-h  :預設啟用。與歷史命令有關;
-H  :預設啟用。與歷史命令有關;
-m  :預設啟用。與工作管理有關;
-B  :預設啟用。與刮號 [] 的作用有關;
-C  :預設不啟用。若使用 > 等,則若檔案存在時,該檔案不會被覆蓋。

取消预设的方式很简单,如果取消 set -u预设,那么只需执行set +u 即可

24. 万用字符 , 通常用于命令中的字符匹配, 常用的有* 号,用于匹配所有字符。
    其它可能会用到的有
    ? 任意一个字符
    [a,b,c,d]  匹配abcd中任一个字符,也可以写其它字符
    [a-z0-9A-Z] 其中- 表示一段过程,表示匹配大小写字母或数字中的任一个字符
    [^abv]  不匹配abv 中的任一个字符

25. 使用 & 将命令丢到背景去工作
以前记录了ctrl+z 是将正在执行的指令放到背景中工作,想要让一个命令从一开始就在背景中工作可以在命令最后加上 &
如 :
ls -l >> ls.log &     《《------这时这个命令就会在后台执行,并将结果输出到ls.log文件中。

26.  资料流重定向
>  覆盖输出,>>  追加输出
2> ,2>> 错误输出
< ,<< 输入  ,此符号可以将原本设定中需要由键盘输入的内容改为指令输入
1.  find /home -name .bashrc > list_right 2> list_error  将正确消息和错误消息输出到不同的文件中。
将正确的错误的消息写到一个文件中。
[dmtsai@www ~]$ find /home -name .bashrc > list 2> list  <==錯誤
[dmtsai@www ~]$ find /home -name .bashrc > list 2>&1     <==正確
[dmtsai@www ~]$ find /home -name .bashrc &> list         <==正確

    使用cat 输出重定向生成文件
    cat >> txt.file
    hi this is text content!!
    [ctrl+d] 退出
    这样就生成了一个 txt.file 文件

    或者使用输入流代替手输入内容
    cat >> txt2.file <txt.file

chengkai@localhost:/tmp$ cat >>txt2.file <<"eof"   《《---------在这里定义了当手输入eof这个字符串时就会退出
> aaa
> eof   《《---虽然在输入了eof,但是这里只起到了结束的作用,实际输出的txt2.file文件中是不存在这个
chengkai@localhost:/tmp$

27. 所有导向 /dev/null 这个文件的流,其中的数据都会消失
    ls >> /dev/null
    find /home -name .bashrc > find.log 2>/etc/null
28. &&    与操作 ,其前边的指令执行成功时时执行后边
    ||  或操作 ,前边指令执行失败时执行后边

29. cut -d '分隔字元' -f fields 《----- 以-d参数指定的字符分隔字符串,取出 -f指定的字段
    cut -c 字元区间  《《--只取出每行指定字符个数之后的内容。

    cut -c 10-        《《---取出每行第10个字符之后的内容
    cut -c 10-20    《《---取出每行10-20个字符之间的内容

30. 使用 last 指令可以查看账号的终端机来源,包括『帳號/終端機/來源/日期時間』
    chengkai pts/1        192.168.1.6      Mon Jun  7 10:22 - 11:01  (00:39)
31.  使用 grep --color=auto 'MANPATH' /etc/man.config 对文本进行匹配, 加上 --color=auto 则会对关键字标注颜色
32. 使用sort [-fbMnrtuk] [file or stdin]   不加参数的sort会按照ascll 码的顺序对输出进行排序
    -f  :忽略大小寫的差異,例如 A 與 a 視為編碼相同;
    -b  :忽略最前面的空白字元部分;
    -M  :以月份的名字來排序,例如 JAN, DEC 等等的排序方法;
    -n  :使用『純數字』進行排序(預設是以文字型態來排序的);
    -r  :反向排序;
    -u  :就是 uniq ,相同的資料中,僅出現一行代表;
    -t  :分隔符號,預設是用 [tab] 鍵來分隔;
    -k  :以那個區間 (field) 來進行排序的意思

33. uniq  去重

34. col 过滤控制字符
35. join 找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
join -t':' -1 1 -2 1  bb.log  aa.log   <<---将 : 号作为分隔符,判断第一个文件第一个栏位和第二个文件第一个栏位相同时进行字符串连接并输出

paste 指令可以直接将两个文件的行连在一起,中间用制表符分隔。

36. split 文件分割, 这个命令可以将一个大文件差分成多个小文件存放

37. xargs 指令会将传入的信息以命令参数的形式进行解析,以空白字符进行区分    例子:
    ls | xagrs more   <<-- 这句指令表示 将ls输出的结果作为more指令的参数使用
38. tar -cvf - /tmp | tar -xvf -  在管道命令中 减号可以代替stdout, 前一段中减号指将文件压缩后传递给stdout, 后边指令的- 指取前一个指令的stdout
    上边这段指令前段 将/tmp 进行了压缩,数据传给stdout, 后段接收stdout 中的数据并解压到了当前目录
40. 管道命令僅會處理 standard output,對於 standard error output 會予以忽略
41.   ln 命令用于输出文件内容,并在每行前边加上行号
42. diff 命令用于对文件进行比较。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics