• Linux新手命令


    给老婆写了一份速成培训教材——最经常使用的命令及解释。当然每一个人工作内容不同,经常使用命令也不同,这仅仅是我的个人经验,并且要考虑到接受者的基础。

    ls:列出文件夹下的内容,类似于dos下的dir

    经常使用參数有:

    ls –l,逐行显示具体内容;

    ls –a,  显示隐藏的文件或文件夹;——linux下,前缀为.的文件名称和文件夹名即被默觉得是隐藏文件

    參数也能够组合ls –al ,具体显示包括隐藏文件在内的内容。

    当加上-a时,会看到两个特殊的文件夹.  .. .表示当前文件夹;..表示父文件夹

    cd :切换文件夹

    那么能够想象,cd . 不会有不论什么变化,由于切换到当前文件夹等于没说对吧;cd .. 切换到父文件夹(此时能够看到命令提示符前面的路径是有变化的)

    有关cd使用还有几个常见使用方法:

    cd /   直接一步到“根”(linux文件系统里根就类似windowsc:  d:  等等,仅仅只是不管多少块硬盘和分区,linux仅仅有唯一的根/),那么就不用一次一次的cd ..往上退了对么

    cd ~  一步到“家”文件夹。什么是家文件夹呢?在linux下,每创建一个用户会自己主动为这个用户安排一个家文件夹,用户对自己的家文件夹拥有全然的读写权限,用户登录之后的默认工作文件夹也是在自己的“家”里(windows也一样,不信你用一个新帐号登录,立即会看到c盘的“用户”文件夹下多出一个和这个帐号名同样的文件夹,里面是“我的文档”“我的图片”“我的视频”之类的东西)

    普通使用方法就是cd a/b/c 这样了,当然此时的a/b/c三级文件夹是在当前文件夹下的,这就是相对路径;假设恰好不在当前文件夹下,那就找不到了。仅仅能从“根”写起cd /xxx/a/b/c ,这就是绝对路径。

    上面说了,不管有多少块硬盘多少个分区,都仅仅有一个根,那么假设加一块硬盘,它会放到哪去呢?——答案是你爱放哪就放哪。操作是这种,首先

    mkdir : 创建文件夹

    使用mkdir创建文件夹,用起来相当简单,非常少加參数。mkdir xxx 就是在当前文件夹下创建一个xxx文件夹,假设不在当前文件夹下创建呢?一种方法是用cd切换过去;一种方法是用绝对路径mkdir /xxx/a/b/c/xxx

    下一步:把这个新硬盘的某个分区“附加”到我们刚才创建的文件夹下去

    mount:挂载设备

    mount /dev/sdb1 /xxx/a/b/c/xxx (文件夹好深啊,还真不easy找呢),以后再进到这个文件夹cd /xxx/a/b/c/xxx ls看到的就是新硬盘的内容了。(当然此处我假定新硬盘的编号是/dev/sdb1,至于为什么是这个编号,因为复杂度问题在此就不解释了)

    那么如果细点心,你会提出这种疑问——如果我原来的文件夹/xxx/a/b/c/xxx 不是一个新文件夹,并且里面有内容。那么当我在这个文件夹下挂载新硬盘的时候,原来的东西怎么办呢?——答案是“确实看不见了”。不用惊讶,由于并没有丢,仅仅是看不见了而已。当我们卸载这个设备,它们就又回来了

    umount卸载设备

    umount /dev/sdb1 ,卸载掉了,简单吧。

    所以能够有这样一个加密小技巧,对要加密的文件夹挂载一个设备(只是为了加密一个文件夹买块硬盘,这个代价有点高。并且别人一但发现了,umount一下就暴露了)

    或许有人说干嘛弄这么复杂,象windows那样自己主动识别,一块硬盘(分区)一个盘符不挺好的吗?其实这样的多根文件夹可能会更麻烦。Linux“继承”了unix的传统,多用于server上,在server上添加、替换(坏)、乃至交换硬盘都非常寻常。想像一下,假设在这台机器上是d:盘,拿到另外一台机器变e:盘了,非常多程序跑不起来了,那怎么办?即便是我们个人电脑,假设你常常装机做系统的话,也不少有这些困扰呢。而挂载到文件夹下就easy多了,仅仅要把文件夹树搞一致了,随便怎么增、删、换硬盘都没关系。

    想象一下这个场景,/xxx/a/b/c/xxx文件夹是存放某数据库文件的,据观察增长非常快,硬盘空间告急。不用操心,能够这样做,先把新硬盘mount到某个暂时文件夹下mount /dev/sdb1 /temp ,拷贝或移动原有文件(当然为了保持数据一致性,这会儿停一下数据库)cp/xxx/a/b/c/xxx/* /temp –R ,拷贝完毕后,把硬盘又一次mount一个位置mount /dev/sdb1 /xxx/a/b/c/xxx ,启动数据库,喔,新硬盘用上了,并且对全部的程序、用户全然感知不到变化。假设是windows得折腾好久吧:)所以还是单根文件夹简单好用。君不见微软如今也提倡磁盘单分区了吗:)

    提到拷贝和移动了——

    cp拷贝命令

    cp a.sh /tmp 拷贝当前文件夹下的a.sh文件到/tmp文件夹下一份

    cp /tmp/a.sh /xxx/a/b/c/c.sh 拷贝/tmp文件夹下的a.sh /xxx/a/b/c下,而且改名成c.sh

    最经常使用的參数–R ,表示循环递归操作以下全部子文件夹,大写字母

    mv:  移动命令

    mv /tmp/a.sh /xxx/a/b/c 移动/tmp下的文件a.sh /xxx/a/b/c 文件夹下,不改名字

    mv的另外使用方法,改名字:mv a.sh b.sh a.sh改名为b.sh

    不变文件夹,那就是改名字(由于在同一个文件夹下移动嘛)

    发现拷贝错了或者拷贝多了,删除呗

    rm删除文件或文件夹

    rm a.sh 删除当前文件夹下的文件a.sh

    rm * -R 删除当前文件夹下全部内容,包含循环递归子文件夹(-R一定要慎用啊,否则悔之晚矣)

    前面提到,别人非常easy发现你新载入的硬盘,那么是怎样发现的呢?df命令

    df显示文件系统

    df一下,看,哪块硬盘挂在哪个文件夹下,占用多少空间,剩余多少空间,一目了然。假设想仔细了解倒底那个文件夹或文件占用了我们宝贵的磁盘空间呢,du命令

    du查看文件磁盘空间

    让我们cd / 来到根文件夹,du一下,哇,这哪看的清。逐级列出全部文件和文件夹,好敬业啊。但我们不须要看这么多,仅仅须要知道某一级文件夹占了多少空间即可了,加个參数--max-depth=1 是显示1级,=2那就是显示两级了。再仔细的使用方法就看帮助吧。顺便提一句,大部分命令后面加參数--help,就能够其帮助信息了。

    这么多文件,假设想找当中某一个怎么办?find搜索

    find:  查找文件

    find查找能够按名称、按类型、按日期等等,总之强大到让人无法直视。相同,深入学习请看帮助。最经常使用的按名称查找:find–name xxx.sh ,当前文件夹及子文件夹下查找xxx.sh文件

    为什么我一再拿.sh的文件作演示样例呢?由于依照习惯,xxx.sh的文件是一个shell文件(类似于dos里的批处理文件.bat)可以被运行。但它倒底是不是个真的sh文件呢?——等等,这话什么意思,难道还有假的shell文件吗?当然有可能。Linux里不是依照扩展名来区分文件类型的,甚至都不应该用扩展名这个概念。之所以写成xxx.xxx是为了迎合windows用户的表示方法(当然这样的表示方法也确实不错)。系统是不限制你要不要“扩展名”、写什么字母的。当然,假设硬要把凤凰传奇.mp3  改名成haha.sh ,你肯定是运行不起来的。反过来说,假设把一个a.sh 改名成a.xxoo,一样是能够运行的。那么岂不是文件类型乱作一团?所以嘛,採用大家约定俗成的命名方法还是利人利己的。另外,还能够用命令file来查看其真实的文件类型。

    file查看文件类型

    file a.sh ,假设确实是一个shell文件,会显示类型为:ASCII text——是个文本文件(批处理本来就是文本文件,bat也一样)。那么能够用命令cat来查看文件内容

    cat查看文件内容

    cat a.sh 就可以显示内容。假设是用凤凰传奇.mp3改名改成的a.sh,那肯定就乱码了。

    当然我们还能够用编辑命令编辑它

    vi编辑文件——vi实际上是个编辑软件,限于篇幅不具体介绍,自行google

    好了,说了不少了,做个小样例吧

    cd ~  ——来到自己的家文件夹

    vi a.sh ——新建并编辑一个a.sh文件。按一下字母i,进入编辑状态。此时能够输入了。输入echo $PATH (注意大写和小写),好,加上空格就输入这10个字符即可。按ESC键,接着输入:wq

    ls –l  ——看看是否已经存在a.sh这个文件了,假设存在就对了,假设没有,把电脑砸了并大声质问它

    这样,我们第一个shell脚本文件就写好了。试着运行一下,输入a.sh  显示“未找到命令”。这是怎么回事呢?明明在的嘛,先别急着砸电脑并质问它。这是由于在windows下,系统默认的情况是——先在当前文件夹下查找并运行文件,假设没有,那么就依次到path环境变量指定的文件夹去查找并运行。而linux由于安全的原因,不在当前文件夹下查找,仅到PATH环境变量指定的文件夹去查找。所以,眼看着在这里还显示“未找到命令”。如今我们要运行了,怎么办呢?当然第一种方法就是把当前文件夹加到PATH环境变量里,只是这也太麻烦了。另外一种方法就是指定绝对路径(你找不到我就告诉你确切位置),能够这样  /home/xxx/a.sh xxx就是当前username相应的家文件夹了;还能够这样,~/a.sh,别忘了~就是我们的家文件夹;还能够这样./a.sh,别忘了.就是指当前文件夹(忘了往前翻翻)

    这回提示不一样了,显示“权限不够”,至少说明找到文件了。但权限又是怎么回事呢?还是来看一下现有什么权限吧。Ls-l  ,列出具体信息。注意看a.sh一行,最前面的字符

    -rw-rw-r-- ,去除掉头一个-,剩下是9个,分三组来看各自是 rw- rw- r-- ,这表示针对三种角色的权限。三种角色是全部者、同组人、其它人(角色划分的确有点不够精细,但也基本够用,关键是角色多了老麻烦了,有兴趣參考windows的文件系统的各类角色)。r表示读,w表示写,x表示运行。那么综合来看,权限是这样划分的:全部者拥有读和写(rw-)权限,同组人拥有读和写(rw-)权限,其它人拥有读权限(r--)。看看,大家都没有运行权限。那么怎么加上运行权限呢?命令chmod

    chmod改变文件权限

    运行chmod +x a.sh ,表示为a.sh文件加上运行权限。这次再看一下ls -l ,权限变成了rwxrwxr-x,分三组就是自己读、写、可运行,同组人读、写、可运行,其它人读、可运行。每一个角色都加上可运行权限了。实际上这样不太安全,相当于全部人都能够运行它,假设想更精细的控制,那么看帮助了解chmod具体使用方法。

    如今再来运行一下  ./a.sh ,应该能够显示一串字符了。我们输入的命令是echo $PATH,所以运行结果是显示PATH环境变量里的文件夹,注意是用:分隔的,windows里是;分隔的。能够检查一下,当前文件夹肯定不在里面,否则就不会“未找到命令”了

    正在执行的程序在系统里叫做进程。查看有哪些程序在执行中呢?

    ps查看进程

    ps  aux  具体显示全部用户进程,PID表示进程号。当某个进程占用资源太多或陷入失控,我们能够杀掉它,kill

    kill杀死进程

    kill PID

    ps显示的资源信息是静态的,假设想实时观測一下系统资源占用情况,使用top命令监控

    top监控系统资源,显示各进程cpu占用,内存占用等信息。默认5秒刷新一次,按q退出。

    好了,这篇粗略+速成教程就到此为止了。之所以介绍的不非常具体,命令也不多,并且没有按部就班,是希望看的人知其然更要知其所以然。至于命令的具体操作,事实上帮助是最好的參考资料。何况还有这个更强大man命令,想看某个命令的详解和使用方法:man xxx 


    有时候命令记不清楚了怎么办?——假设仅仅记起命令的前几个字母,按tab键系统会自己主动补齐;假设补齐的命令不是我们想要的,连续按两次tab键,会把这几个字母开头的命令全列出来,这个时候差点儿相同也该想起来了。
  • 相关阅读:
    建站两个月,说说我的想法
    我见过的郭弃疾先生(兰亭集势CEO)
    C#数组和集合互相转换的几种方法的效率分析
    (五)React Ant Design Pro + .Net5 WebApi:后端环境搭建Autofac注入+ 泛型仓储
    关于C++中对私有的测试总结
    uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型(转)
    GDB调试
    linux删除乱码文件
    转:C++ nan
    vim
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4298575.html
Copyright © 2020-2023  润新知