为啥要学linux? 您可能熟悉WindowsXP、Windows7、Windows10和MacOSX等操作系统。Linux就是这样一种强大的操作系统,如今在应用程序和使用中无处不在。根据超级计算机鹰派TOP500的最新统计数据,Linux现在为世界500强超级计算机提供100的支持。这不是令人难以置信吗?操作系统是计算机和所有现代计算设备的灵魂和思想。它是一种管理与台式机或笔记本电脑相关的所有硬件资源的软件。换句话说,操作系统管理您的软件和硬件之间的通信。Linux无处不在,以至于它出现在手机、汽车、冰箱和Roku设备中。它运行着大部分互联网和几台超级计算机。事实上,世界上几个国家的证券交易所都在Linux上运行。Linux成为在全球范围内运行台式机、服务器和嵌入式系统的平台,因为它是可用的最可靠、最安全和最强大的操作系统之一。 linux基础命令 注意:Linux命令区分大小写,因此您需要小心输入的内容。 1。ls显示目录内容列表 ls命令就是list的缩写,用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。 举例ls仅列出当前目录可见文件lsl列出当前目录可见文件详细信息lshl列出详细信息并以可读大小显示文件大小lsal列出所有文件(包括隐藏)的详细信息lshumanreadablesize1Sclassify按文件大小排序dushsorth按文件大小排序(同上) 2。cd切换用户当前工作目录 切换工作目录至dir。其中dir的表示法可以是绝对路径或相对路径。若参数dir省略,则默认为使用者的shell变量HOME。如果dir指定为时表示为使用者的shell变量HOME,。表示当前目录,。。表示当前目录的上一级目录。环境变量CDPATH是由冒号分割的一到多个目录,你可以将常去的目录的上一级加入到CDPATH以便方便访问它们;如果dir以开头那么CDPATH不会被使用。当shopt选项cdablevars打开时,如果dir在CDPATH及当前目录下均不存在,那么会把它当作变量,读取它的值作为要进入的目录。 举例cd进入用户主目录;cd进入根目录cd进入用户主目录;cd。。返回上级目录(若当前目录为,则执行完后还在;。。为上级目录的意思);cd。。。。返回上两级目录;cd!把上个命令的参数作为cd参数使用 3。grep强大的文本搜索工具 grep(globalsearchregularexpression(RE)andprintouttheline,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。用于过滤搜索的特定字符。可使用正则表达式能配合多种命令使用,使用上十分灵活。 举例:在文件中搜索一个单词,命令会返回一个包含matchpattern的文本行grepmatchpatternfilenamegrepmatchpatternfilename在多个文件中查找:grepmatchpatternfile1file2file3。。。 4。su用于切换当前用户身份到其他用户身份 su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。 举例:变更帐号为root并在执行ls指令后退出变回原使用者suclsroot变更帐号为root并传入f选项给新执行的shellsurootf变更帐号为test并改变工作目录至test的家目录sutest 5、sudo以其他身份来执行命令 sudo命令用来以其他身份来执行命令,预设的身份为root。在etcsudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。 举例:sudosuenvgrepE(HOMESHELLUSERLOGNAMEPATHPWDTESTETCTESTZSHTESTPROTESTBASHTESTHOMESUDO)这个命令相当于使用root超级用户重新登录一次shell,只不过密码是使用的当前用户的密码。而且重要是,该命令会重新加载etcprofile文件以及etcbashrc文件等系统配置文件,并且还会重新加载root用户的SHELL环境变量所对应的配置文件,比如:root超级用户的SHELL是binbash,则会加载root。bashrc等配置。如果是binzsh,则会加载root。zshrc等配置,执行后是完全的root环境。sudoienvgrepE(HOMESHELLUSERLOGNAMEPATHPWDTESTETCTESTZSHTESTPROTESTBASHTESTHOMESUDO)这个命令基本与sudosu相同,执行后也是root超级用户的环境,只不过是多了一些当前用户的信息。sudosenvgrepE(HOMESHELLUSERLOGNAMEPATHPWDTESTETCTESTZSHTESTPROTESTBASHTESTHOMESUDO)color这个命令相当于以当前用户的SHELL开启了一个root超级用户的nologin的shell,不会加载etcprofile等系统配置。所以etcprofile文件中定义的TESTETC环境变量就看不到了,但是会加载root用户对应的配置文件,比如root用户的SHELL是binzsh,那么会加载root。zshrc配置文件,执行完后,不会切换当前用户的目录。配置sudo必须通过编辑etcsudoers文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。之所以使用visudo有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。visudo默认的是在vi里打开配置文件,用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文件,它会提示你出现的问题,并询问该如何处理,就像:sudoersfile:syntaxerror,line22此时我们有三种选择:键入e是重新编辑,键入x是不保存退出,键入Q是退出并保存。如果真选择Q,那么sudo将不会再运行,直到错误被纠正。现在,我们一起来看一下神秘的配置文件,学一下如何编写它。让我们从一个简单的例子开始:让用户Foobar可以通过sudo执行所有root可执行的命令。以root身份用visudo打开配置文件,可以看到类似下面几行:RunasaliasspecificationUserprivilegespecificationrootALL(ALL)ALL我们一看就明白个差不多了,root有所有权限,只要仿照现有root的例子就行,我们在下面加一行(最好用tab作为空白):foobarALL(ALL)ALL保存退出后,切换到foobar用户,我们用它的身份执行命令:〔foobarlocalhost〕lsrootls:root:权限不够〔foobarlocalhost〕sudolsrootPassWord:anacondaks。cfgDesktopinstall。loginstall。log。syslog好了,我们限制一下foobar的权利,不让他为所欲为。比如我们只想让他像root那样使用ls和ifconfig,把那一行改为:foobarlocalhostsbinifconfig,binls再来执行命令:〔foobarlocalhost〕sudohead5etcshadowPassword:Sorry,userfoobarisnotallowedtoexecuteusrbinhead5etcshadowasrootonlocalhost。localdomain。〔foobarlocalhost〕sudosbinifconfigeth0Linkencap:EthernetHWaddr00:14:85:EC:E9:9B。。。现在让我们来看一下那三个ALL到底是什么意思。第一个ALL是指网络中的主机,我们后面把它改成了主机名,它指明foobar可以在此主机上执行后面的命令。第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。最后一个ALL当然就是指命令名了。例如,我们想让foobar用户在linux主机上以jimmy或rene的身份执行kill命令,这样编写配置文件:foobarlinux(jimmy,rene)binkill但这还有个问题,foobar到底以jimmy还是rene的身份执行?这时我们应该想到了sudou了,它正是用在这种时候。foobar可以使用sudoujimmykillPID或者sudourenekillPID,但这样挺麻烦,其实我们可以不必每次加u,把rene或jimmy设为默认的目标用户即可。再在上面加一行:Defaults:foobarrunasdefaultreneDefaults后面如果有冒号,是对后面用户的默认,如果没有,则是对所有用户的默认。就像配置文件中自带的一行:Defaultsenvreset另一个问题是,很多时候,我们本来就登录了,每次使用sudo还要输入密码就显得烦琐了。我们可不可以不再输入密码呢?当然可以,我们这样修改配置文件:foobarlocalhostNOPASSWD:bincat,binls再来sudo一下:〔foobarlocalhost〕sudolsrootanacondaks。cfgDesktopinstall。loginstall。log。syslog当然,你也可以说某些命令用户foobar不可以运行,通过使用!操作符,但这不是一个好主意。因为,用!操作符来从ALL中剔出一些命令一般是没什么效果的,一个用户完全可以把那个命令拷贝到别的地方,换一个名字后再来运行。日志与安全sudo为安全考虑得很周到,不仅可以记录日志,还能在有必要时向系统管理员报告。但是,sudo的日志功能不是自动的,必须由管理员开启。这样来做:touchvarlogsudovietcsyslog。conf在syslog。conf最后面加一行(必须用tab分割开)并保存:local2。debugvarlogsudo重启日志守候进程,psauxgrepsyslogd把得到的syslogd进程的PID(输出的第二列是PID)填入下面:killHUPPID这样,sudo就可以写日志了:〔foobarlocalhost〕sudolsrootanacondaks。cfgDesktopinstall。loginstall。log。syslogcatvarlogsudoJul2822:52:54localhostsudo:foobar:TTYpts1;pwdhomefoobar;USERroot;commandbinlsroot不过,有一个小小的缺陷,sudo记录日志并不是很忠实:〔foobarlocalhost〕sudocatetcshadowdevnullcatvarlogsudo。。。Jul2823:10:24localhostsudo:foobar:TTYpts1;PWDhomefoobar;USERroot;COMMANDbincatetcshadow重定向没有被记录在案!为什么?因为在命令运行之前,shell把重定向的工作做完了,sudo根本就没看到重定向。这也有个好处,下面的手段不会得逞:〔foobarlocalhost〕sudolsrootetcshadowbash:etcshadow:权限不够sudo有自己的方式来保护安全。以root的身份执行sudoV,查看一下sudo的设置。因为考虑到安全问题,一部分环境变量并没有传递给sudo后面的命令,或者被检查后再传递的,比如:PATH,HOME,SHELL等。当然,你也可以通过sudoers来配置这些环境变量。 6。pwd显示当前工作目录的绝对路径 该命令是bash内建命令,相关的帮助信息请查看help命令。 举例当前目录为根目录下〔rootgzycentos〕pwd当前目录为root〔rootgzycentos〕pwdroot 8。passwd用于让用户可以更改自己的密码 passwd命令用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。 举例如果是普通用户执行passwd只能修改自己的密码。如果新建用户后,要为新用户创建密码,则用passwd用户名,注意要以root用户的权限来创建。〔rootlocalhost〕passwdlinuxde更改或创建linuxde用户的密码;Changingpasswordforuserlinuxde。NewUNIXpassword:请输入新密码;RetypenewUNIXpassword:再输入一次;passwd:allauthenticationtokensupdatedsuccessfully。成功;普通用户如果想更改自己的密码,直接运行passwd即可,比如当前操作的用户是linuxde。〔linuxdelocalhost〕passwdChangingpasswordforuserlinuxde。更改linuxde用户的密码;(current)UNIXpassword:请输入当前密码;NewUNIXpassword:请输入新密码;RetypenewUNIXpassword:确认新密码;passwd:allauthenticationtokensupdatedsuccessfully。更改成功; 7。mv用来对文件或目录重新命名 mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。 mv命令可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果: 如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖己存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。当目标文件是目录文件时,源文件或目录参数可以有多个,则所有的源文件都会被移至目标文件中。所有移到该目录下的文件都将保留以前的文件名。 注意事项:mv与cp的结果不同,mv好像文件搬家,文件个数并未增加。而cp对文件进行复制,文件个数增加了。 举例将目录usrmen中的所有文件移到当前目录(用。表示)中:mvusrmen。移动文件mvfile1。txthomeoffice移动多个文件mvfile2。txtfile3。txtfile4。txthomeofficemv。txthomeoffice移动目录mvdirectory1homeoffice重命名文件或目录mvfile1。txtfile2。txt将文件file1。txt改名为file2。txt重命名目录mvdirectory1directory2打印移动信息mvv。txthomeoffice提示是否覆盖文件mvifile1。txthomeoffice源文件比目标文件新时才执行更新mvuv。txthomeoffice不要覆盖任何已存在的文件mvvn。txthomeoffice复制时创建备份mvbv。txthomeoffice无条件覆盖已经存在的文件mvf。txthomeoffice 9。cp将源文件或目录复制到目标文件或目录中 cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下。cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则将出现错误。 举例实例下面的第一行中是cp命令和具体的参数(r是递归,u是更新,v是详细)。接下来的三行显示被复制文件的信息,最后一行显示命令行提示符。这样,只拷贝新的文件到我的存储设备上,我就使用cp的更新和详细选项。通常来说,参数r也可用更详细的风格recursive。但是以简短的方式,也可以这么连用ruv。cpruvusrmentmpmentmp版本备份backupnumbered参数意思为我要做个备份,而且是带编号的连续备份。所以一个备份就是1号,第二个就是2号,等等。cpforcebackupnumberedtest1。pytest1。pylstest1。pytest1。py。1test1。py。2如果把一个文件复制到一个目标文件中,而目标文件已经存在,那么,该目标文件的内容将被破坏。此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到点。或点点。。的形式。例如,下面的命令将指定文件复制到当前目录下:cp。。maryhomeworkassign。所有目标文件指定的目录必须是己经存在的,cp命令不能创建目录。如果没有文件复制的权限,则系统会显示出错信息。将文件file复制到目录usrmentmp下,并改名为file1cpfileusrmentmpfile1将目录usrmen下的所有文件及其子目录复制到目录usrzh中cprusrmenusrzh交互式地将目录usrmen中的以m打头的所有。c文件复制到目录usrzh中cpiusrmenm。cusrzh我们在Linux下使用cp命令复制文件时候,有时候会需要覆盖一些同名文件,覆盖文件的时候都会有提示:需要不停的按Y来确定执行覆盖。文件数量不多还好,但是要是几百个估计按Y都要吐血了,于是折腾来半天总结了一个方法:cpaaabbb复制目录aaa下所有到bbb目录下,这时如果bbb目录下有和aaa同名的文件,需要按Y来确认并且会略过aaa目录下的子目录。cpraaabbb这次依然需要按Y来确认操作,但是没有忽略子目录。cpraaaabbb依然需要按Y来确认操作,并且把aaa目录以及子目录和文件属性也传递到了bbb。cpraaaabbb成功,没有提示按Y、传递了目录属性、没有略过目录。递归强制复制目录到指定目录中覆盖已存在文件cprfb。。。backup将当前目录下所有文件,复制到当前目录的兄弟目录backup文件夹中拷贝目录下的隐藏文件如。babelrccpraaa。。bbb将aaa目录下的,所有。开头的文件,复制到bbb目录中。cpaaaa。bbb记住后面目录最好的带上a参数复制到当前目录cpaaa。conf。将aaa。conf复制到当前目录 10、rm用于删除给定的文件和目录 rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。 注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。 交互式删除当前目录下的文件test和examplermitestexampleRemovetest?n(不删除文件test)Removeexample?y(删除文件example)删除当前目录下除隐含文件外的所有文件和子目录rmr应注意,这样做是非常危险的!rm命令删除当前目录下的packagelock。json文件find。namepackagelock。jsonexecrmrf{};rm命令删除当前目录下的nodemodules目录find。namenodemodulestypedpruneexecrmrf{}rm命令删除文件rm文件1文件2。。。rmtestfile。txtrm命令删除目录rmr〔目录名称〕r表示递归地删除目录下的所有文件和目录。f表示强制删除rmrftestdirrmrtestdir删除操作前有确认提示rmi〔文件目录〕rmritestdirrm忽略不存在的文件或目录f选项(LCTT译注:即force)让此次操作强制执行,忽略错误提示rmf〔文件。。。〕仅在某些场景下确认删除选项I,可保证在删除超过3个文件时或递归删除时(LCTT译注:如删除目录)仅提示一次确认。rmIfile1file2file3删除根目录当然,删除根目录()是Linux用户最不想要的操作,这也就是为什么默认rm命令不支持在根目录上执行递归删除操作。然而,如果你非得完成这个操作,你需要使用nopreserveroot选项。当提供此选项,rm就不会特殊处理根目录()了。不给实例了,操作系统都被你删除了,你太坏了rm显示当前删除操作的详情rmv〔文件目录〕 好啦,今天就先整理到这里!下次再见!!!