Total Pageviews

Wednesday 31 July 2024

共产党越管越严 中国人的致富之路越走越窄 中国人把矛头对准制度不公和习近平的恶政

 随着习近平第三任期的开始,中国经济困窘乏力,政治上的高压持续加强,越来越多的中国人选择不再苛责自己。多位受访者表示:是政策的问题,是体制的问题,是习近平的问题。

答案显而易见。哪怕是和十几年前做比较,中国人看上去也已经没有那么老实可欺。但一位袍哥后人告诉美国之音:也仅此而已,中国人有选择自杀的勇气,但没有血性去反抗中国的执政党。

袍哥后人的家庭辩论

钱难赚,已是共识。钱为何难赚,不同的家庭看法不同,同一个家庭甚至也有分歧。来自中国西部省份,在建筑行业工作的强先生,向美国之音分享了自己的经历。

强先生的曾祖父曾是当地舵爷。舵爷是袍哥会的头牌大哥,袍哥会是活跃于清代、民国的民间秘密社团组织。

"因为这个原因,我们家一直受到不平等对待。我的爷爷、父亲和我,对共产党都看不惯,"强先生告诉美国之音。

但对于他为什么赚不到钱,家人看法不同:"不管我父亲、母亲,还是表哥,都认为我是个人能力不够,或者是性格不好。我表哥稍微聪明一点,在国内是所谓的中产。但在我这个明眼人或者有认知的人的眼里,赚不到太多钱就是整体的大环境,加上国内政权结构造成的。"

强先生曾憧憬财富自由,他认为官方政策导致了变故。"2017年的时候,我爸买了一辆重汽王牌的蓝牌自卸车,去工地上拉渣土、土石。当时,老板给他加油,车辆有问题的话会维修一下,一个月就可以赚一万二。因为生意好,当时家里计划着年底再给我买一辆。但是因为2017年环保风暴,大概一年左右的时间,我就只能出去打工了,我爸也把车卖了。"

他介绍,因为2017年环保风潮,仅他老家所在的城市,就有两万多家中小的民营家具厂倒闭,"环保确实利国利民,但是政策实行得太急,实施过程中有很多不正当利益勾当,在我眼里就是劳民伤财,就是专门坑老百姓的。我邻居有个小伙子开餐馆,也被环保部门要求搞一个类似空气污染回收器的东西,而且要从指定的商家购买,要花二十万,其实普通商家两三万就能搞定"。

认为失掉了在国内的机会后,强先生两次通过劳务中介到国外工作:"小工三四百人民币一天,中工五六百人民币一天,虽然也是辛苦活,但比国内强点。"目前在中国的他,正等着下一次出国工作的机会。

"习近平最能折腾"

清官难断家务事。但数据显示,强先生更是一个"明眼人",更有理由在家庭的辩论里获胜。根据来自华盛顿智库战略与国际研究中心(CSIS)的最新报告,一项于2023年进行的调查显示,在导致生活贫困的因素里,越来越多的中国人认为个人因素不再重要。

根据这一报告,机会不平等、经济制度的不公平分别位列第1、第3。而在2014年、2009年、2004年所进行的类似调查中,机会不平等分别排在第4位、第5位、第6位,经济制度不公分别排在第9位、第10位和第8位。

报告同时显示,过往20年,在导致生活贫困的因素里,能力不足、努力不够一直位列前3位,但2023年的调查显示,中国人的认知发生了改变,能力不足已位列第6位,而努力不够位列第5位。性格不好由2004年的第4位,跌落至2023年的第7位。

不再苛责自己,看上去能够引起足够的共鸣。活跃在北京、广东等地的一位短片导演告诉美国之音:"共产党管得太多,让我这样的无名之辈,当然也让很多年轻人失去了获得知名度的机会。抖音短视频火的时候,他们要管;短片导演参加海外影展的多了,短片市场火起来了,他们也要管。管起来 - 这是他们的惯性。"

这位导演提到,中国国家电影局7月初发出新要求,短片参加境外电影节,由境内第一出品单位或送展法人向国家电影局备案,"虽是备案,但他们很有可能要审剧本的。"

一位不愿意具名的资深媒体人告诉美国之音,个人努力难敌政治铁幕。江泽民、胡锦涛执政时,大家其实也不满意,但现在比较起来,习近平还是最能折腾的,而且不知道他还要折腾多久,"媒体行业完全变质,做一点有价值的深度报道难上加难,我这种想干事业的人心灰意冷。"

认为个人的困窘源于大环境而不是个人,在去年9月得到了规模浩大的验证。中国网红李佳琦在网络直播中销售79元一支的眉笔,有网友嫌贵,李佳琦回应"有时候找找自己原因,这么多年了工资涨没涨,有没有认真工作?"他的说法引来了群体愤怒,在如潮的"谁不想涨工资?但努力工作就一定能如愿吗"的质疑声中,李佳琦一天掉粉100万。

无声的革命

2013年,也就是所谓习李新政第一年,《无声的革命》一书在中国引发轩然大波。所谓"无声革命",作者本意指中共建政后,穷人的孩子悄无声息地得到了高等教育的机会。但此书披露了中共干部子女上北大比例攀升,干部子女比例超过专业技术人员、更远超工人和农民阶层,一时被舆论聚焦。

时过境迁,曾是上海同济大学副教授、目前在美国生活的邱家军认为,当下的情况越来越突出,农村学生进入好大学读书的比例明显降低,像北京的北大、清华,农村学生占本科新生比例不到30%,较上个世纪九十年代初有了20%的落差,"在复旦、同济这样的高校,来自农村的硕士、博士就更少了"。

邱家军同时告诉美国之音:"上海的情况,父母是公务员的,孩子考上公务员的比例可以说相当高,至少是60%以上。从官员阶层的子女中间产生新的官员,这就是比较典型的阶层固化。另外一方面,上海好的、有油水的企业,公务员的子女、官员的子女也是比较多的。越有权的部门,越有钱的部门,阶层固化越严重。"

他认为上海本地人考公务员至少有三个优势:会讲上海话,对上海的人情世故比较了解;有信息优势,知道哪些岗位的公务员收入高;而且上海人脑子灵光,还没有考取公务员之前,先到你想去的那个单位去实习或者做雇员,象征性地拿一点钱,以后考公务员就简单很多。

外地学生考公难,不只发生在上海。在广州海珠区一家设计公司工作的湖北人文华告诉美国之音,他是走一步看一步:"因为房地产政策的影响,我们公司受到了极大的冲击。现在做老破小房子的翻新,总体情况稳住了。我的基本工资3200元,做一单业务的奖金在1200元左右。"

"我同时备考公务员。但现在名校生、硕士生甚至博士生扎堆,我这种从湖北名不见经传的学校出来的,真是没有信心。"

他认为,公务员考试总体透明,但面试环节的人为因素会多一点,"广州有亲戚,但也不是公务员,所以得不到任何帮助"。

关注当代大学生命运流转的中国作家黄灯女士,今年5月底接受新京报记者采访时表示,现在的大学生整体上越来越原子化,精神上越来越孤寂。

"市场经济的冲击和网络的隔绝,让学生们孤立无援。读大学、找工作都是自己的事,买不起房也是自己的事,生存面临很多挑战。他们没办法放松,没办法不焦虑。一切都是不确定的,唯一的确定性就是来自家庭的依托,"她说。

逃离

多位受访者告诉美国之音,他们对中国的现状感到失望。

在中国的社交群组里,强先生时不时和群友分享走线和移民的消息。"我个人的规划,就是先通过海外务工出去,多挣点辛苦钱。趁年轻身体好,脑袋还能转得快一点。"他告诉美国之音,"存点钱以后还是要找机会到国外定居。因为国内对年轻人来说,我的形容就是,不是人生活的地方。"

他认为中国不会有改变:"我爸我妈知道执政党坏,但是他们也没说过反抗。我表哥也没想过反抗。这段时间国内很多跳楼的、自杀的,他怎么反抗啊。我们中国人,我感觉是没啥血性了。"

认为个人努力难敌政治铁幕的资深媒体人也透露,他正联系几个国家的朋友,看看去哪个国家最好,哪个办法最稳妥。

中共二十届三中全会的改革,看上去也未能消弭不确定性带给人们的焦虑。邱家军表示:"12年观察下来,习近平不是不想干事,而是他能力不行、能力不足。第一,中国的就业,特别是年轻人的就业,你解决了没有?教育,特别是教育公平,你解决了没有?第三,医疗保障你解决了没有?第四点就是住房,加上社会保险,这些你解决了没有?别的不说,你哪怕是能够解决其中的一条,也是非常得民心。"

"中国政府从上到下,实际上是一个比较致密的网状结构。基层政府是这个结构,高层政府也是这个结构,总体上导致社会比较固化,流动性比较差。实际上,这种固化是当权者为了保住自己的利益而有意为之。三中全会促进阶层流动的可能性基本上非常低。"

逃离也在中国内部发生。黄灯女士在让她声名鹊起的非虚构作品《我的二本学生》中提到,深圳浪漫主义般飙升的房价,彻底瓦解了学生们在大城市奋斗的念头,除了"丧",除了选择逃离,他们找不到任何留下的现实理由。她认为"房价的失控和飙升,直接影响了学生对现实的感知和毕业去向"。

中国一线城市的房价,在中共高层始料未及的房地产危机中有所回调。美国之音联系黄灯,询问她对大学生的"丧"有何新看法,她表示不能接受美国之音的采访,"正忙工作的调动,而且该讲的我都已经讲过了,"她说。

Linux下,文件类型和扩展名


Linux下,一切皆文件,比如鼠标USB接口、打印机接口等,在Linux下都是以文件形式存在的。我们可以用ls -l命令来查看文件的属性和权限,那么Linux下到底有多少种文件类型?详细细分的话,一般可以分成下面几种。
普通文件
在用ls -l命令显示属性时,第一个字符为[-],例如:[-rwxrwxrwx]。普通文件按照文件内容来分,又可以分成下面几种:
纯文本文件:内容为数字、字符、字母等,文件里面存储的一些内容用户可以直接查阅。

二进制文件:计算机真正能执行的就是二进制文件了,也就是0、1二进制类型的文件。

数据格式文件:有些程序在运作的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件 (data file)。举例来说,我们的Linux在使用者登入时,都会将登录的数据记录在 /var/log/wtmp那个文件内,该文件是一个data file,它能够透过last这个指令读出来!但是使用cat时,会读出乱码,因为他是属于一种特殊格式的文件。

目录
第一个属性为[d],例如 [drwxrwxrwx]。

连结档(link)
就是类似Windows系统底下的快捷方式! 第一个属性为 [l](英文L的小写),例如 [lrwxrwxrwx]。

设备与装置文件(device)
与设备装置相关的文件,通常在/dev目录下,按装置类型不同,又可以分为:
区块(block)设备档 :第一个属性为[b],就是一些随机存储数据的装置,比如硬盘、软盘等。你可以在硬盘不同区块进行随机读写,你可以查看下/dev/sda。

字符(character)设备文件:第一个属性为[c],就是一些输出接口设备,比如鼠标、键盘、打印机等,你可以查看下/dev/lp。

数据接口文件(sockets)
第一个属性为 [s], 最常在/var/run这个目录中看到这种文件类型了。这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个socket来进行数据的沟通了。

数据输送文件(FIFO, pipe)
FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为[p] 。

数据接口文件和数据输出文件比较不好理解,你也可以透过man fifo及man socket来查阅系统上更详细的文档说明!

Linux文件扩展名
Linux下是没有所谓拓展名的概念,比如一个文件是否能被执行,在window下是通过后缀名来判断,通常后缀名为.bat,.exe就是可执行文件,但Linux下是通过x这个权限来判断的,例如[-rwx-r-xr-x] 即代表这个文件可以被执行!可以被执行跟可以执行成功是不一样的。

举例来说,在root家目录下的install.log 是一个纯文本文件,如果经由修改权限成为 -rwxrwxrwx 后,这个文件能够真的执行成功吗?当然不行,因为他的内容根本就没有可以执行的数据。所以说,这个x代表这个文件具有可执行的能力, 但是能不能执行成功,当然就得要看该文件的内容。

还有如果有一个文件权限和内容都为可执行文件, 如常见的/bin/ls这个显示文件属性的指令,这个文件就是二进制可执行文件。不过,如果这个文件的权限被修改成无法执行时,也就是说去掉这个文件的x权限,那么ls就变成不能执行了。

人们给Linux文件添加拓展名,只是让人们更加一目了然的知道该文件是干什么的,比如如果后缀为.php文件,人们很容易知道这个文件就是php脚本文件。那么linux下常用的拓展名文件有:

*.sh : 脚本或批处理文件 (scripts),因为批处理文件是使用shell脚本写成的,所以扩展名就编成 .sh 。
 
*Z, *.tar, *.tar.gz, *.zip, *.tgz: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,不同的压缩软件,扩展名就略有不同!
 
*.html, *.php:网页相关文件。
Linux系统上的文件名只是让你了解该文件可能的用途而已。文件本身真正含义还是要参照文件属性和权限类型的。

Linux的根目录(/)的意义与内容


Linux根目录的意义非常大,Linux根目录是整个系统最重要的一个目录,因为其它所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修复等动作有关。根目录虽重要,不过根目录不要放在非常大的分割槽内,因为越大的分割槽妳会放入越多的数据,如此一来根目录所在分割槽就可能会有较多发生错误的机会。


因此FHS标准建议:根目录(/)所在分割槽应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分割槽内,保持根目录越小越好。如此不但效能较佳,根目录所在的文件系统也比较不容易发生问题。


一般根目录(/)底下要有底下这些次目录的存在:

/bin   在/bin底下的存放指令(可执行文件)可以被root与一般账号所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp,   bash等常用的指令。


/boot   这个目录主要在放置开机会使用到的文件,包括Linux核心文件以及开机选项与开机所需配置文件等。如果使用的是grub这   个开机管理程序, 则还会存在/boot/grub/这个目录!


/dev   在Linux系统上,任何装置与接口设备都是以文件的型态存在于这个目录当中的。 你只要透过存取这个目录底下的某个文件, 就等于存取某个装置。 比要重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*, /dev/hd*, /dev/sd*等等。


/etc   系统主要的配置文件几乎都放置在这个目录内,例如用户的账号密码文件、 各种服务的启始项等等。一般来说,这个目录下的 各文件属性是可以让一般使用者查阅的, 但是只有root有权力修改。FHS建议不要放置可执行文件(binary)在这个目录中。比较重要的文件有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/ 等等。另外,其下重要的目录有:

/etc/init.d/:所有服务的预设启动 script 都是放在这里的,例如要启动或者关闭 iptables 的话:/etc/init.d/iptables start   /etc/init.d/iptables stop。

/etc/xinetd.d/:这就是所谓的超级服务程序管理的各项服务的配置文件目录。

/etc/X11/:与 X Window 有关的各种配置文件都在这里,尤其是 xorg.conf 这个 X Server 的配置文件。


/home  这是系统默认的用户家目录(home directory)。在你新增一个一般使用者账号时, 默认的用户家目录都会在这里。家目录有两 种代号:

~:代表目前这个用户的家目录。

~ppss :则代表 ppss 的家目录!


/lib   系统的函式库非常的多,而/lib放置的则是在开机时会用到的函式库, 以及在/bin或/sbin底下的指令会呼叫的函式库。 什么 是函式库呢?妳可以将他想成是『外挂』,某些指令必须要有这些『外挂』才能够顺利完成程序的执行之意。 尤其重的是/lib/modules/这个目录, 因为该目录会放置核心相关的模块(驱动程序)!其作用类似windows里的.dll文件。


/media  media是『媒体』的英文,顾名思义,这个/media底下放置的就是可移除的装置! 包括软盘、光盘、DVD等等装置都暂时挂载于 此。常见的档名有:/media/cdrom等等。


/mnt    如果妳想要暂时挂载某些额外的装置,一般建议可以放置到这个目录中。


/opt    这个是给第三方软件放置的目录。 举例来说,KDE这个桌面管理系统是一个独立的计划,不过他可以安装到Linux系统中,因此KDE的软件就建议放置到此目录下了。 另外,如果妳想要自行安装额外的软件(非原本的distribution提供的),那么也能够将你的软件安装到这里来。 不过,以前的Linux系统中,我们还是习惯放置在/usr/local目录下呢!


/root    系统管理员(root)的家目录。之所以放在这里,是因为如果进入单人维护模式而仅挂载根目录时, 该目录就能够拥有root 的家目录,所以我们会希望root的家目录与根目录放置在同一个分割槽中。


/sbin    Linux有非常多指令是用来设定系统环境的,这些指令只有root才能够利用来『设定』系统,其他用户最多只能用来『查询』 而已。 放在/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的指令。 至于某些服务器软件程序,一般则放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件(system binary), 则放置到/usr/local/sbin/当中了。常见的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。


/srv    srv可以视为『service』的缩写,是一些网络服务启动之后,这些服务所需要取用的数据目录。 常见的服务例如WWW, FTP等 等。举例来说,WWW服务器需要的网页数据就可以放置在/srv/www/里面。


/tmp    这是让一般使用者或者是正在执行的程序暂时放置文件的地方。 这个目录是任何人都能够存取的,所以你需要定期的清理一 下。当然,重要数据不可放置在此目录啊! 因为FHS甚至建议在开机时,应该要将/tmp下的数据都删除!


事实上FHS针对根目录所定义的标准就仅有上面的目录,底下是几个在Linux当中也是非常重要的目录:


/lost+found  这个目录是使用标准的ext2/ext3文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时, 将一些遗失的片 段放置到这个目录下。这个目录通常会在分割槽的最顶层存在, 例如你加装一颗硬盘于/disk中,那在这个系统下就会自 动产生一个这样的目录/disk/lost+found。


/proc    这个目录本身是一个『虚拟文件系统(virtual filesystem)』!他放置的数据都是在内存当中, 例如系统核心、行程信息 (process)、周边装置的状态及网络状态等等。因为这个目录下的数据都是在内存当中, 所以本身不占任何硬盘空间啊!比较重要的文件例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。


/sys    这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录与核心相关的信息。 包括目前已加载的核心模块 与核心侦测到的硬件装置信息等等。这个目录同样不占硬盘容量!


根目录与开机有关,开机过程中仅有根目录会被挂载, 其他分割槽则是在开机完成之后才会持续的进行挂载的行为。因此根目录下与开机过程有关的目录, 就不能够与根目录放到不同的分割槽去。

这五个目录千万不可与根目录分开在不同的分割槽:

/etc:配置文件

/bin:重要执行档

/dev:所需要的装置文件

/lib:执行档所需的函式库与核心所需的模块

/sbin:重要的系统执行文件

Tuesday 30 July 2024

Linux下, 目录操作命令大全

 在linux下,如果想对目录进行切换等操作,必须了解目录下所谓的路径。而路径又常常分为相对路径和绝对路径。这两种路径的写法各有好处,在不同场景下择优选择。


目录操作最常见的几种操作是:切换目录,创建目录,删除目录等。不过,linux下有一些目录比较特殊,常见的特殊目录如下:

.         代表此层目录


..        代表上一层目录

 

-         代表前一个工作目录

 

~         代表『目前使用者身份』所在的家目录

 

~ppp      代表ppp这个使用者的家目录(ppp是个帐号名称)

需要特别注意的是:在所有目录底下都会存在的两个目录,分别是『.』与『..』分别代表此层与上一级目录的意思。

对于根目录(/)来说同样存在.与..两个目录,你可以用 ls -al / 命令验证下。不过根目录的上一层目录(..)与根目录自己(.)是同一个目录。


目录操作命令常见有:


cd:切换目录

 

pwd:显示目前的目录

 

mkdir:创建一个新的目录

 

rmdir:删除一个空的目录


cd (切换目录)

cd是Change Directory的缩写,这是用来变换工作目录的命令。注意,目录名称与cd命令之间存在一个空格。

[root@ppp ~]# cd [相对路径或绝对路径]

 

# 最重要的就是目录的绝对路径与相对路径

 

[root@ppp ~]# cd /home/peter

 

# 代表去到 peter 这个用户的家目录,即 /home/peter

 

[root@ppp peter]# cd ~

 

# 表示回到自己的家目录,即是/roo 这个目录

 

[root@ppp peter]# cd

 

# 当没有加上任何路径,也还是代表回到自己家目录的意思喔!

 

[root@ppp ~]# cd ..

 

# 表示去到当前目录的上一级目录

 

[root@ppp /]# cd -

 

# 表示回到自己的工作目录,也就是/root 

 

[root@ppp ~]# cd /usr/bin

 

# 这个就是绝对路径的写法!直接指定要去的完整路径名称!

 

[root@ppp bin]# cd ../sbin

 

# 这个是相对路径的写法,我们由/usr/bin去到/usr/sbin

pwd (显示目前所在的目录)

pwd是Print Working Directory的缩写,也就是显示目前所在目录的命令,如果你想要知道目前所在的目录,可以输入pwd即可。pwd是以绝对路径的方法显示你当前的工作目录。


[root@ppp ~]# pwd [-P]

 

选项与参数:

 

-P  :显示出确实的路径,而非使用连结 (link) 路径。

 

范例:显示出目前的工作目录:

 

[root@ppp ~]# pwd

 

/root   <== 显示出目录

 

范例:显示出实际的工作目录,而非连结档本身的目录名

[root@ ~]# cd /var/mail  <==注意,/var/mail是一个连结档

 

[root@ mail]# ls -l /var/mail

 

lrwxrwxrwx. 1 root root 10 Dec 17 2012 /var/mail -> spool/mail

 

[root@ppp mail]# pwd

 

/var/mail         <==列出目前的工作目录

 

[root@ppp mail]# pwd -P

 

/var/spool/mail   <==怎么回事?有没有加 -P 差很多

 

# 因为 /var/mail 是连结档,连结到 /var/spool/mail 

 

# 所以,加上 pwd -P 的选项后,会不以连结档的数据显示,而是显示正确的完整路径啊!

mkdir (创建新目录)

mkdir是make directory的缩写,即创建目录。


[root@ppp ~]# mkdir [-mp] 目录名称

 

选项与参数:

 

-m :配置文件的权限喔!直接配置,而不是按默认权限(umask)配置。

 

-p :直接将所需要的目录(包含上一级目录)递回创建起来!

 

范例:到/tmp底下尝试创建数个新目录:

[root@ppp ~]# cd /tmp

 

[root@ppp tmp]# mkdir test  <==创建名为test的新目录

 

[root@ppp tmp]# mkdir test1/test2/

 

mkdir: cannot create directory `test1/test2/': 

 

No such file or directory   <== 没办法直接创建此目录啊!

 

如果不用参数只能先创建test1目录然后切换目录到test1下再创建test2目录。

 

[root@www tmp]# mkdir -p test1/test2/

 

# 加了这个 -p 的选项,可以自行创建多层目录!

 

范例:创建权限为rwx--x--x的目录

[root@www tmp]# mkdir -m 711 test2

 

[root@www tmp]# ls -l

 

drwxr-xr-x  3 root  root 4096 Jul 18 12:50 test

 

drwxr-xr-x  3 root  root 4096 Jul 18 12:53 test1

 

drwx--x--x  2 root  root 4096 Jul 18 12:54 test2

 

# 仔细看上面的权限部分,如果没有加上 -m 来强制配置属性,系统会使用默认属性。

 

#默认属性是umask

创建多层目录时要使用-p这个参数来递归创建。否则只能一层一层创建,只有第一层存在,然后再创建下一层。

删除目录xyz的命令:rm -rf xyz

Linux下, ls命令详解和ls命令参数分析

 在linux系统当中,ls(list)是最经常使用的命令之一。它用来显示文件或目录的相关属性。


ls命令用法详解


[root@lmode ~]# ls [-aAdfFhilnrRSt] 目录名称/文件名

 

[root@lmode ~]# ls [--color={never,auto,always}] 目录名称/文件名

 

[root@lmode ~]# ls [--full-time] 目录名称/文件名

当我们只下达ls而不带任何参数时,默认显示当前目录下非隐藏的文件或目录、并按文件名进行排序与及默认显示文件或目录的颜色。我们可以运用一些选项来显示更多的内容。


ls命令参数分析


ls命令选项与参数:

 

-a  :全部的文件,连同隐藏档( 开头为 . 的文件) 一起列出来(常用)

 

-A  :全部的文件,连同隐藏档,但不包括 . 与 .. 这两个目录

 

-d  :仅列出目录本身,而不是列出目录内的文件数据(常用)

 

-f  :直接列出结果,而不进行排序 (ls 默认会以档名排序!)

 

-F  :根据文件、目录等资讯,给予附加数据结构,例如:

 

      *:代表可运行档; /:代表目录; =:代表 socket 文件; |:代表 FIFO 文件;

 

-h  :将文件容量以人类较易读的方式(例如 GB, KB 等等)列出来;

 

-i  :列出 inode 号码,inode 的意义下一章将会介绍;

 

-l  :长数据串列出,包含文件的属性与权限等等数据;(常用)

 

-n  :列出 UID 与 GID 而非使用者与群组的名称 (UID与GID会在帐号管理提到!)

 

-r  :将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小;

 

-R  :连同子目录内容一起列出来,等於该目录下的所有文件都会显示出来;

 

-S  :以文件容量大小排序,而不是用档名排序;

 

-t  :依时间排序,而不是用档名。

 

--color=never  :不要依据文件特性给予颜色显示;

 

--color=always :显示颜色

 

--color=auto   :让系统自行依据配置来判断是否给予颜色

 

--full-time    :以完整时间模式 (包含年、月、日、时、分) 输出

 

--time={atime,ctime} :输出 access 时间或改变权限属性时间 (ctime) 而非内容变更时间 (modification time)

常用命令ls -l


这个-l选项应该是上面所有选项下被用得最频繁的,它默认显示了文件的属性,权限,时间等。在很多linux的发行版中,已经将ll配置成为ls -l的意思。所以你可以用ll(两个L的缩写)来简化ls -l操作,换句话说ls -l的等价命令就是ll,这两个命令效果是一样的。其实这个功能用到了bash shell的alias,也就是命令重命名,感兴趣的可以去了解下。


ls命令操作实例


实例1:将/root目录下所有文件显示出来

 

[root@lmode ~]# ls -al

 

total 108

 

dr-xr-x---.  3 root root  4096 Oct 11 23:04 .

 

dr-xr-xr-x. 23 root root  4096 Oct 14 11:45 ..

 

-rwxr-xr-x   1 root root  3085 Jul 30  2013 auto_fdisk.sh

 

-rw-------   1 root root  9296 Oct 14 12:17 .bash_history

 

-rw-r--r--.  1 root root    18 May 20  2009 .bash_logout

 

-rw-r--r--.  1 root root   176 May 20  2009 .bash_profile

 

-rw-r--r--.  1 root root   176 Sep 23  2004 .bashrc

 

-rw-r--r--.  1 root root   100 Sep 23  2004 .cshrc

 

-rw-------   1 root root    47 Sep 17 22:56 .lesshst

 

-rw-r--r--.  1 root root   129 Dec  4  2004 .tcshrc

 

-rw-------   1 root root   894 Mar  7  2015 .viminfo

注意:这里要显示所有文件 所以要记得带参数-a。在linux下,文件名的第一个字符是'.'的默认为隐藏文件。像上面.(代表当前目录) , ..(代表上一级目录) ,.bash_history等都是隐藏文档。


实例2:完整的显示/root目录下文件的修改时间

 

[root@lmode ~]# ls --full-time /root


total 44


-rwxr-xr-x  1 root root  3085 2013-07-30 10:54:41.000000000 +0800 auto_fdisk.sh

注意:显示文件的修改时间要用–full-time选项,而文件权限的修改时间要用–time=ctime选项,要注意区别。从上面可以看出,当使用ls命令不带-a选项时,隐藏文件便不会被显示出来,这也就是上面只显示一项的原因。

Linux下, $PATH环境变量详解

 在Linux下我们可以用ls这个命令查看文件的属性,而命令ls完整的命令路径一般是:/bin/ls,这是绝对路径。我们在任何地方都可以运行/bin/ls这个命令。当我们在任何目录下输入ls,其实最终找到的命令都是/bin/ls。那么为什么我们输入ls就可以找到/bin/ls命令呢,这个就是环境变量PATH起的作用了。


当我们运行一个命令,如ls这个命令,系统会根据PATH环境变量事先的配置去每个PATH定义的目录下搜寻可运行命令,如果PATH定义的目录包含多个ls可执行文件,则先找到的命令先被运行。


那么,$PATH环境变量存储的值是什么?我们可以用echo这个命令来输出这个环境变量的值,echo的作用是显示,输出。

具体做法如下:


超级管理员root执行

 

[root@lmode ~]# echo $PATH

/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

 

[ppp@lmode ~]# echo $PATH

/usr/local/bin:/bin:/usr/bin:/home/ppp/bin

PATH(这个命令要大写)这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)来隔开,每个目录有先后之分,放在越前面的目录越先被查找。超级管理员用户root和普通用户自行echo $PATH打印出的目录会有所不同。不过,无论是超级管理员root还是普通用户都有/bin这个目录,也就说任何普通用户也好或者超级管理员用户也好,都可以使用/bin/ls这个命令。注意:/sbin、/usr/sbin和/usr/local/sbin这三个目录是超级管理员特有的,也就是说里面的命令也是超级管理员特有的。一般来说普通用户可以用绝对路径的方法来操作这些命令,比如当普通用户想查看网卡配置信息时,可以使用/sbin/ifconfig ehto来进行查看。


实例1:


假设在root用户下,将ls由/bin/ls移动到/root/ls,那么root用户还可使用ls这个命令吗?

 

[root@lmode ~]# mv /bin/ls /root

 

[root@lmode~]# ls

-bash: /bin/ls: No such file or directory

 

[root@lmode~]# /root/ls

sh-1.3.0-centos.zip

这个答案是否定的,root不可以使用ls这个命令,即使在/root目录下也不行,因为系统是根据PATH这个环境变量指定的目录去查找命令位置的,而/root这个目录不在PATH这个目录中。不过我们可以通过绝对路径/root/ls、或相对路径./ls来执行这个命令。


实例2:


如果想让/root这个目录也加到环境变量PATH里面,那么如何操作?

 

[root@lmode ~]# PATH="$PATH":/root

 

[root@lmode~]# ls

sh-1.3.0-centos.zip

 

将ls重新放回/bin下

[root@www ~]# mv /root/ls /bin

把/root加到环境变量PATH中,那么在任何目录都可以运行ls命令。注意,实验完了不要忘了将ls命令重新放回到/bin目录下。


实例3:


为什么PATH搜寻的目录不加入本目录(.)?

 

因为在Linux下/tmp是大家都能够写入的环境,如果一个黑客在/tmp底下做了一个命令,假设该命令可能会窃取使用者的一些数据,如果你使用root的身份来运行这个命令,那后果就很可怕。

最后,关于PATH环境变量,总结下:


1.不同用户默认的PATH不同,默认能够随意运行的命令也不同(如普通用户和超级管理员);


2.PATH是可以修改的,所以一般使用者还是可以透过修改PATH来运行某些位于/sbin或/usr/sbin下的命令来查询;


3.使用绝对路径或相对路径直接指定某个命令的可执行文件来运行,会比搜寻PATH来的正确;


4.命令应该要放置到正确的目录下,运行才会比较方便;


5.本目录(.)最好不要放到PATH当中。

Linux下,文件查阅命令之cat和tac


在linux下,查阅文件命令时,如果想将文件里面所有内容都连续的显示到屏幕上,可以用cat这个命令。cat是从第一行开始显示文件内容。而tac则是从最后一行开始显示文件内容,可以看出tac是cat的倒着写。下面介绍命令的用法及参数分析。

cat(concatenate)用法及参数分析


[root@lmode ~]# cat [-AbEnTv]

选项与参数:


-A  :相当于 -vET 的整合选项,可列出一些特殊字符而不是空白而已;

-b  :列出行号,仅针对非空白行做行号显示,空白行则不显示行号!

-E  :将结尾的断行字节 $ 显示出来;

-n  :显示出行号,连同空白行也会有行号,与 -b 的选项不同;

-T  :将 [tab] 按键以 ^I 显示出来;

-v  :列出一些看不出来的特殊字符


实例1:查阅/etc/issue这个文件的内容


[root@lmode~]# cat /etc/issue

CentOS release 6.5 (Final)

Kernel \r on an \m


从打印的内容可以看出来,/etc/issue这个文件的内容包括了本机Linux的发行商及版本信息。

实例2:将显示内容带上行号

[root@lmode ~]# cat -n /etc/issue

     1  CentOS release 6.5 (Final)

     2  Kernel \r on an \m

     3


cat这个命令只适合显示文件内容中行数比较少的,一般当文件内容超过40行,就不适合用cat这个命令了,因为显示的内容已经超过了屏幕能容纳的范围,当文件内容行数较多的时候可以选择用more或less命令。


和cat相反的命令是tac,tac是有最后一行到第一行反向显示文件内容到屏幕上。可以看下面的例子:


实例3:反向显示/etc/issue里面的内容

[root@lmode ~]# tac /etc/issue


Kernel \r on an \m

CentOS release 5.3 (Final)

----------------------------------

Linux下的nl命令


nl命令也是显示文件内容的命令,和cat命令有点相似,不过又有区别。下面介绍nl命令的用法和参数:

[root@lmode ~]# nl [-bnw] 文件

选项与参数:

-b  :指定行号指定的方式,主要有两种:

      -b a :表示不论是否为空行,也同样列出行号(类似 cat -n);

      -b t :如果有空行,空的那一行不要列出行号(默认值);

 

-n  :列出行号表示的方法,主要有三种:

      -n ln :行号在屏幕的最左方显示;

      -n rn :行号在自己栏位的最右方显示,且不加 0 ;

      -n rz :行号在自己栏位的最右方显示,且加 0 ;

 

-w  :行号栏位的占用的位数。

范例一:用 nl 列出 /etc/issue 的内容


[root@lmode ~]# nl /etc/issue

     1  CentOS release 6.5 (Final)

     2  Kernel \r on an \m

     

# 注意看,这个文件其实有三行,第三行为空白(没有任何显示),

# 因为是空白行,所以 nl 不会加上行号。

范例二:在空白行也加上行号


[root@lmode ~]# nl -b a /etc/issue

     1  CentOS release 6.5 (Final)

     2  Kernel \r on an \m

     3

范例3:让行号前面自动补上 0


[root@lmode ~]# nl -b a -n rz /etc/issue

000001  CentOS release 6.5 (Final)

000002  Kernel \r on an \m

000003

默认栏位是六位数,如果想要改成 3 位数呢,可以这样:


[root@lmode ~]# nl -b a -n rz -w 3 /etc/issue

001     CentOS release 5.3 (Final)

002     Kernel \r on an \m

003

nl 可以将输出的文件内容自动的加上行号。其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。

Linux下,文件的修改时间

 通过ls这个命令,我们可以了解到文件的许多参数。在Linux下,关于文件的时间参数有三个,这三个参数的主要用途和意义如下:
modification time (mtime):
当该文件的内容数据变更时,就会升级这个时间。内容数据指的是文件的内容,而不是文件的属性或权限。

status time (ctime):
当该文件的状态 (status)改变时,就会升级这个时间,举例来说,像是权限与属性被更改了,都会升级这个时间。

access time (atime):
当该文件的内容被取用时,就会升级这个读取时间 (access)。举例来说,我们使用 cat 去读取 /etc/man.config ,就会升级该文件的 atime 了。

举例来说,我们可以查看/etc/man.config这个文件时间:

[root@lmode ~]# ls -l /etc/man.config
-rw-r--r--. 1 root root 4940 Apr  3  2012 /etc/man.config
[root@lmode ~]# ls -l --time=atime /etc/man.config
-rw-r--r--. 1 root root 4940 Nov 23 04:43 /etc/man.config
[root@lmode ~]# ls -l --time=ctime /etc/man.config
-rw-r--r--. 1 root root 4940 Dec 17  2012 /etc/man.config
从上面的例子可以看到,在默认情况下,ls显示出来的是该文件的mtime,就是这个文件内容上次被更动的时间。

文件的时间是很重要的,因为,如果文件的时间误判的话,可能会造成某些程序无法顺利的运行。有些时候,我们可能发现某个文件的时间快于系统时间(某些情况下,系统时间跑快,然后又创建了某些文件,等时间调回来后导致文件时间快于系统时间),这个时候可以用touch命令来修订时间。

touch命令参数和用法

[root@lmode ~]# touch [-acdmt] 文件
选项与参数:
-a  :仅修订 access time;
-c  :仅修改文件的时间,若该文件不存在则不创建新文件;
-d  :后面可以接欲修订的日期而不用目前的日期,也可以使用 --date="日期或时间"
-m  :仅修改 mtime ;
-t  :后面可以接欲修订的时间而不用目前的时间,格式为[YYMMDDhhmm]
实例1:
[root@lmode ~]#cd /tmp
[root@lmode tmp]# touch test
[root@lmode tmp]# ls -l test
-rw-r--r-- 1 root root 0 Nov 24 22:59 test
从上面可以看到,test这个文件大小是0。如果touch后面有接文件,则该文件的三个时间(atime/ctime/mtime)都会升级为目前的时间。如果该文件不存在,则会主动创建一个空的文件。

实例2:将 ~/.bashrc 复制成为 bashrc

[root@lmode tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rw-r--r-- 1 root root 176 Oct 27 14:27 bashrc
-rw-r--r-- 1 root root 176 Nov 24 22:32 bashrc
-rw-r--r-- 1 root root 176 Nov 24 23:08 bashrc
我们可以发现数据的内容与属性是被复制过来的,因此文件内容时间(mtime)与原本文件相同。但是由于这个文件是刚刚被创建的,因此状态(ctime)与读取时间就便呈现在的时间。

实例3:修改实例2的 bashrc 文件,将日期调整为两天前

[root@lmode tmp]# touch -d "2 days ago" bashrc
[root@lmode tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rw-r--r-- 1 root root 176 Nov 22 23:19 bashrc
-rw-r--r-- 1 root root 176 Nov 22 23:19 bashrc
-rw-r--r-- 1 root root 176 Nov 24 23:19 bashrc
范例4:将上个范例的 bashrc 日期改为 2014/11/24 11:32

[root@lmode tmp]# touch -t 1411241132 bashrc
[root@lmode tmp]# ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc
-rw-r--r-- 1 root root 176 Nov 24  2014 bashrc
-rw-r--r-- 1 root root 176 Nov 24  2014 bashrc
-rw-r--r-- 1 root root 176 Nov 24 23:25 bashrc
可以看到,日期在 atime 与 mtime 都改变了,但是 ctime 则是记录目前的时间。透过 touch 这个命令,我们可以轻易的修订文件的日期与时间。并且也可以创建一个空的文件!

不过,要注意的是,即使我们复制一个文件时,复制所有的属性,但也没有办法复制 ctime 这个属性的。ctime 可以记录这个文件最近的状态 (status) 被改变的时间。无论如何,还是要告知大家我们平时看的文件属性中,比较重要的还是属于那个 mtime。我们关心的常常是这个文件的内容是什么时候被更改了。

Linux下,文件默认权限详解之umask命令

 当我们新建一个新的文件或目录时,我们很少会去了解它的默认权限是什么。Linux下,默认权限涉及到umask这个命令,umask就是指定目前使用者在创建文件或目录时需要减去的权限默认值。可以用底下的方式来得知umask:

[root@lmode ~]# umask
0022   《= 和一般权限有关的是后面三个数字
[root@lmode ~]# umask -S
u=rwx,g=rx,o=rx
第一种查阅方式就是直接输入umask,便可以看到数字型态的权限配置分数,另一种是加入-S(Symbolic)这个选项,就会以符号类型的方式来显示出权限。第一种umask 的四个数字有点特殊,第一个是特殊权限用的。我们先了解后面三个数字。

在默认权限的属性上,目录与文件是不一样的。x权限对目录是非常重要的,但是一般文件的创建则不应该有运行的权限,因为一般文件通常是用在数据的记录,当然不需要运行的权限了。因此,默认情况如下:
若使用者创建为文件则默认没有可运行( x )权限,只有 rw 这两个权限,用权限数字表示最大为666,默认权限如下:
-rw-rw-rw-
若使用者创建为目录,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,用权限数字即777,默认权限如下:
drwxrwxrwx
要注意的是,umask 的那组数字的后三个指的是该默认值需要减掉的权限。因为 r、w、x 权限分别对应的是 4、2、1 分,所以,也就是说,当要拿掉写的权限,umask那组数字相对应的要写上2,而如果要拿掉能读的权限,就要写上4,那么要拿掉读与写的权限,就要写上6,依次类推。

上面的例子中,umask后三位为022,所以user并没有被拿掉任何权限,不过group与others的权限被拿掉了2(也就是 w 这个权限),那么当使用者:
创建文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
创建目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x
上面例子的含义是,当创建文件时,该文件被创建后的默认权限是666-022=644。(其中022为mask默认后三位)而创建目录时,目录被创建后的默认权限是777-022=755。我们可以验证一下:
[root@lmode ~]# umask
0022
[root@lmode ~]# touch test1
[root@lmode ~]# mkdir test2
[root@lmode ~]# ll
-rw-r--r--  1 root root     0 Nov 26 22:51 test1
drwxr-xr-x  2 root root  4096 Nov 26 22:51 test2

umask的利用与修改
umask值设定的多少,影响着你新建文件或目录最终的权限属性。配置umask很简单,直接在umask后面输入相应的一组值即可。比如你要将umask设定为002,那么直接这么操作:

[root@iZ94aucqfjcZ ~]# umask 002
[root@iZ94aucqfjcZ ~]# touch test3
[root@iZ94aucqfjcZ ~]# mkdir test4
[root@iZ94aucqfjcZ ~]# ll
total 48
-rw-rw-r--  1 root root     0 Nov 26 23:01 test3
drwxrwxr-x  2 root root  4096 Nov 26 23:01 test4
实例:假设你的umask为 003 ,请问该umask情况下,创建的文件与目录权限是多少?
umask 为 003 ,所以拿掉的权限为 ——–wx,因此:

文件: (-rw-rw-rw-) - (--------wx) = -rw-rw-r--
目录: (drwxrwxrwx) - (--------wx) = drwxrwxr--
像上面的例子如果使用文件默认属性 666 与目录默认属性 777 来与 umask 进行相减的计算则很容易出错,以上面例题来看,如果使用默认属性相加减,则文件变成:666-003=663,亦即是 -rw-rw–wx ,这可是完全不对的。因为原本文件就已经去除 x 的默认属性了,而直接相减计算完则多了个x属性,很显然是错误的。所以,切忌直接将权限进行相加减。

在默认的情况中,root 的umask会拿掉比较多的属性,root 的 umask 默认是 022 ,这是基于安全的考量。至于一般身份使用者,通常他们的 umask 为 002 ,亦即保留同群组的写入权力。关于默认 umask 的配置可以参考 /etc/bashrc 这个文件的内容,不建议修改该文件,感兴趣可以去了解下。

-----------

Linux下,文件的隐藏属性

Linux下,单单ugo(user,group,others)合起来的九个权限就已经够让人抓狂了,又多了一个隐藏属性,对初学者来说很容易焦头烂额。不过,文件的隐藏属性对系统有很大的帮助。那么如何配置和检查这些隐藏的属性?

chattr(配置文件隐藏属性命令)

chattr命令只能在Ext2/Ext3的文件系统生效,其他文件系统可能无法支持这个命令。chattr命令的用法和参数如下:

[root@lmode ~]# chattr [+-=][ASacdistu] 文件或目录名称
 
选项与参数:
+   :添加某一个特殊参数,其他原本存在参数则不动。
-   :移除某一个特殊参数,其他原本存在参数则不动。
=   :配置一定,且仅有后面接的参数
 
A  :当配置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime将不会被修改,可避免I/O较慢的机器过度的存取磁碟。这对速度较慢的计算机有帮助。
 
S  :一般文件是非同步写入磁碟的,可查看sync相应命令,如果加上 S 这个属性时,当你进行任何文件的修改,该更动会『同步』写入磁碟中。
 
a  :当配置 a 之后,这个文件将只能添加数据,而不能删除也不能修改数据,只有root 才能配置这个属性。
 
c  :这个属性配置之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(对于大文件比较有用)。
 
d  :当 dump 程序被运行的时候,配置 d 属性将可使该文件(或目录)不会被 dump 备份。
 
i  :这个 i 可就很强大。它可以让一个文件『不能被删除、改名、配置甚至无法写入或新增数据!』对于系统安全性有相当大的帮助。只有 root 能配置此属性。
 
s  :当文件配置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了。
 
u  :与 s 相反的,当使用 u 来配置文件时,如果该文件被删除了,则数据内容其实还存在磁碟中,可以使用来救援该文件。
注意:属性配置常见的是 a 与 i 的配置值,而且很多配置值必须要身为 root 才能配置。

实例:创建一个新文件,并加入i参数

[root@lmode ~]# cd /tmp
[root@lmode tmp]# touch attrtest
[root@lmode tmp]# chattr +i attrtest
[root@lmode tmp]# rm -rf attrtest
rm: cannot remove `attrtest': Operation not permitted
从上面的实例可以看到,当一个文件添加了i属性后,连root这个超级管理员都没办法删除这个文件。这时,如果想删除文件,只能将i属性解除后删除。

实例:取消文件i属性

[root@lmode tmp]# chattr -i attrtest
[root@lmode tmp]# rm -rf attrtest
在系统的数据安全上面,chattr这个命令是很重要的。由于这些属性是隐藏属性,所以需要使用lsattr这个特殊命令才能看到。一般来说,i和a这两个属性比较常用,+i可以让一个文件无法被更动,对于需要强烈的系统安全的人来说,是非常重要的。而且,这两个属性需要root才能配置。

lsattr(显示文件隐藏属性)

下面介绍lsattr这个命令的用法和参数:

[root@lmode ~]# lsattr [-adR] 文件或目录
选项与参数:
-a :将隐藏档的属性也显示出来;
 
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
 
-R :连同子目录的数据也一并列出来。
实例:用lsattr查看属性

[root@iZ94aucqfjcZ tmp]# touch test
[root@iZ94aucqfjcZ tmp]# chattr +aij test
[root@iZ94aucqfjcZ tmp]# lsattr test
----ia---j---e- test
使用chattr配置属性后,可以用lsattr来查阅隐藏的属性。

--------------------------

Linux下,文件的特殊权限: SUID, SGID, SBIT详解



在Linux系统中,只要一提到关于权限,那一般就是rwx这三个读、写、运行权限。但是,只要你足够细心,你会发现/tmp和/usr/bin/passwd的权限很特殊,如下:

[root@lmode tmp]# ls -ld /tmp ; ls -l /usr/bin/passwd
drwxrwxrwt. 3 root root 12288 Dec  6 20:19 /tmp
 
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
从上面可以看到,除了rwx权限外,/tmp还多了个t权限,而/usr/bin/passwd则多了个s权限。下面详细介绍这些特殊权限。

SET UID

当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID 的特殊权限。

基本上SUID有这样的限制与功能:

SUID 权限仅对二进位程序(binary program)有效;
 
运行者对于该程序需要具有 x 的可运行权限;
 
本权限仅在运行该程序的过程中有效 (run-time);
 
运行者将具有该程序拥有者 (owner) 的权限。
上面的总结有点抽象,举个例子说明会更好理解。 我们的 Linux 系统中,所有帐号的密码都记录在 /etc/shadow 这个文件里面,这个文件的权限为:

---------- 1 root root 1169 Jul  1 15:52 /etc/shadow
意思是这个文件仅有root可读且仅有root可以强制写入而已。

既然这个文件仅有 root 可以修改,那么当Liunx下还有 lmode 这个一般帐号时,lmode使用者能否自行修改自己的密码呢? 答案是肯定的,你可以使用passwd这个命令来修改自己的密码。

那么,这和上面叙述的有没有冲突?明明/etc/shadow就不能让lmode这个一般帐户去存取密码的,为什么lmode却还能修改密码,其实这就是SUID的功能了。

可以简单的归纳为:
1.lmode 对于 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 lmode 能运行 passwd;
2.passwd 的拥有者是 root 这个帐号;
3.lmode 运行 passwd 的过程中,会『暂时』获得 root 的权限;
4./etc/shadow 就可以被 lmode 所运行的 passwd 所修改。

但是,如果lmode想用cat去读取/etc/shadow时,则是被禁止的。因为cat不具有SUID的权限。这里要在强调的是,SUID仅用作二进制(binary program)文件上,而不能用在脚本文件(shell script)上。因为脚本文件只是将很多的二进制命令集中一起来运行。所以SUID权限部分,还是得看脚本文件里面二进制运行文件是否具有相应权限,而不是去看脚本文件本身。

Set GID

当 s 标志在文件拥有者的 x 权限上时为 SUID,那 s 在群组的 x 权限位置时则称为 Set GID, 简写SGID。可以通过命令来查看具有SGID权限的文件:

[root@lmode ~]# ls -l /usr/bin/locate
-rwx--s--x 1 root slocate 23856 Mar 15 2015 /usr/bin/locate
与 SUID 不同的是,SGID 可以针对文件或目录来配置。如果是对文件来说, SGID 有如下的功能:

SGID 对二进制程序文件有用;
 
程序运行者对于该程序来说,需具备 x 的权限;
 
运行者在运行的过程中将会获得该程序文件所属群组的权限。
举例来说,上面的 /usr/bin/locate 这个程序可以去搜寻 /var/lib/mlocate/mlocate.db 这个文件的内容,mlocate.db 的权限如下:

[root@lmode ~]# ll /usr/bin/locate /var/lib/mlocate/mlocate.db
-rwx--s--x 1 root slocate 23856 Mar 15 2007 /usr/bin/locate
 
-rw-r----- 1 root slocate 3175776 Sep 28 04:02 /var/lib/mlocate/mlocate.db
与 SUID 非常的类似,若我使用 lmode 这个帐号去运行 locate 时,那 lmode 将会暂时取得 slocate 群组的权限, 因此就能够去读取 mlocate.db 这个文件的内容。

除了 二进制文件 之外,事实上 SGID 也能够用在目录上,这也是非常常见的一种用途。 当一个目录配置了 SGID 的权限后,他将具有如下的功能:

使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。

Sticky Bit

当t标志在文件其它者x权限位上时, 则称为Sticky Bit,简写为SBIT。 SBIT 目前只针对目录有效,对于文件已经没有效果了。 SBIT 对于目录的作用是:

当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;
 
当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
换句话说:当甲这个使用者在 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示『甲使用者对该目录内任何人创建的目录或文件均可进行 "删除/更名/搬移" 等动作。』 不过,如果将 A 目录加上了 SBIT 的权限时, 则甲只能够针对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。

举例来说,我们的 /tmp 本身的权限是『drwxrwxrwt』, 在这样的权限内容下,任何人都可以在 /tmp 内新增、修改文件,但仅有该文件目录创建者与 root 能够删除自己的目录或文件。这个特性也是挺重要的。你可以这样做个简单的测试:

以 root 登陆系统,并且进入 /tmp 当中;
touch test,并且更改 test 权限成为 777 ;
以一般使用者登陆,并进入 /tmp;
尝试删除 test 这个文件。 

-----------------------

Linux下,SUID/SGID/SBIT 的权限配置

之前介绍过SUID与SGID的功能,那么如何配置文件使成为具有SUID与SGID的权限?这就要涉及到Linux下数字更改权限的方法。数字型态更改权限的方式为三个数字的组合,而SUID/SGID/SBIT 权限配置则是在这三个数字之前加上一个数字,最前面的那个数字就代表这几个权限:

4 为 SUID
2 为 SGID
1 为 SBIT
假设要将一个文件权限改为『-rwsr-xr-x』时,由于 s 在使用者权限中,所以是 SUID ,因此, 在原先的 755 之前还要加上 4 ,
也就是:『 chmod 4755 filename 』来配置。

下面这个例子为了方便使用同一个文件来配置,不过要注意的是,SUID是用在文件上而SBIT是用在目录上。

[root@lmode ~]# cd /tmp
[root@lmode tmp]# touch ppsszz
[root@lmode tmp]# chmod 4755 ppsszz ; ls -l ppsszz
-rwsr-xr-x 1 root root 0 Dec  9 23:15 ppsszz
 
[root@lmode tmp]# chmod 6755 ppsszz ; ls -l ppsszz
-rwsr-sr-x 1 root root 0 Dec  9 23:15 ppsszz
 
[root@lmode tmp]# chmod 1755 ppsszz ; ls -l ppsszz
-rwxr-xr-t 1 root root 0 Dec  9 23:15 ppsszz
 
[root@lmode tmp]# chmod 7666 ppsszz ; ls -l ppsszz
-rwSrwSrwT 1 root root 0 Dec  9 23:15 ppsszz
最后一个例子就要特别小心。怎么会出现大写的 S 与 T 呢?不都是小写的吗? 因为 s 与 t 都是取代 x 这个权限的,但是你有没有发现,我们是下达 7666 。也就是说, user, group 以及 others 都没有 x 这个可运行的标志( 因为 666 ),所以,这个 S, T 代表的就是空的。怎么说? SUID 是表示『该文件在运行的时候,具有文件拥有者的权限』,但是文件 拥有者都无法运行了,哪里来的权限给其他人使用?当然就是空的。

而除了数字法之外,你也可以透过符号法来处理。其中 SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是 o+t 。来看看如下的范例:

#配置权限为-rws--x--x
[root@lmode tmp]# chmod u=rwxs,go=x ppsszz ; ls -l ppsszz
-rws--x--x 1 root root 0 Dec  9 23:15 ppsszz
 
[root@lmode tmp]# chmod g+s,o+t ppsszz ; ls -l ppsszz
-rws--s--t 1 root root 0 Dec  9 23:15 ppsszz

Monday 29 July 2024

专访王飞凌:美中“秩序之争”究竟是在争什么?

 什么是"秩序之争"?美中两国构想的国际秩序有哪些本质不同?乔治亚理工大学教授王飞凌博士在接受美国之音《纵深视角》的专访时详细论述了这些问题。

中国想要什么样的国际秩序?

中国国家主席习近平出席2017年度驻外使节工作会议时提出"当今世界正在经历百年未有之大变局"。这一说法此后在习近平本人及中国官方的论述中反复出现。分析指出,"百年未有之大变局"一说是对北京重塑国际秩序野心的一次显性总结,而这种野心也早已隐含在"一带一路"战略,中国在南中国海和台海的行为,中国与俄罗斯、朝鲜、伊朗等政权的关系等多个层面。

乔治亚理工大学教授王飞凌认为,中国想要建立的国际秩序是"中国传统的天下一统的中华秩序式的世界帝国"。

他在接受美国之音《纵深视角》专访时将这种国际秩序描述为:"一个权力中心号令一切,不见得是西方的殖民式的统治,也不见得是中国过去的朝贡式统治,但是总体上一点,就是反现行国际秩序,以中央集权,一个声音、一个权威,来取代各国分权分立、互相竞争这样一个局面。"

中国官方反驳中国企图重塑国际秩序的说法。中共中央对外联络部部长刘建超今年年初在美国对外关系委员会发表演讲时说:"中国是现行国际秩序的创建者、受益者、维护者。中国不寻求改变现行国际秩序,更不会另起炉灶,再搞一套所谓新秩序。"

长期关注国际秩序演化,著有《中华秩序》、《中国记录》、《中华博弈》三部曲的王飞凌认为,中国确实是现行国际秩序的受益者,"中国过去三、四十年的进步和繁荣与现行国际秩序密切相关,不可能在任何其他的国际秩序下实现"。但是中国统治者想要改变现行国际秩序的证据不胜枚举,这说明中国政府和中国人民的利益并不一致。

"帮助中国崛起的恰恰是中国政府口中的敌人,这就说明中国政府和中国人民之间有一条鸿沟,"王飞凌说,"这个政权其实从骨子里看,并不是为了中国人民而做什么国际上的事情,而是为了政权的需要,政权的最终目标是要在全世界建立一个中华秩序式的世界帝国,那样它就最终安全了。"

王飞凌教授认为,中国政府改变现行国际秩序的诉求与其政治制度组成结构有关。"在人类历史上,几乎所有的威权独裁政权的统治者,最终的梦想都是成为统治世界的霸主,就是天下一统。而考察历史你会发现,建立世界大帝国的中华统治者们最后的结局都很悲惨。但是他必须要这么做,就像被诅咒了一样,"王教授说。

不存在多中心的威权体系,"新轴心"内斗更残酷?

中国重塑国际秩序的关键一环,在于加强自己的"朋友圈"。美国众议院议长约翰逊7月8日在哈德逊研究所的演讲中说:"今天我们不再像苏联时期那样面临一个主要敌人,而且到目前为止,幸运的是,我们还没有看到一种新的(如二战时期)的三国同盟,但我们确实看到一些国家公开结盟对抗美国。这是一个相互关联的威胁网络。我将其称为中国领导的轴心,由俄罗斯、伊朗、朝鲜、委内瑞拉甚至古巴的伙伴政权组成。"

王飞凌认为北京打造"新轴心"只是为了满足反美的一时之需,威权独裁政体之间不可能存在持续的平等和伙伴关系,莫斯科、平壤、德黑兰未来不会轻易顺服北京,他们之间为了定出一个中心必将有一个"摊牌",而这种内斗将更加血腥和残酷。

王教授说,"就像中国过去也发生过很多次,就是几个起义军领袖和造反领袖,一开始联盟起来,把旧皇帝推倒。推倒以后,他们之间的屠杀更残酷、更野蛮、更狠毒。因为他们一定要决定谁是真正的老大。多中心的威权体制是不可能的。"

中国外交部发言人林剑7月12日批评约翰逊提出中国试图打造"新轴心"的说法。他说,"美方的言论罔顾事实,大肆渲染'中国威胁',充斥着冷战思维和意识形态偏见,实质上是在为转移国内矛盾、加大对华遏制打压寻找借口,中方对此坚决反对。"

美国想要什么样的国际秩序?

王飞凌在《纵深视角》的专访中对比了美国所维护的自由主义国际秩序和中国想要打造的国际秩序的不同。他表示,美国所追求的国际秩序恰恰在于"去中心化"。

"美国的目标不在于建立一个单一领导力或者绝对领导力的世界中心去统治世界,"王教授说,"美国维护的是分权分立的国际关系体系。"

中国官方常常将美国维护"基于规则的国际秩序"与"美国霸权"等同起来。新华社去年5月发表题为《霸道的"规则" 霸权的"秩序"——起底美国所谓"基于规则的国际秩序"》一文,称"美国口中所谓的'规则',就是其说一不二的霸道规则;所谓的'秩序',就是'美国优先'的霸权秩序。"

王飞凌说:"美国有时候的举措行为,确实有点霸权主义的味道。但美国这个霸权,最多也就有点像中国春秋战国时代的那种所谓称霸而已,根本不是要去统治任何人,或者规范所有人。这个跟中国政府心目中想要建立的'世界大同'、'全世界人民大团结'完全是两回事。"

王教授指出,世界历史上拥有超强实力的国家几乎都不可遏制地想要建立统治世界的大帝国,而美国是一个特例。

究其原因,王教授分析道, "我觉得这是美国国内根深蒂固的英美传统文化和政治制度的特点造成的。它对这种集权,对一个中心,不仅没有兴趣,甚至很反感、警惕。在国内国外都是这样。所以它要维护的是这种分权分立的国际关系体系。"

王教授认为,分权分立的国际关系体系的主要优势在于鼓励多样性,鼓励不同制度之间的竞争,这带来"人类总体上的优化"。而中国共产党利用专制制度集中大量资源,结合中国廉价的人力物力和西方的先进技术,在不受监督的情况下推行自己的国际战略,有可能造成"落后制度战胜先进制度,把人类的文明往后推"。

"共产党的优越性会带来中国和世界的次优化," 王飞凌强调说,"所以西方也好,全世界也好,包括中国人民也好,真的必须付出全部努力来关注美中博弈,才能避免成为中国政府的牺牲品。"

牛逼的台湾

 人心向背是决定台湾去留的决定性力量。这有什么错吗?台湾人民又不是弱智。
      以色列那么小,动不动就牵着世界鼻子走,这是地球人都知道的事情。新加坡只是一个小小的城市,可是,他的领导人一旦发声,全世界都静悄悄地听。台湾不也是这样的情况嘛。台湾不是国家,只是一个“地区”,可是,份量却是如此厚重。台湾一旦着凉,全世界就会发烧。台湾在世界上的份量,大于整个俄罗斯。美国人不把俄罗斯当回事,可是,对台湾却高看一眼,难道不是吗?
      蒙古、印尼、孟加拉国、尼日利亚、哈萨克斯坦,面积那么大,人口那么多,可是在地球上却没有存在感。难道不是吗?
       请看大屏幕:
       台湾面积只有3.6万km²,就是海南岛+上海。人口只有2300万,就一个上海市。可是,以下数字,真米实曲,令世界华人骄傲,令大陆政府无地自容。


     1、电子:
      台湾是名副其实的“电子岛”,份额竟然占全球75%的市场,合20000亿美元,著名的企业有广达电脑、鸿海精密、任宝电脑、和硕联合等。大陆占不到台湾的一个零头。

      2、台积电:
      控制全世界60%的半导体芯片的制造,市值更是进入了全球前10名,跟苹果,亚马逊,微软等公司肩并肩的巨头。当三星为5nm量产而努力攻关时,台积电已经做到量产3nm。在世界上有很大的领先优势。

        3、精密仪器:
        数控机床、磨床、加工中心等机械设备的制造、以及各种零部件的制造。特别是台湾在精密仪器领域十分先进。早在2014年,台湾的
数控机床产品出口额就是世界第四,仅次于日本、德国、和瑞士,大陆这么多的人,那么雄厚的基础,却挂不上号

        4、新能源:
        太阳能发电产世界第二。在全球20家光伏企业当中,台湾就占7家,市场比例达到了20%。风力发电独领风骚,5MW级风力发电机,世界首屈一指。

       5、教育方面:
       台湾人民受高等教育的比例是全球之首,大学密度全球排前三,2300万人口竟然有156所大学,入学率高达97%,大学教育完全普及,而且做到贫困生完全免费。台湾有16所大学登上QS全球排行榜,排名前500名内的多达11所之多。这些成绩,大陆无地自容。

        6、医疗方面:
        台湾医疗水平十分发达,在亚洲可跟日本、新加坡、以色列平肩,全球前300个大医院中就有15家,仅次于美、德国。全民免费医疗,从摇篮到坟墓,连护工工资、住院吃饭也由政府埋单。

        7-全民平等:
         哪怕是囚犯,老了就是老了,养老金与下台总统一样多,更别说农民、工人、职员了,养老金完全一样。特别是农民,还有任何其他人没有的“农民津贴”。

        8-清廉指数:
        在全世界180个排名中,台湾是第25名,而美国仅仅是27名,可怜大陆是65名。官员财产必须公开。

         9-全民福利:
         台湾每个财年年终,把财政结余数人头发红包给每个公民,2023年出息每人发压岁钱6000新台币。台湾的税收2022年“厉害”到财政收入占比仅占GDP的13.2%。成功再创新低,要知道大陆是35%呢,连美国也比台湾高一倍以上,也就是说,台湾税率是世界最低的国家或地区之一。
        全民免费养老,50万失能老人,国家完全包揽。免费教育达12年。生育津贴更是令世界眼馋。2022年8月,台湾省开始大幅度提高生育补贴。8月份开始,台湾省家庭生育一个孩子,孩子的0到5岁期间,每月能够得到5000新台币的生育补贴,大约折合1150多元人民币。与大陆生孩子遭巨额罚款、强制从孕妇肚子掏娃娃形成鲜明对照。

        10-食品安全:
         台湾食品,全世界最为安全,标准比美国还高。美国猪肉、牛肉要进入台湾,都不那么容易。养猪、养牛、养鸡,不但不允许有害健康的添加剂、激素、瘦肉精,而且连晒太阳、放风、洗澡、玩耍的时间都有规定,不要说人,这些动物的抑郁情绪,都在预防之列。根本不存在农药残留、化肥面源污染问题。塑料纸白色污染是全世界处理最彻底的。

       11-世界尊重:
        中华民国,74年前就进入历史。可是,全世界所有国家至今对待持有“中华民国护照”的人,入境一律免签这份至高无上的荣誉,美国人都不曾享有。相形之下,大陆只有7个国家垃圾国家免签。
      ……,……,……。
      在这种情况下,你大陆要把台湾“统一”过来,谈何容易?美国承认一个中国,不支持台湾独立,这是事实。可是,美国与台湾是没有制度隔阂的,台湾的三民主义渊源有自,就是林肯总统的《葛底斯堡演说》,台湾的“五权宪法”就是美国的“三权分立”之变式。在台湾与大陆博弈中,小小台湾把美国人玩的团团转,令大陆十分被动。
      行有不得,反求诸己。大陆政府,你要好好想一想。如果台湾人民真的生活在水深火热之中,统一用得着这样吃力吗?你挡都挡不住祂回归的步伐。当年坚持一个中国,誓死捍卫国家统一的蒋经国先生对大陆说,把福建给我治理几年,如果比你们管理差,台湾自动取消国号,统一于中华人民共和国,如果比你们现在治理的好,那就另当别论。请问:大陆为什么不敢答应呢?

electron-vue 快速入门

 electron-vue

electron-vue官网:点击访问

electron官网:点击访问

搭建

使用vue init确保安装@vue/cli @vue/cli-init

1
2
3
4
5
6
7
8
9
# 安装脚手架样板代码
vue init simulatedgreg/electron-vue my-project

# 安装依赖并运行你的程序
cd my-project

yarn # 或者 npm install

yarn run dev # 或者 npm run dev

踩坑

  • npm install 阶段遇到了electron安装超时的问题,有两种方法解决
    1. 安装cnpm运行cnpm install
    2. 设置npm代理
  • npm run dev 阶段遇到了process is not defined
    1. 删除node_modules 安装10.x.x版本的node,我本地是12.0.0,通过n模块安装的10.16.0 实现两个版本node共存。
    2. 按照issues里面的做法,会导致其他问题,最稳定的就是降低自己的node版本到10.x.x

技术细节

主进程和渲染进程

介绍

Electron 运行 package.json 的 main 脚本的进程被称为主进程。 在主进程中运行的脚本通过创建web页面来展示用户界面。 一个 Electron 应用总是有且只有一个主进程。

由于 Electron 使用了 Chromium 来展示 web 页面,所以 Chromium 的多进程架构也被使用到。 每个 Electron 中的 web 页面运行在它自己的渲染进程中。更多

通信

使用ipcRendereripcMain 模块可以实现通信.

Electron-Vue 环境搭建 + 基本入门 + 软件打包


electron是一个使用JS,CSS,HTML构建跨平台的桌面应用程序的框架,微软的VScode就是使用该技术开发.

环境搭建

  1. 安装node环境

  2. 由于使用的是electron-vue脚手架工具,首先要安装vuecli

1
2
3
npm install -g @vue/cli
# OR
yarn global add @vue/cli
  1. 起步

vue init阶段会出现一些项目基本选项,按照自己需求选择就好,打包工具选择elelctron-builder之后会用到它打包和更新


1
2
3
4
5
6
7
8
9
10
11
vue init simulatedgreg/electron-vue my-project

cd my-project

npm install
# OR
yarn

npm run dev
# OR
yarn dev
  1. 出现以下界面及成功

img

img

注意事项

  • npm install时候可能会由于网络原因导致包安装失败,使用cnpm或者nrm切换软件源
  • npm install时候可能会遇到electron下载失败情况,有两种解决方法
    1. 在项目根目录下新建.npmrc或者.yarnrc文件,里面写入
      1
      electron_mirror=http://npm.taobao.org/mirrors/electron/
    2. 淘宝镜像下载对应系统和版本的electron包到electron缓存目录
      1
      mac/win/liunx: 当前用户名/.electron/ 
  • windows用户在npm install时候会遇到node-gyp错误,这是由于你的系统没有安装正确到构建工具,可以使用windows-build-tools一键安装所有到所需工具包
1
2
3
npm install --global windows-build-tools
# OR
yarn global add windows-build-tools
  • npm run dev时候可能会遇到process is not defined错误,这是由于node10.X版本导致的,有两种解决方法
    1. 升级node版本到12.X
    2. 打开项目/src/index.ejs,修改!process.browser!require('process').browser

基础入门

插件使用

插件使用和vue一样,npm/yarn直接装包就可以,脚手架自带electron-vuex可以实现主进程与渲染线程共享数据,推荐使用

css预处理器

假设我们使用less作为我们到css预先处理,需要安装less并且修改webpack配置

  1. 安装
1
2
3
npm install -D less less-loader
# OR
yarn add -D less less-loader
  1. 打开.electron-vue/webpack.renderer.config.js,在less rule里面加入less-loader
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
test: /\.less$/,
use: [
{
loader: "vue-style-loader"
},
{
loader: "css-loader",
options: {
importLoaders: 1
}
},
{
loader: "postcss-loader",
},
{
loader: "less-loader",
options: {
javascriptEnabled: true,
modifyVars: {
'text-primary-color': '#293A4D', // 主要'
'text-minor-color': 'rgba(41, 58, 77, 0.45)', // 次要'
'text-highlight-color': '#1890FF' // 高亮
}
}
}
]
}

静态资源使用

在项目根目录下的static目录,可以存放主进程和渲染进程都可以访问到的静态资源,electron-vue提供一个__static全局变量来快速访问此目录,而且开发环境和生产都可以使用。

  1. vue模版使用
1
2
3
4
5
6
7
8
9
10
11
12
<template>
<img v-bind:src="imageUrl">
</template>

<script>
export default {
data () {
// 注意 路径的起始是 `static/`
return { imageUrl: 'static/imgs/unsplash.png' }
}
}
</script>

Awesome-list


My Awesome List

Code

blog/website

Document

Resource/Demo

skill

library/repositories

Entertainment

Video

Game

Tools

Chrome Extensions

下面内容来自阮一峰老师

实用信息

Sunday 28 July 2024

为什么有时候用whereis命令会找到一些已经删除的文件或者找不到一些刚刚创建的文件?

 whereis命令搜寻的速度会比较快?这是因为 Linux 系统会将系统内的所有文件都记录在一个数据库文件里面,而当使用 whereis 或者 locate 时,都会以此数据库文件的内容为准。所以,有时候用whereis命令,会找到一些已经删除的文件,或者找不到一些刚刚创建的文件,这是因为数据库还没更新导致的。默认情况下,该数据库文件是一星期更新一次。


whereis命令搜寻的速度会比较快?这是因为 Linux 系统会将系统内的所有文件都记录在一个数据库文件里面,而当使用 whereis 或者 locate 时,都会以此数据库文件的内容为准。所以,有时候用whereis命令,会找到一些已经删除的文件,或者找不到一些刚刚创建的文件,这是因为数据库还没更新导致的。默认情况下,该数据库文件是一星期更新一次。

本文来源于:技术拉近你我!。
原文标题: 3.6Linux下whereis命令
原文链接:https://coderschool.cn/1520.html
码字不容易,将心比心,转载请注明出处!

Linux上,统计某个字符串的个数

在 Linux 系统下,有时候,我们可能要对一个日志文件进行分析。比如,分析日志文件中某个单词或者某个特殊字符串出现了多少次。

对于匹配统计,一般用到正则方法,下面总结了几个统计字符串个数的方法。

方法一:使用 grep 命令

1
grep -o '字符串' file |wc -l

方法二:使用awk命令进行统计

1
awk -v RS="@#$j" '{print gsub(/字符串/,"&")}' file

方法三:另一种使用awk命令进行统计的方法

1
awk  '{s+=gsub(/字符串/,"&")}END{print s}' file

备注:上面的 file 是要统计的文件名。上面的字符串换成你具体要统计的内容。

awk简介

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。

简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

关于 awk 命令可以参考:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

实例

假设现在一个文件里面的内容如下:

1
2
3
4
5
6
[root@ihh logs]# cat test.txt 
userid:121212
userid:232323
userid:3434
username:3434
username:4343

然后我要统计 userid 在 test.txt 文件里出现了多少次,那么根据上面提供的命令,可以这样操作:

1
2
3
4
5
6
7
8
[root@ihh logs]# grep -o 'userid' test.txt |wc -l
3
 
[root@ihh logs]# awk -v RS="@#$j" '{print gsub(/userid/,"&")}' test.txt 
3
 
[root@ihh logs]# awk  '{s+=gsub(/userid/,"&")}END{print s}' test.txt 
3