• linux基本使用


    (待完善,想到哪就写到哪,目前内容大幅度参考中文man手册)

    最重要的命令(man)

    在 Linux 下遇到问题,最重要的是要自己寻求帮助, google是个好东西
    man 是 Linux 的帮助手册,即 manual 。因为大多数程序都会自带手册,所以可以通过 man 命令获取帮助。执行以后,man页面默认采用less命令变体进行输出,less的快捷键在man中一般都可用,在 man page 页面中按 q 退出。

    基础管理命令

    基础操作

    ls(list) 及文件权限 引申 stat touch

    -C     多列输出,纵向排序。 
    -F     每个目录名加“ / ”后缀,每个 FIFO 名加“ | ”后缀, 每个可运行名加“ * ”后缀。
    -R     递归列出遇到的子目录。
    -a     列出所有文件,包括以 "." 开头的隐含文件。
    -c     使用“状态改变时间”代替“文件修改时间”为依据来排序 (使用“ -t ”选项时)或列出(使用“ -l ”选项时)。
    -d     将目录名象其它文件一样列出,而不是列出它们的内容。
    -i     输出文件前先输出文件系列号(即  i  节点号: i-node number)。 -l 列出(以单列格式)文件模式( file mode ),文件的链
           接数,所有者名,组名,文件大小(以字节为单位),时间信 息,及文件名。缺省时,时间信息显示最近修改时间;可以以 选项“
           -c  ”和“  -u  ”选择显示其它两种时间信息。对于设 备文件,原先显示文件大小的区域通常显示的是主要和次要的 号(majorand
           minor device numbers)。
    -q     将文件名中的非打印字符输出为问号。(对于到终端的输出这是缺省的。)
    -r     逆序排列。
    -t     按时间信息排序。
    -u     使用最近访问时间代替最近修改时间为依据来排序(使用 “ -t ”选项时)或列出(使用“ -l ”选项时)。
    -1 单列输出。
    

    cd(change directory) pwd test kill type echo alias unalias set unset job fg bg ulimit umask trap hash等bash内建命令

    cd 命令是bash的内建命令,没有单独的man页面展示,查看是否是bash内建命令使用type command

    root@Test1:~# type cd
    cd is a shell builtin
    root@Test1:~# type ls
    ls is aliased to `ls --color=auto'
    root@Test1:~# unalias ls
    root@Test1:~# type ls
    ls is hashed (/bin/ls)
    root@Test1:~# ls -l /usr/bin/ls
    ls: cannot access /usr/bin/ls: No such file or directory
    root@Test1:~# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
    root@Test1:~# mv /bin/ls /usr/bin/
    root@Test1:~# ls
    -bash: /bin/ls: No such file or directory
    root@Test1:~# hash -r
    root@Test1:~# ls -d /mnt
    /mnt
    root@Test1:~#
    

    top uptime free

    top是最经常用来查看系统的负载情况
    另外top的选项比较多,以及各列的意义需要明确

    top - 13:24:58 up 47 min,  2 users,  load average: 0.00, 0.01, 0.05
    Tasks:  95 total,   2 running,  93 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.4%us,  0.4%sy,  0.0%ni, 97.2%id,  1.9%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   2049632k total,   431916k used,  1617716k free,    20040k buffers
    Swap:  2093052k total,        0k used,  2093052k free,   246056k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
        1 root      20   0 24448 2368 1340 S  0.0  0.1   0:00.97 init              
        2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd          
        3 root      20   0     0    0    0 S  0.0  0.0   0:00.05 ksoftirqd/0       
        4 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kworker/0:0       
        5 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 kworker/0:0H      
        6 root      20   0     0    0    0 S  0.0  0.0   0:00.52 kworker/u2:0      
        7 root      20   0     0    0    0 S  0.0  0.0   0:00.37 rcu_sched         
        8 root      20   0     0    0    0 S  0.0  0.0   0:00.56 rcuos/0           
        9 root      20   0     0    0    0 S  0.0  0.0   0:00.00 rcu_bh            
       10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 rcuob/0           
       11 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0       
       12 root      RT   0     0    0    0 S  0.0  0.0   0:00.02 watchdog/0        
       13 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 khelper           
       14 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kdevtmpfs         
       15 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 netns             
       16 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 writeback         
    

    id w who last lastlog pkill

    id - 显示真实和有效的 UID 和 GID
    w - 显示已经登录的用户以及他们在做什么
    who - 显示已经登录的用户
    last, lastb - 显示最近登录的用户列表
    lastlog - reports the most recent login of all users or of a given user

    root@Test1:~# id
    uid=0(root) gid=0(root) groups=0(root)
    root@Test1:~# w
     13:33:06 up 56 min,  2 users,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
    root     tty1                      12:37   55:12   0.22s  0.21s -bash
    root     pts/0    192.168.1.102    12:38    0.00s  0.50s  0.00s w
    kill is a shell builtin
    root@Test1:~# who
    root     tty1         2017-03-26 12:37
    root     pts/0        2017-03-26 12:38 (192.168.1.102)
    
    # 踢出登陆的用户
    root@Test1:~# pkill -kill -t tty1
    root@Test1:~# w
     03:38:09 up  1:01,  2 users,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.1.102    02:38    3.00s  0.51s  0.00s w
    

    useradd passwd userdel usermod change

    新帐号建立
    -c comment 新帐号password档的说明栏。
    -d home_dir 新帐号每次登入时所使用的home_dir。预设值为default_home内login名称,并当成登入时目录名称。
    -e expire_date 帐号终止日期。日期的指定格式为MM/DD/YY。
    -f inactive_days 帐号过期几日后永久停权。当值为0时帐号则立刻被停权。而当值为-1时则关闭此功能,预设值为-1
    -g initial_group group名称或以数字来做为使用者登入起始群组(group)。群组名须为现有存在的名称。群组数字也须为现有存在的群组。预设的群组
    数字为1。
    -G group,[...] 定义此使用者为此一堆groups的成员。每个群组使用","区格开来,不可以夹杂空白字元。群组名同-g选项的限制。定义值为使用者的>起始群组。
    -m 使用者目录如不存在则自动建立。如使用-k选项skeleton_dir内的档案将复制至使用者目录下。然而在/etc/skel目录下的档案也会复制过去取代。>任何在skeleton_diror/etc/skel的目录也相同会在使用者目录下一一建立。The-k同-m不建立目录以及不复制任何档案为预设值。
    -M 不建立使用者目录,即使/etc/login.defs系统档设定要建立使用者目录。
    -n 预设值使用者群组与使用者名称会相同。此选项将取消此预设值。-r 此参数是用来建立系统帐号。系统帐号的UID会比定义在系统档上/etc/login.defs.的UID_MIN来的小。注意useradd此用法所建立的帐号不会建立使>用者目录,也不会在乎纪录在/etc/login.defs.的定义值。如果你想要有使用者目录须额外指定-m参数来建立系统帐号。这是REDHAT额外增设的选项。 
    -s shell 使用者登入后使用的shell名称。预设为不填写,这样系统会帮你指定预设的登入shell。
    -u uid 使用者的ID值。必须为唯一的ID值,除非用-o选项。数字不可为负值。预设为最小不得小于999而逐次增加。0~999传统上是保留给系统帐号使用
    。 
    改变预设值当-D选项出现时,useradd秀出现在的预设值,或是藉由命令列的方式更新预设值。可用选项为∶-bdefault_home定义使用者所属目录的前一个目录。使>用者名称会附加在default_home后面用来建立新使用者的目录。当然使用-d后则此选项无效。
    -e default_expire_date 使用者帐号停止日期。
    -f default_inactive 帐号过期几日后停权。
    -g default_group 新帐号起始群组名或ID。群组名须为现有存在的名称。群组ID也须为现有存在的群组。
    -s default_shell 使用者登入后使用的shell名称。往后新加入的帐号都将使用此shell. 如不指定任何参数,useradd显示目前预设的值。
    

    passwd 需改密码或者可以设置账号过期时间等

    # 第一次登陆需要修改密码
    WARNING: Your password has expired.
    You must change your password now and login again!
    Changing password for mike.
    (current) UNIX password: 
    Enter new UNIX password: 
    Retype new UNIX password: 
    passwd: password updated successfully
    # 修改密码
    root@Test1:~# passwd mike
    Enter new UNIX password: 
    Retype new UNIX password: 
    passwd: password updated successfully
    
    

    head tail nl tr less more

    在标准输出上显示每个FILE的最后10行.          如果多于一个FILE,会一个接一个地显示,        并在每个文件显示的首部给出文件名.
    如果没有FILE,或者FILE是-,那么就从标准输入上读取.
    --retry
           即使tail开始时就不能访问 或者在tail运行后不能访问,也仍然不停地尝试打开文件.  -- 只与-f合用时有用.
    -c, --bytes=N
           输出最后N个字节
    -f, --follow[={name|descriptor}]
           当文件增长时,输出后续添加的数据; -f, --follow以及 --follow=descriptor 都是相同的意思 
    -n, --lines=N
           输出最后N行,而非默认的最后10行 
    --max-unchanged-stats=N
           参看texinfo文档(默认为5) 
    --max-consecutive-size-changes=N
           参看texinfo文档(默认为200) 
    --pid=PID
           与-f合用,表示在进程ID,PID死掉之后结束.
    -q, --quiet, --silent
           从不输出给出文件名的首部 
    -s, --sleep-interval=S
           与-f合用,表示在每次反复的间隔休眠S秒
    -v, --verbose
           总是输出给出文件名的首部 
    --help 显示帮助信息后退出 
    --version
           输出版本信息后退出 如果N(字节或者行数)的第一个字符为`+', 那么从每个文件的开头算起的第N项开始显示, 否则, 显示该文件的最后N项. N可以有一个倍数前缀: b表示512,k表示1024,m表示1048576(1兆). 第一个选项 -VALUE 或+VALUE 以-n VALUE或-n +VALUE方式看待,除非VALUE含有[bkm]后缀倍数中的一个,在这种情>况下,它被看作 -c VALUE 或者-c +VALUE
    使用--follow (-f)时,tail默认后接文件描述符, 这意味着即使tail显示的文件改名了,tail仍然可以追踪到其末尾部分. 如果你确实希望查询文件的实
    际名而非文件描述符  (例如,日志轮转时), 这种默认的操作就不是你所期望的了. 在这种情况下应使用--follow=name. 这将导致tail通过周期性地重>新打开所指定的文件来 追踪其是否被删除了,或者被其他程序重新创建了. 
    

    cut split cat tac

    有时候文件太大不适合查看,可以将文件切割,或者有时需要合并文件

    把 输入文件 INPUT 按 固定大小 的 文件片 PREFIXaa, PREFIXab, ... 输出; 缺省的 PREFIX 是 `x'. 如果 没有 指定 INPUT, 或 INPUT  
    是 -, 就从 标准输入 读取 数据.  
    -b, --bytes=SIZE
           输出文件 大小 定为 SIZE 字节
    -C, --line-bytes=SIZE
           输出文件 大小 定为 最多 SIZE 字节 的 行  
    -l, --lines=NUMBER
           输出文件 大小 定为 NUMBER 行
    -NUMBER
           同 -l NUMBER 
    --verbose
           在 打开 每一个 输出文件 之前, 把 诊断信息 送往 标准错误 
    --help 显示 帮助信息, 然后 结束
    --version
           显示 版本信息, 然后 结束
    指定 SIZE 时 可以 使用 倍乘后缀: b 是 512, k 是 1K, m 是 1 Meg.
    

    mkdir mkfs mknod mktemp

    mkdir -建立目录
    mkfs - 创建一个 Linux 文件系统
    mknod - 建立块专用或字符专用文件
    mktemp — 产生唯一的临时文件名

    下列的 sh 片断 展示了 mktemp 的 简单用法, 如果无法获得可靠的临时文件, 程序就退出.
          TMPFILE=`mktemp /tmp/$0.XXXXXX` || exit 1
          echo "program output" >> $TMPFILE
    
    照上例, 我们打算让脚本程序自己捕获这个错误.
          TMPFILE=`mktemp -q /tmp/$0.XXXXXX`
          if [ $? -ne 0 ]; then 
                  echo "$0: Can't create temp file, exiting..."
                  exit 1
          fi
    

    du df mount unmount lsblk blkid

    du - 报告磁盘空间使用情况
    df - 报告文件系统磁盘空间的使用情况

    -a, --all
           显示对所有文件的统计,而不只是包含子目录。
    -b, --bytes
           输出以字节为单位的大小,替代缺省时1024字节的计数单位。
    --block-size=size
           输出以块为单位的大小,块的大小为 size 字节。( file- utils-4.0 的新选项)
    -c, --total
           在处理完所有参数后给出所有这些参数的总计。这个选项被 用给出指定的一组文件或目录使用的空间的总和。
    -D, --dereference-args
           引用命令行参数的符号连接。但不影响其他的符号连接。   这对找出象   /usr/tmp   这样的目录的磁盘使用量有用,  /usr/tmp 等通常是符
    号连接。 译住:例如在 /var/tmp 下建立一个目录test, 而/usr/tmp  是指向  /var/tmp  的符号连接。du  /usr/tmp 返回一项 /usr/tmp , 而 du - D /usr/tmp 返回两项 /usr/tmp,/usr/tmp/test。
    --exclude=pattern
           在递归时,忽略与指定模式相匹配的文件或子目录。模式  可以是任何  Bourne  shell  的文件  glob 模式。( file- utils-4.0 的新选项)
    -h, --human-readable
           为每个数附加一个表示大小单位的字母,象用M表示二进制 的兆字节。
    -H, --si
           与 -h 参数起同样的作用,只是使用法定的 SI 单位(  用  1000的幂而不是  1024  的幂,这样  M  代表的就是1000000  而不是 1048576)。
    (fileutils-4.0 的新选项)
    -k, --kilobytes
           输出以1024字节为计数单位的大小。
    -l, --count-links
           统计所有文件的大小,包括已经被统计过的(作为一个硬连接)。
    -L, --dereference
           引用符号连接(不是显示连接点本身而是连接指向的文件或 目录所使用的磁盘空间)。
    -m, --megabytes
           输出以兆字节的块为计数单位的大小(就是 1,048,576 字节)。
    --max-depth=n
           只输出命令行参数的小于等于第 n 层的目录的总计。 --max-depth=0的作用同于-s选项。(fileutils-4.0的新选项)
    -s, --summarize
           对每个参数只显示总和。
    -S, --separate-dirs
           单独报告每一个目录的大小,不包括子目录的大小。
    -x, --one-file-system
           忽略与被处理的参数不在同一个文件系统的目录。
    -X file, --exclude-from=file
           除了从指定的文件中得到模式之外与      --exclude     一样。     模式以行的形式列出。如果指定的文件是'-',那么从标准输入中读出模>
    式。(fileutils-4.0 的新选项) GNU 标准选项
    

    tar gzip bzip2 zip xz 及相应的解压,查看压缩文件命令

    tar - tar 档案文件管理程序的 GNU 版本。
    gzip, gunzip, zcat - 压缩或展开文件
    bzip2, bunzip2 - 一种块排序文件压缩软件,v0.9.5
    bzcat - 将文件解压缩至标准输出
    bzip2recover - 恢复损坏的 bzip2 文件

    参数说明
    运行tar时必须要有下列参数中的至少一个才可运行 
    -A, --catenate, --concatenate
           将一存档与已有的存档合并 
    -c, --create
           建立新的存档 
    -d, --diff, --compare
           比较存档与当前文件的不同之处 
    --delete
           从存档中删除 
    -r, --append
           附加到存档结尾 
    -t, --list 
           列出存档中文件的目录 
    -u, --update
           仅将较新的文件附加到存档中 
    -x, --extract, --get
           从存档展开文件 
    

    bzip2,gzip及xz压缩文件基本都是在linux环境产生,编码基本没有太大问题, zip是比较通用的快平台压缩工具,容易产生乱码
    可以使用-O 选项,一般windows的压缩式gbk2312编码,可以采用unzip -O CP936 filename

    chmod chown chgrp chattr lsattr facl

    chmod - 改变文件的访问权限
    chown - 修改文件所有者和组别
    chgrp - 改变文件的组所有权
    chattr - 修改文件在Linux第二扩展文件系统(E2fs)上的特有属性

    使用chmod命令改变指定文件访问权限有两种方式:一种是用符号标记所进行更改,另一种方式是采用8进制数指定新的访问权限。使用下面的语法格式来>使用符号改变方式 `[ugoa...][[+-=][rwxXstugo...]...][,...]'.
    
    在这种格式下,所带参数是一个用逗号分隔的字符列表.每个符号方式的 改变命令以零或者字'ugoa'开始;'ugoa'控制哪些用户对该文件访问权
    操作符'+'使得用户选择的权限被追加到每个指定文件,(操作给指定文件添加所选权限);操作符'-'使得这些权限被撤消;'='使得指定文件只具有这些
    权限。
    
    字符串'rwxXstugo' 给用户选择新的属性:(r)读权限、(w)写权限、(x)执行权(或对目录的访问权),(X)只有目标文件对某些用户是可执行的或该目标
    文件是目录时才追加x属性,(s)同时设定用户或组ID,(t)粘滞位(保存程序的文本到交换设备上),(u)目标文件属主,(g)目标文件属主所在的组,
    (o)其他用户。(因此,'chmod g-s file' 撤消sgid位,'chmod ug+s file'同时设置了suid和sgid位,'chmod o+s file' 则没有进行任何设置)
    
    POSIX并没有粘滞位的描述。它最初是指在交换设备上保留程序文本。现在,如果设置了目录的粘滞位,那么只有文件和目录的所有者可以删除该目录下
    的文件。 (一般使用于类似于/tmp这样有基本写权限的目录) 
    
    数字模式是一到4个八进制数,每个数由位权为4,2,1的3位叠加而得. 被省略掉的数字缺省设置为零. 第一位为4时为suid,2时为sgid,1时为粘滞位,.第二
    位设置文件所有者的权限:可读(4),可写(2),可执行(1); 第三位设置了文件所在组其他用户的权限,值如上;第四位设置了其他组的用户的权限,值同上.
    
    由于chmod的系统调用不支持,chomd命令不能改变符号链接的权限. 由于符号链接的权限从不使用,所以这也不成问题.无论如何,由于每个符号连接都可>
    在命令行中列出,chmod改变了所指文件的属性.  相反,chmod在递归目录遍历时忽略所碰到的符号连接. 
    

    date cal hwclock locale localedef locale-gen locate

    一些其他常用命令集合

    安装及卸载软件 主要对比deb和rpm

    Task apt (deb)
    Debian, Ubuntu
    zypp (rpm)
    openSUSE
    yum/dnf (rpm)
    Fedora, CentOS
    urpmi (rpm)
    Mandriva, Mageia
    Managing software        
    Install new software from package repository apt-get install pkg zypper install pkg yum install pkg urpmi pkg
    Install new software from package file dpkg -i pkg zypper install pkg yum localinstall pkg urpmi pkg
    Update existing software apt-get install pkg zypper update -t package pkg yum update pkg urpmi pkg
    Remove unwanted software apt-get remove pkg zypper remove pkg yum erase pkg urpme pkg
    Updating the system        
    Update package list apt-get update
    aptitude update
    zypper refresh yum check-update urpmi.update -a
    Update system apt-get upgrade
    aptitude safe-upgrade
    zypper update yum update urpmi --auto-select
    Searching for packages        
    Search by package name apt-cache search pkg zypper search pkg yum list pkg urpmq pkg
    Search by pattern apt-cache search pattern zypper search -t pattern pattern yum search pattern urpmq --fuzzy pkg
    Search by file name apt-file search path zypper wp file yum provides file urpmf file
    List installed packages dpkg -l zypper search -is rpm -qa rpm -qa
    Configuring access to software repositories        
    List repositories cat /etc/apt/sources.list zypper repos yum repolist urpmq --list-media
    Add repository (edit /etc/apt/sources.list) zypper addrepo path name (add repo to /etc/yum.repos.d/) urpmi.addmedia name path
    Remove repository (edit /etc/apt/sources.list) zypper removerepo name (remove repo from /etc/yum.repos.d/) urpmi.removemedia media

    用户及权限管理

    文件及系统管理

    文本编辑命令

    文本编辑三剑客 sed(stream editor) gerp(Global Regular Expression Print) awk(三位创始人)

    神之编辑器(emacs)及编辑器之神(vim)

    其他有趣的终端命令

    cmatrix (还是直接图片展示吧)

  • 相关阅读:
    LeetCode 79. 单词搜索
    LeetCode 1143. 最长公共子序列
    LeetCode 55. 跳跃游戏
    LeetCode 48. 旋转图像
    LeetCode 93. 复原 IP 地址
    LeetCode 456. 132模式
    LeetCode 341. 扁平化嵌套列表迭代器
    LeetCode 73. 矩阵置零
    LeetCode 47. 全排列 II
    LeetCode 46. 全排列
  • 原文地址:https://www.cnblogs.com/mikeguan/p/6624274.html
Copyright © 2020-2023  润新知