linux:文件及文件夹管理
http://blog.csdn.net/pipisorry/article/details/39854265
查看用户的信息
pika:~$id pika
uid=1000(pika) gid=1000(pika) groups=1000(pika),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),125(docker)
文件夹与路径
cd:变换目弽
pwd:显示弼前目弽
mkdir:建立一个新的文件夹
-m, --mode=模式。设定权限<模式> (相似 chmod),而不是 rwxrwxrwx 减 umask
-p, --parents 能够是一个路径名称。此时若路径中的某些文件夹尚不存在,加上此选项后,系统将自己主动建立好那些尚不存在的文件夹,即一次能够建立多个文件夹;
-v, --verbose 每次创建新文件夹都显示信息
rmdir:删除一个空的文件夹
切换文件夹命令cd
cd [文件夹名] :切换当前文件夹至dirName (Change the current directory to DIR)
1. cd / 进入系统根文件夹
2. cd .. 返回上一级文件夹
3. cd ~ 或cd 当前用户主文件夹
(注意:“当前用户主文件夹”和“系统根文件夹”是两个不同的概念)
4. cd - 返回进入此文件夹之前所在的文件夹
. 代表此层文件夹
.. 代表上一层文件夹
- 代表前一个工作文件夹
~ 代表“眼下使用者身份”所在的主文件夹
~account 代表 account 这个使用者的主文件夹(account是个帐号名称)
文件与文件夹管理
删除与移动: rm, mv
rm -rf dir #删除文件夹下全部文件
rm -rf删除不了文件夹
#rm -rf 推荐系统1/
rm: cannot remove ‘推荐系统1/’: Directory not empty
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" width="440" height="81" />
在删除某个文件夹时,若有进程往该文件夹写入数据,则须要先停止该进程的服务(或kill掉该进程),所以我们的一些Shell代码在卸载或删除文件夹时就存在失败的可能。
[最暴力的 rm -rf 命令竟然删除文件夹失败了。为什么?]
只是更可能是文件系统出错了(lz就是,可能是由于之前删除未完毕时取消了吧):
Apparently there was a corruption in the filesystem that was preventing me from deleting the directory. Here are the steps I performed. Your mileage may vary...
Boot into archlinux live CD.
btrfsck --repair /dev/sda1
mount -t btrfs /dev/sda1 /mnt
rm -Rf /mnt/__active/home/$USER/.config/chromium~
umount /mnt
reboot
Warning: There are risks in performing the btrfsck --repair command. I suggest backing up any essential data prior to running that command. Read the link provided by rebootl above for more information on the risks.
这种话,最好开机时进行disk检查。如windows开机时设置检查就能够检查出错误。这样就能够删除这个文件夹了。
[ id=185824">[Solved] rm: cannot remove DIRECTORY: Directory not empty
[cannot delete file with rm -rf]
mv
mv [-fiu] source destination
mv [options] source1 source2 source3 .... directory
选项与參数:
-f :force 强制的意思,假设目标文件已经存在。不会询问而直接覆盖;
-i :若目标文件 (destination) 已经存在时。就会询问是否覆盖!
-u :若目标文件已经存在,且 source 比較新,才会更新 (update)
文件拷贝和备份cp
cp [-adfilprsu] 来源文件(source) 目标文件(destination)
如sudo cp a a.$(date +%Y-%m-%d)
cp [options] source1 source2 source3 .... directory
选项与參数:
-a :相当于 -dr --preserve=all 的意思。至于 dr 请參考下列说明;(经常使用)
-d :若来源文件为链接文件的属性(link file),则复制链接文件属性而非文件本身;
-f :为强制(force)的意思,若目标文件已经存在且无法打开,则移除后再尝试一次;
-i :若目标文件(destination)已经存在时,在覆盖时会先询问动作的进行(经常使用)
-l :进行硬式链接(hard link)的链接文件创建,而非拷贝文件本身;
-p :连同文件的属性(权限、用户、时间)一起复制过去,而非使用默认属性(备份经常使用);
-r :递回持续复制。用于文件夹的复制行为;(经常使用)
-s :复制成为符号链接文件 (symbolic link)。亦即“捷径”文件;
-u :destination 比 source 旧才更新 destination,或 destination 不存在的情况下才复制。
--preserve=all :除了 -p 的权限相关參数外,还增加 SELinux 的属性, links, xattr 等也复制了。
最后须要注意的。假设来源文件有两个以上,则最后一个目的文件一定要是“文件夹”才行!
RSync实现文件备份同步
rsync -aXS /var/lib/docker/. DIR
-a, --archive 归档模式。表示以递归方式传输文件。并保持全部文件属性
取得文件的文件名称与文件夹名
basename /etc/sysconfig/network
network 获取最后的文件名称。
dirname /etc/sysconfig/network
/etc/sysconfig 获取的变成文件夹名了
也能够在脚本中运行着用../../$(basename $DIR)
文件内容查阅
基本指令
- cat 由第一行開始显示文件内容
- tac 从最后一行開始显示,能够看出 tac 是 cat 的倒着写!
- nl 显示的时候,顺道输出行号!
- more 一页一页的显示文件内容
- less 与 more 相似,可是比 more 更好的是,他能够往前翻页!
- head 仅仅看头几行
- tail 仅仅看尾巴几行
- od 以二进制的方式读取文件内容!
cat 由第一行開始显示文件内容
cat (concatenate)
选项与參数:
-A :相当于 -vET 的整合选项。可列出一些特殊字符而不是空白而已。
-b :列出行号,仅针对非空白行做行号显示。空白行不标行号。
-E :将结尾的断行字符 $ 显示出来;
-n :打印出行号。连同空白行也会有行号。与 -b 的选项不同;
-T :将 [tab] 按键以 ^I 显示出来。
-v :列出一些看不出来的特殊字符
Note: linux中的不可见字符有:^I表示一个tab符。$表示一个回车符,^M$表示windows下的回车换行符。
同一时候查看文件头10行和尾10行
cat file| (head && tail)
[How to read first and last line from cat output?]
vim 使用注意事项
查看文件类型和编码file
$ file -i 50万条.csv
50万条.csv: text/plain; charset=iso-8859-1
pipi@pipicmp:~/files/DATASETS/深圳一卡通数据$ file -i 50万条1.csv
50万条1.csv: text/plain; charset=utf-8
语系编码转换iconv
iconv选项
-f, --from-code=名称 原始文本编码
-t, --to-code=名称 输出编码
-l, --list 列举全部已知的字符集
-c 从输出中忽略无效的字符
-o, --output=FILE 输出文件
-s, --silent 关闭警告
--verbose 打印进度信息
递归转换(包含子文件夹)
find default -type d -exec mkdir -p utf/{} \;
find default -type f -exec iconv -f GBK -t UTF-8 {} -o utf/{} \;
[linux-利用iconv批量转换GBK文件到UTF-8编码方法]
DOS 与 Linux 的断行字符
Note: Unix系统里,每行结尾仅仅有"<换行>"。即"\n"。Windows系统里面。每行结尾是"<回车><换行>",即"\r\n";Mac系统里。每行结尾是"<回车>"。一个直接后果是。Unix/Mac系统下的文件在Windows里打开的话。全部文字会变成一行。而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
要安装:sudo apt-get install -y dos2unix
$
dos2unix [-kn] file [newfile]
$ unix2dos [-kn] file [newfile]
选项与參数:
-k :保留该文件原本的 mtime 时间格式 (不更新文件上次内容经过修订的时间)
-n :保留原本的旧文件。将转换后的内容输出到新文件。如: dos2unix -n old new
将 man_db.conf 转成 Linux 断行字符。并保留旧文件,新文件放于 man_db.conf.linux
$ dos2unix -k -n man_db.conf man_db.conf.linux
打开文件的默认命令
打开全部文件方法:
在Ubuntu下,当须要打开其它格式文件时,咱们通常做法是进入到文件所在的文件夹。双击打开,非常影响效率。其实,能够通过命令xdg-open打开这些格式文件,甚至是网页,像打开文件一样简单。
xdg-open会选择合适的程序打开指定文件。跟双击打开效果一样。
$ xdg-open filename &
$ xdg-open ***.mp3
$ xdg-open http://baidu.com
具体操作例如以下:
xdg-open { file | URL }
xdg-open { --help | --manual | --version }
通过快捷键Ctrl+Alt+T能够打开shell,F11能够全屏显示(Alt+F9最小化窗体,Alt+F10最大化/恢复窗体),再辅予xdg-open命令,极大降低了鼠标操作,也大大提升了效率。
打开 .doc .docx .xls .xlsx .ppt .pptx
libreoffice filename &
打开pdf文件
evince filename.pdf &
Note: 忘了打&能够 Ctrl+z,然后打bg回车;文件名称中含空格要打成'\ '
创建新文件命令touch
touch myproject/settings/{__init.py,dev.py,prod.py,test.py}
Note:{...}能够创建多个文件
命令与文件的查询
在 Linux 以下也有相当优异的搜寻指令!
通常 find 不非经常常使用的。由于速度慢之外。 也非常操硬盘!一般我们都是先使用 whereis 或者是 locate 来检查。假设真的找不到了。才以 find 来搜寻!
为什么呢?由于 whereis 仅仅找系统中某些特定文件夹以下的文件而已。locate 则是利用数据库来搜寻文件名称。当然两者就相当的高速。 而且没有实际的搜寻硬盘内的文件系统状态
which (寻找“可运行文件”)
# which [-a] command
-a :将全部由 PATH 文件夹中能够找到的指令均列出,而不止第一个被找到的指令名称
whereis (由一些特定的文件夹中寻找文件文件名称)
# whereis [-bmsu] 文件或文件夹名
选项与參数:
-l :能够列出 whereis 会去查询的几个主要文件夹而已
-b :仅仅找 binary 格式的文件
-m :仅仅找在说明文档 manual 路径下的文件
-s :仅仅找 source 来源文件
-u :搜寻不在上述三个项目当中的其它特殊文件
# whereis passwd # 全部的文件名称通通列出来!
# whereis -m passwd # 仅仅有在 man 里面的文件名称才抓出来!
locate / updatedb
# locate [-ir] keyword
选项与參数:
-i :忽略大写和小写的差异。
-c :不输出文件名称。仅计算找到的文件数量
-l :仅输出几行的意思。比如输出五行则是 -l 5
-S :输出 locate 所使用的数据库文件的相关信息,包含该数据库纪录的文件/文件夹数量等
-r :后面可接正則表達式的显示方式
find文件查找命令
文件与文件夹的默认权限与隐藏
Linux文件属性
在你以root的身份登入Linux之后,下达ls -al 看看。会看究竟下的几个咚咚:
[root@www ~]# ls -al
total 156
drwxr-x--- 4 root root 4096 Sep 8 14:06 .
drwxr-xr-x 23 root root 4096 Sep 8 14:21 ..
-rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg
-rw------- 1 root root 199 Sep 8 17:14 .bash_history
-rw-r--r-- 1 root root 24 Jan 6 2007 .bash_logout
-rw-r--r-- 1 root root 191 Jan 6 2007 .bash_profile
-rw-r--r-- 1 root root 176 Jan 6 2007 .bashrc
-rw-r--r-- 1 root root 100 Jan 6 2007 .cshrc
drwx------ 3 root root 4096 Sep 5 10:37 .gconf <=范例说明处
drwx------ 2 root root 4096 Sep 5 14:09 .gconfd
-rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log <=范例说明处
-rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog
[ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ][ 7 ]
[ 权限 ][连结][拥有者][群组][文件容量][ 改动日期 ][ 檔名 ]
- 第一个字符代表这个文件是『文件夹、文件或链接文件等等』:
- 接下来的字符中,以三个为一组,且均为『rwx』的三个參数的组合。当中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可运行(execute)。要注意的是,这三个权限的位置不会改变,假设没有权限。就会出现减号[ - ]而已。
- 第一组为『文件拥有者的权限』。以『install.log』那个文件为例,该文件的拥有者能够读写。但不可运行;
- 第二组为『同群组的权限』;
改变文件属性与权限
chgrp :改变文件所属群组
chown :改变文件拥有者
chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
Note: chgrp, chown等指令可能都须要使用root的身份才干够处理。而且不能通过-R来改变软链接文件夹下全部文件权限,一定要用实际文件夹。
chown
[root@www ~]# chown [-R] 账号名称 文件或文件夹
[root@www ~]# chown [-R] 账号名称:组名 文件或文件夹
选项与參数:
-R : 进行递归(recursive)的持续变更,亦即连同次文件夹下的全部文件都变更
Note:用户必须是已经存在系统中的账号,也就是在/etc/passwd这个文件中有纪录的username称才干改变。
比如复制行为(cp)会复制运行者的属性与权限,所以复制的文件还是属于root所拥有(这里假设root是之前的owner)。如此一来,即使你将文件拿给bin这个使用者了,那他仍然无法改动的(看属性/权限就知道了吧)。所以你就必须要将这个文件的拥有者与群组改动一下。
范例
pika:~$sudo chown -R pika:pika /usr/local/hadoop-2.6.4
将install.log的拥有者改为bin这个账号:
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log
将install.log的拥有者与群组改回为root:
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log
chmod
数字类型改变文件权限
文件的权限字符为:『-rwxrwxrwx』,这九个权限是三个三个一组的。当中。我们能够使用数字来代表各个权限,各权限的分数对比表例如以下:
r:4 w:2 x:1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是须要累加的,比如当权限为:[-rwxrwx---] 分数则是:
owner = rwx = 4+2+1 = 7 group = rwx = 4+2+1 = 7 others= --- = 0+0+0 = 0
# chmod [-R] xyz 文件或文件夹
选项与參数:
xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
-R : 进行递归(recursive)的持续变更,亦即连同次文件夹下的全部文件都会变更
符号类型改变文件权限
我们能够藉由u, g, o来代表三种身份(1)user (2)group (3)others的权限!此外。 a 则代表 all 亦即全部的身份!
那么读写的权限就能够写成r, w, x!
# chmod u=rwx,go=rx .bashrc
# 注意喔!
那个 u=rwx,go=rx 是连在一起的。中间并没有不论什么空格!
[root@www ~]# ls -al .bashrc
-rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc
权限mask
权限mask的设置採用数字式的。相同第一个数字表示全部者的权限mask,第二个数字表示群组的权限mask,第三个数字表示其它用户的权限mask
假设umask=000,就表示不屏蔽不论什么用户的不论什么权限,即全部用户具有读、写和运行权限,再比如fmask=033,就表示文档全部者具有读、写和运行权限,而群组和其它用户仅仅具有读取的权限。
windows分区权限产生的问题
from: http://blog.csdn.net/pipisorry/article/details/39854265
ref:
linux:文件及文件夹管理的更多相关文章
- Linux命令(14)文件和文件夹权限管理:chmod
linux文件和文件夹权限简介: chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限. Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方 ...
- Linux温习(三)Linux文件和文件夹管理
关于Linux文件夹的几个常见概念 路径 对文件位置信息的描写叙述机制.是指从树型文件夹中的某个文件夹层次到其内某个文件的一条通路.分为相对路径和绝对路径: 工作文件夹 登入系统后.用户始终处于某个文 ...
- linux 常用命令-文件、文件夹管理
1. 创建文件夹: mkdir dirName 删除文件夹: rm -rf * 删除当前目录下的所有文件以及文件夹(非交互式) rm -r --recursive 递归式删除所删除目录以及子目录(有 ...
- Linux基础_3_文件/文件夹权限管理
注:权限遮罩码: 控制用户创建文件和文件夹的默认安全设置,文件默认权限为666-umask的值,文件夹默认权限为777-umask的值. root默认0022,普通用户默认0002. 文件的默认权限不 ...
- Linux下查看文件和文件夹大小
当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. du可以查看文件及文件夹的大小. ...
- 【转】Linux下查看文件和文件夹大小
当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. du可以查看文件及文件夹的大小. ...
- Linux下查看文件和文件夹大小(转)
觉得挺有用的,就转到了自己的博客里,方便以后查询: 转自:http://www.cnblogs.com/benio/archive/2010/10/13/1849946.html 当磁盘大小超过标准时 ...
- Linux下查看文件和文件夹大小的df和du命令
转自:http://www.yayu.org/look.php?id=162 当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比 ...
- 【Linux/Ubuntu学习 14】Linux下查看文件和文件夹大小
当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择. df可以查看一级文件夹大小.使用比例.档案系统及其挂入点,但对文件却无能为力. du可以查看文件及文件夹的大小. ...
随机推荐
- Docker修改默认存储位置(转)
方法一.软链接 默认情况下Docker的存放位置为:/var/lib/docker 可以通过下面命令查看具体位置: sudo docker info | grep "Docker Root ...
- Arduino和C51开发LCD1602显示屏
技术:51单片机.Arduino.LCD1602 概述 本文介绍了LCD1602显示屏,并在LCD1602上显示字符串,对LCD1602常见的问题的解决和开发方法也做了简单介绍. 详细 代码下载: ...
- mysql配置和管理(转载)
MySQL的配置与管理 (2012-08-09 13:06:59) 转载▼ 标签: mysql 配置 管理 分类: MySQL 安装 yum -y install mysql-server 启动服 ...
- linux 版本中 i386/i686/x86-64/pcc 等的区别
在查看dpdk官方文档的时候,发现有 这样(kernel - devel.x86_64; kernel - devel.ppc64:glibc.i686)这样的安装包信息,收集了点资料来分析这三者的关 ...
- linux平台下server运维问题分析与定位
结合我工作中碰到的运维问题,总结一下Linux下server常见的运维问题以及定位方式.这里的server主要指自主开发的逻辑server,web srv因为通常采用通用的架构所以问题比较少. 逻辑s ...
- HDU 3657 Game (SAP | Dinic | EK 三种算法的比较)
Game Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- 【struts2】Struts2的异常处理
在Action中execute方法声明为:public String execute() throws Exception,这样,Action可以抛出任何Exception. 1)自己实现异常处理 我 ...
- 【Linux】字符转换命令expand
这命令就是在将 [tab] 按键转成空格键: [root@www ~]# expand [-t] file 选项与参数: -t :后面可以接数字.一般来说,一个 tab 按键可以用 个空格键取代. 我 ...
- Linux Crontab内环境变量与Shell环境变量的关系及解决问题的办法
为了定时监控Linux系统CPU.内存.负载的使用情况,写了个Shell脚本,当达到一定值得时候,发送邮件通知.需要用到Crontab的定时任务去执行这个脚本,但是发现通过命令(./test.sh)执 ...
- Happy Java:定义泛型参数的方法
在平时写代码时,可以自定义泛型类.当使用同一类型的对象时,这是非常有用的,但在实例化类之前,我们不知道它将是哪种类型. 下面让我们定义一个使用泛型参数的方法.首先,在定义一个类用到泛型时,必须使用特殊 ...