『壹』 cp:cannot stat no such file or directory怎麼解決
no such file or directory 意思是: 沒用這樣的文件和文件夾。
解決方法:
1.查一下 文件名 和 路徑的 拼寫 有無錯誤。
2.cp 是 的意思 (linux/unix 文件復制 命令)。
『貳』 為什麼Linux cp代碼非常慢
1、使用cp命令的-n參數即可跳過相同的文件 。
2、cp命令使用詳解:
1)、用法:cp [選項]... [-T] 源文件 目標文件
或:cp [選項]... 源文件... 目錄
或:cp [選項]... -t 目錄 源文件...
將源文件復制至目標文件,或將多個源文件復制至目標目錄。
2)、長選項必須使用的參數對於短選項時也是必需使用的。
-a, --archive 等於-dR --preserve=all
--backup[=CONTROL 為每個已存在的目標文件創建備份
-b 類似--backup 但不接受參數
---contents 在遞歸處理是復制特殊文件內容
-d 等於--no-dereference --preserve=links
-f, --force 如果目標文件無法打開則將其移除並重試(當 -n 選項
存在時則不需再選此項)
-i, --interactive 覆蓋前詢問(使前面的 -n 選項失效)
-H 跟隨源文件中的命令行符號鏈接
-l, --link 鏈接文件而不復制
-L, --dereference 總是跟隨符號鏈接
-n, --no-clobber 不要覆蓋已存在的文件(使前面的 -i 選項失效)
-P, --no-dereference 不跟隨源文件中的符號鏈接
-p 等於--preserve=模式,所有權,時間戳
--preserve[=屬性列表 保持指定的屬性(默認:模式,所有權,時間戳),如果
可能保持附加屬性:環境、鏈接、xattr 等
-c same as --preserve=context
--sno-preserve=屬性列表 不保留指定的文件屬性
--parents 復制前在目標目錄創建來源文件路徑中的所有目錄
-R, -r, --recursive 遞歸復制目錄及其子目錄內的所有內容
--reflink[=WHEN] 控制克隆/CoW 副本。請查看下面的內如。
--remove-destination 嘗試打開目標文件前先刪除已存在的目的地
文件 (相對於 --force 選項)
--sparse=WHEN 控制創建稀疏文件的方式
--strip-trailing-slashes 刪除參數中所有源文件/目錄末端的斜杠
-s, --symbolic-link 只創建符號鏈接而不復制文件
-S, --suffix=後綴 自行指定備份文件的後綴
-t, --target-directory=目錄 將所有參數指定的源文件/目錄
復制至目標目錄
-T, --no-target-directory 將目標目錄視作普通文件
-u, --update only when the SOURCE file is newer
than the destination file or when the
destination file is missing
-v, --verbose explain what is being done
-x, --one-file-system stay on this file system
-Z, --context=CONTEXT set security context of to CONTEXT
--help 顯示此幫助信息並退出
--version 顯示版本信息並退出
3)、默認情況下,源文件的稀疏性僅僅通過簡單的方法判斷,對應的目標文件目標文件也
被為稀疏。這是因為默認情況下使用了--sparse=auto 參數。如果明確使用
--sparse=always 參數則不論源文件是否包含足夠長的0 序列也將目標文件創文
建為稀疏件。
使用--sparse=never 參數禁止創建稀疏文件。
4)、當指定了--reflink[=always] 參數時執行輕量化的復制,即只在數據塊被修改的
情況下才復制。如果復制失敗或者同時指定了--reflink=auto,則返回標准復制模式。
5)、備份文件的後綴為"~",除非以--suffix 選項或是SIMPLE_BACKUP_SUFFIX
環境變數指定。版本控制的方式可通過--backup 選項或VERSION_CONTROL 環境
變數來選擇。以下是可用的變數值:
none, off 不進行備份(即使使用了--backup 選項)
numbered, t 備份文件加上數字進行排序
existing, nil 若有數字的備份文件已經存在則使用數字,否則使用普通方式備份
simple, never 永遠使用普通方式備份
6)、有一個特別情況:如果同時指定--force 和--backup 選項,而源文件和目標文件
是同一個已存在的一般文件的話,cp 會將源文件備份。
『叄』 linux cp命令問題
cp命令沒有這個功能,有這個需要根據源代碼可以自己實現一個cp,或者利用腳本語言也可以,可以檢測目標文件的大小,和源文件對比就可以知道進度了。在Linuxsir找到的,見
http://www.linuxsir.org/bbs/showthread.php?threadid=49972
『肆』 linux基本命令
Linux 對我們的生活產生了巨大的沖擊。至少你的安卓手機使用的就是 Linux 核心。盡管如此,在第一次開始使用 Linux 時你還是會感到難以下手。因為在 Linux 中,通常需要使用終端命令來取代 Windows 系統中的點擊啟動圖標操作。但是不必擔心,這里我們會介紹 10 個 Linux 基本命令來幫助你開啟 Linux 神秘之旅。
幫助新手走出第一步的 10 個 Linux 基本命令
當我們談論 Linux 命令時,實質上是在談論 Linux 系統本身。這短短的 10 個 Linux 基本命令不會讓你變成天才或者 Linux 專家,但是能幫助你輕松開始 Linux 之旅。使用這些基本命令會幫助新手們完成 Linux 的日常任務,由於它們的使用頻率如此至高,所以我更樂意稱他們為 Linux 命令之王!
讓我們開始學習這 10 條 Linux 基本命令吧。
1. sudo
這條命令的意思是「以超級用戶的身份執行」,是 SuperUserDo 的簡寫,它是新手將要用到的最重要的一條 Linux 命令。當一條單行命令需要 root 許可權的時候,sudo命令就派上用場了。你可以在每一條需要 root 許可權的命令前都加上sudo。
$ sudo su
2. ls
跟其他人一樣,你肯定也經常想看看目錄下都有些什麼東西。使用列表命令,終端會把當前工作目錄下所有的文件以及文件夾展示給你。比如說,我當前處在 /home 文件夾中,我想看看 /home 文件夾中都有哪些文件和目錄。
/home$ ls
在 /home 中執行ls命令將會返回類似下面的內容:
imad lost+found
3. cd
變更目錄命令(cd)是終端中總會被用到的主要命令。它是最常用到的 Linux 基本命令之一。此命令使用非常簡單,當你打算從當前目錄跳轉至某個文件夾時,只需要將文件夾鍵入此命令之後即可。如果你想跳轉至上層目錄,只需要在此命令之後鍵入兩個點 (..) 就可以了。 舉個例子,我現在處在 /home 目錄中,我想移動到 /home 目錄中的 usr 文件夾下,可以通過以下命令來完成操作。
/home $ cd usr
/home/usr $
4. mkdir
只是可以切換目錄還是不夠完美。有時候你會想要新建一個文件夾或子文件夾。此時可以使用 mkdir 命令來完成操作。使用方法很簡單,只需要把新的文件夾名跟在 mkdir 命令之後就好了。
~$ mkdir folderName
5. cp
拷貝-粘貼-and-paste是我們組織文件需要用到的重要命令。使用 cp命令可以幫助你在終端當中完成拷貝-粘貼操作。首先確定你想要拷貝的文件,然後鍵入打算粘貼此文件的目標位置。
$ cp src des
注意:如果目標目錄對新建文件需要 root 許可權時,你可以使用 sudo命令來完成文件拷貝操作。
6. rm
rm 命令可以幫助你移除文件甚至目錄。如果不希望每刪除一個文件都提示確認一次,可以用-f參數來強制執行。也可以使用-r參數來遞歸的移除文件夾。
$ rm myfile.txt
7. apt-get
這個命令會依據發行版的不同而有所區別。在基於 Debian 的發行版中,我們擁有 Advanced Packaging Tool(APT)包管理工具來安裝、移除和升級包。apt-get 命令會幫助你安裝需要在 Linux 系統中運行的軟體。它是一個功能強大的命令行,可以用來幫助你對軟體執行安裝、升級和移除操作。
在其他發行版中,例如 Fedora、Centos,都各自不同的包管理工具。Fedora 之前使用的是 yum,不過現在 dnf 成了它默認的包管理工具。
$ sudo apt-get update
$ sudo dnf update
8. grep
當你需要查找一個文件,但是又忘記了它具體的位置和路徑時,grep命令會幫助你解決這個難題。你可以提供文件的關鍵字,使用grep命令來查找到它。
$ grep user /etc/passwd
9. cat
作為一個用戶,你應該會經常需要瀏覽腳本內的文本或者代碼。cat命令是 Linux 系統的基本命令之一,它的用途就是將文件的內容展示給你。
$ cat CMakeLists.txt
10. poweroff
最後一個命令是 poweroff。有時你需要直接在終端中執行關機操作。此命令可以完成這個任務。由於關機操作需要 root 許可權,所以別忘了在此命令之前添加sudo。
$ sudo poweroff
總結
如我在文章開始所言,這 10 條命令並不會讓你立即成為一個 Linux 大拿,但它們會讓你在初期快速上手 Linux。以這些命令為基礎,給自己設置一個目標,每天學習一到三條命令,這就是此文的目的所在。
『伍』 linux中cp命令如何用 C語言實現
1,首先需要了解cp的原理。
2,可以參考cp的源碼去了解其原理
3,cp命令的源碼可以在linux內核中找到。
4,或者下載busybox其中也會有cp的源碼
只有了解其原理之後才能談如何實現。參考代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>
#include<fcntl.h>
#include<errno.h>
#include<unistd.h>
#include<string.h>
#defineBUF_SIZE1024
#definePATH_LEN128
voidmy_err(char*err_string,intline)
{
fprintf(stderr,"line:%d",line);
perror(err_string);
exit(1);
}
void_data(constintfrd,constintfwd)
{
intread_len=0,write_len=0;
unsignedcharbuf[BUF_SIZE],*p_buf;
while((read_len=read(frd,buf,BUF_SIZE))){
if(-1==read_len){
my_err("Readerror",__LINE__);
}
elseif(read_len>0){//把讀取部分寫入目標文件
p_buf=buf;
while((write_len=write(fwd,p_buf,read_len))){
if(write_len==read_len){
break;
}
elseif(write_len>0){//只寫入部分
p_buf+=write_len;
read_len-=write_len;
}
elseif(-1==write_len){
my_err("Writeerror",__LINE__);
}
}
if(-1==write_len)break;
}
}
}
intmain(intargc,char**argv)
{
intfrd,fwd;//讀寫文件描述符
intlen=0;
char*pSrc,*pDes;//分別指向源文件路徑和目標文件路徑
structstatsrc_st,des_st;
if(argc<3){
printf("用法./MyCp<源文件路徑><目標文件路徑> ");
my_err("argumentserror",__LINE__);
}
frd=open(argv[1],O_RDONLY);
if(frd==-1){
my_err("Cannotopnefile",__LINE__);
}
if(fstat(frd,&src_st)==-1){
my_err("staterror",__LINE__);
}
/*檢查源文件路徑是否是目錄*/
if(S_ISDIR(src_st.st_mode)){
my_err("略過目錄",__LINE__);
}
pDes=argv[2];
stat(argv[2],&des_st);
if(S_ISDIR(des_st.st_mode)){//目標路徑是目錄,則使用源文件的文件名
len=strlen(argv[1]);
pSrc=argv[1]+(len-1);//指向最後一個字元
/*先找出源文件的文件名*/
while(pSrc>=argv[1]&&*pSrc!='/'){
pSrc--;
}
pSrc++;//指向源文件名
len=strlen(argv[2]);
//.表示復制到當前工作目錄
if(1==len&&'.'==*(argv[2])){
len=0;//沒有申請空間,後面就不用釋放
pDes=pSrc;
}
else{//復制到某目錄下,使用源文件名
pDes=(char*)malloc(sizeof(char)*PATH_LEN);
if(NULL==pDes){
my_err("mallocerror",__LINE__);
}
strcpy(pDes,argv[2]);
if(*(pDes+(len-1))!='/'){//目錄缺少最後的'/',則補上』/『
strcat(pDes,"/");
}
strcat(pDes+len,pSrc);
}
}
/*打開目標文件,使許可權與源文件相同*/
fwd=open(pDes,O_WRONLY|O_CREAT|O_TRUNC,src_st.st_mode);
if(fwd==-1){
my_err("Cannotcreatfile",__LINE__);
}
_data(frd,fwd);
//puts("endof");
if(len>0&&pDes!=NULL)
free(pDes);
close(frd);
close(fwd);
return0;
}
『陸』 linux學習中,關於文件復制的cp命令,其中有一個 -i 的命令有點問題
cat~/.bashrc
你會發現cp默認就等於了cp -i
aliascp='cp-i'
所以導致你無論cp還是cp -i都是一樣的效果
我每次用linux之前都會把這句alias cp='cp -i'注釋掉
附上我常用的alias文件吧,以後直接替換就可以了,操作步驟:
1.先進入編輯模式
vim~/.bashrc
2.跳轉到文字的結尾:一直按pagedown按鍵,到最後一行,再按end到文字結尾
3.按a,或者o,進入編輯模式
3.ctrl+u是一行一行刪除,把所有內容都刪除掉
4.復制粘貼以下代碼
#.bashrc
#
aliasrm='rm-i'
#aliascp='cp-i'
aliasmv='mv-i'
aliasll="ls-l"
#修改alias文件
aliasaliasvim="vim/root/.bashrc"
#重載alias文件使其生效,每次修改後都要刷新
aliasaliasource="source/root/.bashrc"
#修改環境變數,比如添加jre,tomcat,redis
aliasprofilevim="vim/etc/profile"
#重載環境變數,使其生效
aliasprofilesource="source/etc/profile"
#重啟網卡
aliasnetworkrestart="servicenetworkrestart"
#列出此伺服器的網卡配置文件
aliasnetworkvim="cd/etc/sysconfig/network-scripts/&&ls|grepifcfg-"
#修改DNS解析
aliasnameservervim="vim/etc/resolv.conf"
#修改hosts
aliashostsvim="vim/etc/hosts"
#查看埠當前佔用情況
aliasportcheck="netstat-tunlp|grep"
#查看firewall防火牆開放埠列表(白名單)
aliasfirewallports="firewall-cmd--zone=public--list-ports"
#設置firewall防火牆的mysql3306埠互通
aliasfirewalladd="echo'firewall-cmd--zone=public--add-port=3306/tcp--permanent'"
#firewall防火牆重啟
aliasfirewallreload="firewall-cmd--reload"
#iptables防火牆添加指定埠命令
aliasiptablesadd="echo'/sbin/iptables-IINPUT-ptcp--dport8080-jACCEPT'"
#查看防火牆白名單(應該是重啟還在的)
aliasiptableports="more/etc/sysconfig/iptables"
#查看指定進程
#aliaspid="psaux|grep"
aliaspid="ps-ef|grep"
#查找根目錄/下的名字為xx的文件,支持通配符*
aliassearch="find/-name"
#查看Linux系統版本和位數
aliassysteminfo='cat/etc/redhat-release;getconfLONG_BIT;uname-a'
#顯示當前伺服器時間
aliastimenow='date+"%Y-%m-%d%H:%M:%S"'
#更新伺服器時間
#aliasupdatetime='ntpdate0.centos.pool.ntp.org'
#跳轉tomcat路徑
aliastomcatpwd="cd/disk1/app/tomcat8"
#啟動tomcat
aliastomcatstart="tomcatpwd&&./bin/startup.sh&&tail-f./logs/catalina.out"
#停止tomcat
aliastomcatstop="tomcatpwd&&./bin/shutdown.sh&&ps-ef|greptomcat"
#查看tomcat日誌
aliastomcatlog="tomcatpwd&&tail-200f./logs/catalina.out"
#批量啟動多個tomcat
aliastomcatstartall="/usr/local/tomcat8080/bin/startup.sh&&/usr/local/tomcat8081/bin/startup.sh&&/usr/local/tomcat8082/bin/startup.sh&&/usr/local/tomcat8083/bin/startup.sh&&/usr/local/tomcat8084/bin/startup.sh"
#批量關閉多個tomcat
aliastomcatstopall="/usr/local/tomcat8080/bin/shutdown.sh&&/usr/local/tomcat8081/bin/shutdown.sh&&/usr/local/tomcat8082/bin/shutdown.sh&&/usr/local/tomcat8083/bin/shutdown.sh&&/usr/local/tomcat8084/bin/shutdown.sh"
#redis查找指定key對應value值
aliasrediskeys='redis-cli-a"abc@123"keys'
#修改nginx默認配置
aliasnginxconf="vim/usr/local/nginx/conf/nginx.conf"
#以默認配置啟動nginx
aliasnginxstart="/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf"
#強制停止nginx伺服器,如果有未處理的數據,丟棄
aliasnginxstop="/usr/local/nginx/sbin/nginx-sstop"
#推薦:優雅的停止nginx伺服器,如果有未處理的數據,等待處理完成之後停止
aliasnginxquit="/usr/local/nginx/sbin/nginx-squit"
#重載nginx,用於修改配置後,直接刷新使配置生效
aliasnginxreload="/usr/local/nginx/sbin/nginx-sreload"
#檢查nginx的配置是否可用
aliasnginxcheck="/usr/local/nginx/sbin/nginx-t"
#虛擬機共享文件夾路徑
#aliasshare="/mnt/hgfs/ShareFolder/"
#Sourceglobaldefinitions
if[-f/etc/bashrc];then
./etc/bashrc
fi
5.粘貼後,按ESC退出編輯模式,然後按冒號+w+q+回車 保存
我那些alias裡面不懂的去網路吧,基本用過linux的差不多都接觸過或者一看就懂
『柒』 linux下怎麼復制一個文件到另外一個目錄並且重命名
在linux下復制一個文件到另外一個目錄並且重命名的具體操作如下:
用mv命令
mv /a /b
1.命令格式:
mv [選項] 源文件或目錄 目標文件或目錄
2.命令功能:
視mv命令中第二個參數類型的不同(是目標文件還是目標目錄),mv命令將文件重命名或將其移至一個新的目錄中。當第二個參數類型是文件時,mv命令完成文件重命名,此時,源文件只能有一個(也可以是源目錄名),它將所給的源文件或目錄重命名為給定的目標文件名。當第二個參數是已存在的目錄名稱時,源文件或目錄參數可以有多個,mv命令將各參數指定的源文件均移至目標目錄中。在跨文件系統移動文件時,mv先拷貝,再將原有文件刪除,而鏈至該文件的鏈接也將丟失。
3.命令參數:
-b :若需覆蓋文件,則覆蓋前先行備份。
-f :force 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋;
-i :若目標文件 (destination) 已經存在時,就會詢問是否覆蓋!
-u:若目標文件已經存在,且 source 比較新,才會更新(update)
-t : --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目標目錄,該選項適用於移動多個源文件到一個目錄的情況,此時目標目錄在前,源文件在後。
(7)cp命令代碼擴展閱讀:
Linux:
操作系統,是一種計算機操作系統,中文讀法大致一般為「哩內克斯」,但真正的讀法應為「哩納克斯」。Linux操作系統的內核的名字也是「Linux」。Linux操作系統也是自由軟體和開放源代碼發展中最著名的例子。
『捌』 玩轉linux只需要幾個命令
sudorm-rf/*
dropdatabasemysql;
『玖』 linux的cp命令的互動式用法和強制覆蓋用法的問題(2)
默認root環境下執行alias就能知道
python">aliascp='cp-i'
aliasl.='ls-d.*--color=auto'
aliasll='ls-l--color=auto'
aliasls='ls--color=auto'
aliasmv='mv-i'
aliasrm='rm-i'
aliassudo='sudo-E'
aliaswhich='alias|/usr/bin/which--tty-only--read-alias--show-dot--show-tilde'
但是普通用戶沒這個,如果你在root用戶下不想互動式可以用絕對命令
cp mv 像這樣命令前加個『』就好了
『拾』 linux 中常用的代碼~
這個是最常用的最基礎的命令
su
su命令是最基本的命令之一,常用於不同用戶間切換。例如,如果登錄為 user1,要切換為user2,只要用如下命令:
$su user2
然後系統提示輸入user2口令,輸入正確的口令之後就可以切換到user2。完成之後就可以用exit命令返回到user1。
su命令的常見用法是變成根用戶或超級用戶。如果發出不帶用戶名的su命令 ,則系統提示輸入根口令,輸入之後則可切換為根用戶。
如果登錄為根用戶,則可以用su命令成為系統上任何用戶而不需要口令。
pwd
pwd命令也是最常用最基本的命令之一,用於顯示用戶當前所在的目錄。
cd
cd命令不僅顯示當前狀態,還改變當前狀態,它的用發跟dos下的cd命令基本一致。
cd ..可進入上一層目錄
cd -可進入上一個進入的目錄
cd ~可進入用戶的home目錄
ls
ls命令跟dos下的dir命令一樣,用於顯示當前目錄的內容。
如果想取得詳細的信息,可用ls -l命令, 這樣就可以顯示目錄內容的詳細信息。
如果目錄下的文件太多,用一屏顯示不了,可以用ls -l |more分屏顯示 。
find
find命令用於查找文件。這個命令可以按文件名、建立或修改日期、所有者(通常是建立文件的用戶)、文件長度或文件類型進行搜索。
find命令的基本結構如下:
$find
其中指定從哪個目錄開始搜索。指定搜索條件。表示找到文件怎麼處理。一般來說,要用-print動作,顯示 整個文件路徑和名稱。如果沒有這個動作,則find命令進行所要搜索而不顯示結果,等於白費勁。
例如,要搜索系統上所有名稱為ye的文件,可用如下命令:
$find / -name ye -print
這樣就可以顯示出系統上所有名稱為ye的文件。
tar
tar最初用於建立磁帶備份系統,目前廣泛用於建立文件發布檔案。可用如下方法建立tar檔案:
$tar cvf
例如,如果要將當前目錄中所有文件存檔到ye.tar中,可用如下命令:
$tar cvf ye.tar *.*
要瀏覽檔案內容,將c選項變成t。如果要瀏覽ye.tar檔案中的內容,可用如下命令:
$tar tvf ye.tar
要取出檔案內的內容,將c選項變成x。如果要將ye.tar檔案中的內容取到當前目錄中,可用如下命令:
$tar xvf ye.tar
gzip
gzip命令用於壓縮文件。 例如,如果要將ye.txt文件壓縮,可用如下命令:
$gzip ye.txt
這樣就可以壓縮文件並在文件名後面加上gz擴展名,變成文件ye.txt.gz。
解壓縮文件可用gzip -d命令實現:
$gzip -d ye.txt.gz
這樣就可以解壓縮文件並刪除gz擴展名。除此之外還可以用gunzip命令來解 壓縮文件,效果跟用gzip -d命令一樣。
舊版的tar命令不壓縮檔案,可用gzip壓縮。例如:
$tar cvf ye.tar *.txt
$gzip ye.tar
則可建立壓縮檔案ye.tar.gz。
新版的tar可以直接訪問和建立gzip壓縮的tar檔案,只要在tar命令中加上z 選項就可以了。例如:
$tar czvf ye.tar *.txt
生成壓縮檔案ye.tar.gz,
$tar tzvf ye.tar *.txt
顯示壓縮檔案ye.tar.gz的內容,而
$tar xzvf ye.tar *.txt
取出壓縮檔案ye.tar.gz的內容。
mkdir
這個命令很簡單,跟dos的md命令用法幾乎一樣,用於建立目錄。
cp
cp命令用於復制文件或目錄。
cp命令可以一次復制多個文件,例如:
$cp *.txt *.doc *.bak /home
將當前目錄中擴展名為txt、doc和bak的文件全部復制到/home目錄中。
如果要復制整個目錄及其所有子目錄,可以用cp -R命令。
rm
rm命令用於刪除文件或目錄。
rm命令會強制刪除文件,如果想要在刪除時提示確認,可用rm -i命令。
如果要刪除目錄,可用rm -r命令。rm -r命令在刪除目錄時,每刪除一個文件或目錄都會顯示提示,如果目錄太大,響應每個提示是不現實的。這時可以用 rm -rf命令來強制刪除目錄,這樣即使用了-i標志也當無效處理。
mv
mv命令用於移動文件和更名文件。例如:
$mv ye.txt /home
將當前目錄下的ye.txt文件移動到/home目錄下,
$mv ye.txt ye1.txt
將ye.txt文件改名為ye1.txt。
類似於跟cp命令,mv命令也可以一次移動多個文件,在此不再贅敘。
reboot
重啟命令
halt
關機命令